Apache PHPアップロード - 所有権と権限

Apache PHPアップロード - 所有権と権限

VPS Webサーバー(Debian 8 + Apache 2 + PHP 5.6)をインストールするための最初のステップを提供しており、ファイル/フォルダの権限についての支援が必要です。

このトピックでは、いくつかの同様のスレッド(まったく同じではありません)が見つかりましたが、すべて4歳または5歳の子供のためです。そのうちのいくつかは、廃止予定のPHPメソッドを使用するソリューションを指しています。たぶん今日は新しい方法や解決策があるかもしれません。

さて、Apache 2はwww-dataユーザー/グループで実行されます。だから私はという名前のユーザーを作成してグループにwebadmin入れ、www-dataそれをデフォルトのWebサイトフォルダの所有者として構成しました。

adduser webadmin
usermod -a -G www-data webadmin
chown -R webadmin:www-data /var/www/website.com

権限も変更しましたpublic_html次のフォルダ:

find /var/www/website.com/public_html -type f -exec chmod 644 {} +
find /var/www/website.com/public_html -type d -exec chmod 755 {} +
find /var/www/website.com/public_html -type d -exec chmod g+s {} +

アップロードされたファイル(静的ファイルのみ - 画像)を受け取るフォルダを作成しました。

mkdir /var/www/website.com/public_html/uploads
chown webadmin:www-data /var/www/website.com/public_html/uploads
chmod 774 /var/www/website.com/public_html/uploads

今何が起こりますか? SFTPを使用してアップロードするすべてのフォルダとPHP / Htmlファイル(として記録されているwebadmin)はwebadminもちろん、所有者になります。 PHPを使用してサブフォルダを作成して画像をアップロードすると、ユーザーはwww-data所有者になります。この場合、SFTP経由でファイルを削除するなど、いくつかの権限の問題が発生しました。

webadminユーザーとグループで実行するようにApacheを指定できますが、セキュリティ上のwww-data問題がある可能性があります(いいえ?)。この問題を回避するために、フォルダを作成してファイルをアップロードするようにサーバーまたはPHPスクリプトを構成する標準およびベストプラクティスはありますか?

ベストアンサー1

問題は、新しいファイルを書き込めないことです。使用する代わりに設定ディレクトリにグループを設定するには、次のようにします。前方十字靭帯Sこれにより大きな柔軟性が得られます。

これ基本アクセス制御リスト新しいファイルとディレクトリは、ACLで定義された権限を付与するエントリを継承します。設定するには基本アクセス制御リストwebadminグループ入力を許可rwx:

setfacl -m default:g:webadmin:rwx /var/www/website.com/public_html/uploads

このディレクトリに作成された新しいファイルは、グループから読み書きできますwebadmin


ACLがオプションでない場合、あなたは変更する必要がありますマスク、新しいファイルに対するデフォルトのUNIX権限を決定します。新入社員のための賢明な選択マスクはい002(世界書き込み可能ビットマスク)と007(世界中の権限ビットマスク、つまりグループと所有者のみがアクセスできます)

Apacheの設定マスク、systemdユニットファイルを次の場所にコピーします。/など:

cp /lib/systemd/system/apache2.service /etc/systemd/system/

構成マスク/etc/systemd/system/apache2.service追加してUMask=<umask>[Service]セクションに。これはApacheによって生成されたすべてのファイルに影響します。

変化マスク~のためSFTPPHP / Apacheからアップロードされたファイル/ディレクトリを変更する必要がある場合にのみ必要です。デフォルトでは、umaskは022ファイルグループを作成してグローバルに読み取ることができますが、グループに書き込むことはできません。デフォルト値を設定する最も簡単な方法マスク~のためSFTPそしてpam_umask

カスタム適用マスク特定のグループのユーザーにのみ適用され、以下を使用する場合にのみ適用されます。SFTP、追加/etc/pam.d/sshd

session [default=1 success=ignore] pam_succeed_if.so user notingroup <yourgroup>
session optional                   pam_umask.so umask=<umask>

最初のルールは、ユーザーがグループにない場合は、次のルールをスキップするようにpamに指示します<yourgroup>。つまり、次の規則は、ユーザーがグループにいる場合にのみ適用されます<yourgroup>。 2番目のルールはumaskを<umask>


付録:移動された既存のファイルはmv元の権限と所有権を保持します。ファイルをコピーして、umaskおよびディレクトリsetgid / ACLのデフォルト権限を適用できますcp -d

おすすめ記事