「/ 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: -
この状況では、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
フォルダーxyz
をグループvar-www
に追加することにより、この問題を解決しました。したがって、今ではサブフォルダ内のファイルにも書き込むことができます