web-dev-qa-db-ja.com

ユーザーグループに自分を追加したにもかかわらず、var / wwwにファイルを書き込んでいる間に許可が拒否されました

「/ var/www」にファイルを編集および追加する最も簡単な方法は何ですか? に記載されている手順で、/var/wwwのファイルの読み取りと書き込みの許可を作業ユーザー(me)に与えました。プロジェクトディレクトリでファイルを作成/読み取りしようとすると、正常に機能します。

/var/www/xyzで作業しているとします

phpコードを使用して、このフォルダー内のファイルを読み書きできます。これで、フォルダーxyz内にフォルダーを作成しました。たとえば、abc

/var/www/xyz/abc

php内にあるファイルを読み取るときのabcコードでは正常に機能しますが、ファイルを作成しようとするとwarning: permission deniedが得られますこのフォルダ内。

正確な警告は

Warning: fopen(abc/a.txt): failed to open stream: Permission denied in /var/www/xyz/code.php

私はいくつかの出力を提供するように頼まれました:

stat /var/www/dodge
  File var/www/dodge' 
  Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 700h/1792d Inode: 1445503 Links: 8
Access: (2775/drwxrwsr-x) Uid: ( 33/www-data) Gid: ( 33/www-data)
Access: 2013-07-16 16:29:21.434531583 +0530
Modify: 2013-07-16 14:07:46.482782580 +0530
Change: 2013-07-16 16:28:04.622533850 +0530
 Birth: -

stat /var/www/xyz/abc
  File: /var/www/dodge/codes' 
  Size: 4096 Blocks: 8 IO Block: 4096 directory 
Device: 700h/1792d Inode: 1446465 Links: 2 
Access: (0775/drwxrwxr-x) Uid: ( 1000/ wq) Gid: ( 1000/ wq) 
Access: 2013-07-16 15:16:15.554661170 +0530 
Modify: 2013-07-16 15:13:42.698665686 +0530 
Change: 2013-07-16 15:13:42.698665686 +0530
 Birth: -
2
vinit

この状況では、set-group-IDビットをディレクトリ/var/www/xyzに追加して、内部に新しく作成されたディレクトリが親からグループを継承するようにする必要があります。

chmod g+s /var/www/xyz

man 2 chmodをご覧ください

S_ISGID(02000)set-group-ID(execve(2)でプロセス有効グループIDを設定、fcntl(2)で説明されているように強制ロック、chown(2)およびmkdirで説明されているように親ディレクトリから新しいファイルのグループを取得) (2))

参照された投稿からの回答に対するコメントを参照してください。

コメント後に編集:

親ディレクトリにsetgidビットを追加した場合afterサブディレクトリが作成されました:

  File var/www/dodge' 
  Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 700h/1792d Inode: 1445503 Links: 8
Access: (2775/drwxrwsr-x) Uid: ( 33/www-data) Gid: ( 33/www-data)
Access: 2013-07-16 16:29:21.434531583 +0530
Modify: 2013-07-16 14:07:46.482782580 +0530
Change: 2013-07-16 16:28:04.622533850 +0530 <---added setgid

しかし、サブディレクトリはその前に作成されました:

  File: /var/www/dodge/codes' 
  Size: 4096 Blocks: 8 IO Block: 4096 directory 
Device: 700h/1792d Inode: 1446465 Links: 2 
Access: (0775/drwxrwxr-x) Uid: ( 1000/ wq) Gid: ( 1000/ wq) 
Access: 2013-07-16 15:16:15.554661170 +0530 
Modify: 2013-07-16 15:13:42.698665686 +0530 
Change: 2013-07-16 15:13:42.698665686 +0530 <---before ctime above

setgidビットは、新しいファイルとディレクトリを作成するときに機能します。すでに作成されているものには機能しません。したがって、codesディレクトリはwqおよびグループwqによって引き続き所有され、他のユーザーはそこにファイルを作成する権限を持ちません。これが以前と同じエラーを受け取る理由です。 chownサブディレクトリを正しいグループに設定するか、削除して再作成します。

chown :group /var/www/dodge/code
2
Grzegorz Żur

フォルダーxyzをグループvar-wwwに追加することにより、この問題を解決しました。したがって、今ではサブフォルダ内のファイルにも書き込むことができます

1
vinit