デフォルトで、Apache2によって作成されたファイルにumask 002
、つまりグループrwが必要です。
/ etc/Apache2/envvarsにumask 002
を入れてみましたが、このスクリプトはApache起動の一部として実行されますが(Apache2ctl graceful
)、umaskは効果がありません。おそらく、起動プロセスのどこかで(たとえば、ユーザーがroot
からwww-data
にダウングレードされたとき)、これを配置した方が良い場所があります。
私はFedoraについての投稿と、/etc/init.d/Apache2
にumaskを配置することを提案する投稿を読みましたが、Debian(Squeeze)ではこれらのどちらも適用/機能しません。
手伝ってくれますか?
Umask設定が有効であることを確認するには、簡単なテストを使用し、これには他のWebアプリケーションを使用しないでください。これらのアプリケーションは、Apacheのumask設定とは無関係に権限を変更する場合があります。
簡単なテストPHPスクリプト:
<?php
if ($fp = fopen(time() . '.txt', 'w')) {
fwrite($fp, 'This is a simple test.');
fclose($fp);
echo "done";
} else {
echo "error - cannot create file";
}
?>
ユーザーwww-dataに、この単純なテストファイルをインストールしたフォルダーへの書き込みアクセス権があることに注意してください。
新しいumaskを実行するには、ファイル/ etc/Apache2/envvarsがApache開始ファイル/etc/init.d/Apache2内で使用されるかどうかを確認します。
...
PIDFILE=$(. /etc/Apache2/envvars && echo $Apache_PID_FILE)
...
/ etc/Apache2/envvarsにumaskを設定します。
...
# umask 002 to create files with 0664 and folders with 0775
umask 002
Apacheを再起動します。
service Apache2 restart
違いを確認してください:
#> ls -l *.txt
-rw-rw-r-- 1 www-data www-data 14 2012-05-01 15:56 1335880583.txt
-rw-r--r-- 1 www-data www-data 14 2012-05-01 15:55 1335880540.txt
(systemdを使用するDebian Stretchの場合-ありがとうwomble!)
UMask=0002
Apache2 systemdサービスユニットファイルで、サービスユニットをリロードして、Apache2を再起動します。
$ pwd /etc/systemd/system/multi-user.target.wants $ cat Apache2.service [Unit] Description = Apache HTTP Server After = network.target remote-fs.target nss-lookup.target [Service]。 。 。 。 UMask = 0002 $ Sudo systemctl daemon-reload $ Sudo systemctl restart Apache2
複数のサイトを実行している場合、次のようにディレクトリごとにアクセス制御リスト(ACL)を使用してデフォルトのグループ権限を設定できます。
setid
フラグを設定して、すべての新しいファイルがディレクトリからグループを継承するようにします。
# chmod g+s wordpress
新しいファイルに、グループのアクセス許可のためのrw
を付けます。そのため www-data
は、アップロードユーザーがSFTPで送信したファイルに書き込むことができます。
# setfacl --default --modify group::rwx wordpress
ACLが次のようであることを確認します。
# 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
ファイルが作成され、機能することを確認します。
# ll test
-rw-rw-r-- 1 root www-data 0 Feb 17 01:09 test