VPS Webサーバー(Debian 8 + Apache 2 + PHP 5.6))をインストールするための最初のステップを示していますが、ファイル/フォルダーのアクセス許可についてサポートが必要です。
私はすでにこの主題についていくつかの同様のトピックを見つけました(まったく同じではありません)、そしてすべて4または5歳からです。それらのいくつかは、非推奨のPHPメソッドを使用したソリューションを指しています。今日、いくつかの新しいメソッドまたはソリューションがあるかもしれません。
さて、www-data
ユーザー/グループで実行されるApache2があります。そこで、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(webadmin
として記録)を使用してアップロードしたすべてのフォルダーとPHP/Htmlファイルは、もちろん所有者としてwebadmin
を取得します。 PHPを使用してサブフォルダーを作成し、画像をアップロードすると、所有者としてwww-data
ユーザーが取得されます。このシナリオでは、SFTPを介してファイルを削除するなど、いくつかのアクセス許可の問題が発生しています。
webadmin
ユーザーおよびwww-data
グループとして実行するようにApacheを割り当てることもできますが、セキュリティの問題が発生する可能性があると思います(そうではないですか?)。この問題を回避するためにフォルダを作成してファイルをアップロードするサーバーまたはPHPスクリプトを構成する標準的で最良の方法はありますか?
あなたの問題は、新しいファイルがグループ書き込み可能ではないということです。ディレクトリでsetgidを使用してグループを設定する代わりに、 [〜#〜] acl [〜#〜]s より柔軟性があります。
デフォルトのACLエントリは、新しいファイルとディレクトリに継承され、ACLで定義されたアクセス許可を付与します。グループwebadmin
のデフォルトACLエントリを設定して、rwx
を許可するには:
setfacl -m default:g:webadmin:rwx /var/www/website.com/public_html/uploads
ディレクトリに作成された新しいファイルは、グループwebadmin
に対して読み取りと書き込みが可能です。
ACLがオプションでない場合、umaskを変更する必要があります、これは新しいファイルのデフォルトのUNIX権限を決定します。新しいumaskの賢明な選択は、002
(ワールド書き込み可能なビットマスク)と007
(すべてのワールド許可ビットがマスクされている、つまりグループと所有者のみがアクセスできる)。
Apacheumaskを設定するには、systemdユニットファイルを/ etcにコピーします。
cp /lib/systemd/system/Apache2.service /etc/systemd/system/
/etc/systemd/system/Apache2.service
セクションに UMask=<umask>
を追加して、[Service]
にumaskを構成します。これは、Apacheによって作成されたすべてのファイルに影響することに注意してください。
sftpのumaskを変更する必要があるのは、アップロードされたファイル/ディレクトリをPHP/Apacheから変更する必要がある場合のみです。デフォルトのumask022
は、ファイルをグループおよび誰でも読み取り可能に作成しますが、グループ書き込み可能ではありません。 sftpのデフォルトumaskを構成する最も簡単な方法は、 pam_umask
を使用することです。
カスタム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>
最初のルールは、ユーザーがグループ<yourgroup>
に属していない場合、つまりユーザーがグループ<yourgroup>
に属している場合にのみ、次のルールを適用するようにpamに指示します。 2番目のルールは、umaskを<umask>
に設定します。
補遺:mv
で移動された既存のファイルは、元の権限と所有権を保持することに注意してください。代わりにcp -d
を使用してファイルをコピーすることにより、umaskおよびディレクトリsetgid/ACLからデフォルトの権限を適用できます。