Ubuntu 14.04で新しいウェブサーバーを設定し、PHP生成されたファイルのファイル権限を絞り込みます。
デフォルトでは、/var/www
内のすべてのディレクトリとファイルはwww-adminに所有/グループ化されます。ディレクトリの権限はrwxrwsr-x
で、ファイルの権限はrw-rw-r--
です。
次に、限られた数のディレクトリのグループをwww-dataに設定します。これにより、PHP(Apacheを介して)がログとキャッシュファイルをこの場所に書き込むことができます。
ただし、PHPを使用して0002
のumaskに従うことはできないため、PHPによって生成されたファイルは、www-dataユーザーにのみ書き込み可能です。 。継続的インテグレーションやその他のクリーンアッププロセスを使用しているため、これは問題です。
これまでのところ、私は:
/etc/pam.d/common-session
でumaskを0002に設定します/etc/pam.d/common-session-noninteractive
でumaskを0002に設定します/etc/profile
でumaskを0002に設定します/etc/Apache2/envvars
でumaskを0002に設定します/etc/login.defs
でumaskを0002に設定しますwww-data
を使用して/etc/passwd
のSudo chfn -o "umask=002" daemon_username
のumaskを0002に設定しますそして、私はまだ行き詰まっています。
サービスを停止/開始し、コンピュータを再起動しました。
/ etc/Apache2/envvarsの「umask 002」が機能するはずです。
「service Apache2 restart」ではなく、「service Apache2 stop; service Apache2 start」でApacheを再起動する必要があることに注意してください。
より詳細なサンプルが必要な場合は、こちらをご覧ください: https://serverfault.com/a/384922/228027
問題は、ファイルがPHP-FPMによって作成されていることです。これは、Apache2ではなく、親プロセスです。これを修正できる唯一の方法は、umaskを/etc/init/php7.1-fpm.confに追加することです。次に、PHP-FPMを再起動します。
関連スレッド: Nginx/php-fpm umask setting 。
これは、次のことに気づくまで機能しませんでした。WordpressのPDO SQLiteドライバープラグインは、グループの読み取り権限のみでデータベースファイルを作成します。
ここから作成スクリプトを使用して健全性をテストします Debian上のApacheでデフォルトのumaskを設定するにはどうすればよいですか 。
複数のサイトを実行している場合は、次のようにディレクトリごとにアクセス制御リスト(ACL)を使用してデフォルトのグループ権限を設定できます。
setid
フラグを設定して、すべての新しいファイルにディレクトリからグループを継承させる:
root@sh1:/srv/www/php/fastwarren.ca# chmod g+s wordpress
新しいファイルに、グループのアクセス許可としてrw
を付けます。そのため www-data
は、アップロードユーザーがSFTPで送信したファイルに書き込むことができます。
root@sh1:/srv/www/php/fastwarren.ca# setfacl --default --modify group:rwx wordpress
ACLが次のようであることを確認します。
root@sh1:/srv/www/php/fastwarren.ca# getfacl wordpress
# file: wordpress
# owner: carissacosgrove
# group: www-data
# flags: -s-
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:other::r-x
ファイルが作成され、機能したことを確認します。
root@sh1:/srv/www/php/fastwarren.ca# ll test
-rw-rw-r-- 1 root www-data 0 Feb 17 01:09 test