web-dev-qa-db-ja.com

www-dataグループへの書き込み権限の付与

私はウェブサイトを作成しています、そして機能の一部はphpでユーザー生成データを書き出すことです。 Ubuntu 13.04でnginxを使っています。私がテストしている瞬間、locahost上のnginxを通してすべてが提供されます。

私のphpスクリプトはテキストファイルを書きません(私はこれを手動ですることができます)そして私はそれが私の/var/www/example.com/public_htmlディレクトリに書くためのパーミッション問題だと思います。

現時点で私はこのディレクトリを所有していますが、/ var/wwwディレクトリの所有権とそれに含まれるものすべてをwww-dataユーザーに譲渡して(またはグループにする必要がありますか?) www-dataグループ次のようにします。

useradd -G www-data iain
chown -R www-data:www-data /var/www/example.com
chmod 775 /var/www

それで、これはwww-dataグループの誰もが/ var/wwwで読み書き、実行できることを意味しますか?

23
duff

まず、useraddは新しいユーザーを作成します。あなたは(すでに)存在しているので、代わりにusermodを呼び出したいです。それでそれはそうでしょう:

Sudo usermod -aG www-data iain
addgroup www-data

(Debianベースのサーバ(Ubuntuを含む)では-aがあなたをそのグループに追加し、他のグループへのメンバーシップを維持することに注意してください。それを忘れてあなたはwww-dataグループだけに所属するでしょう。 SUSEタイプのサーバーでは、オプションは-Aではなく-aGであるため、正しく理解するためにman usermodを注意深く読んでください。)

次に、Apacheに/var/wwwへの完全なアクセス権を与えたくないです。これは潜在的に重大なセキュリティ違反です。一般原則として、必要なものだけを許可し、それ以上のものは許可しない( 最小特権の原則 )。この場合、www-dataに書く(そして読む)にはApache(www-data)とあなた(/var/www/example.com/public_html group)が必要です。

Sudo chown -R www-data:www-data /var/www/example.com/public_html
Sudo chmod -R 770 /var/www/example.com/public_html

編集:元の質問に答えるために、はい、www-dataのすべてのメンバーが/var/wwwを読み取り、実行できるようになりました(パーミッションの最後のビットは5 = read + execです)。しかし、あなたは-Rスイッチを使ったことがないので、それは/var/wwwだけに適用され、それが含むファイルとサブディレクトリには適用されません。今、彼らが書くことができるかどうかは別の問題であり、あなたが設定していない/var/wwwのグループによります。私はそれが通常root:rootであると思うので、いいえ、彼らは(おそらく)書くことができません。

2014-06-22に編集-aGオプションがDebianベースのサーバーで有効であるというメモを追加しました。明らかにディストリビューションによって異なりますので、実行する前にmanをよく読んでください。

46
Calimo