Я дал разрешения на чтение и запись файлов в /var/www
работающему пользователю (мне), выполнив шаги, указанные в . Какой самый простой способ редактировать и добавлять файлы в «/ var / www»? , Он прекрасно работает, когда я пытаюсь создать / прочитать файл в каталоге проекта.
Скажем, я работаю в /var/www/xyz
Я могу читать и записывать файлы в этой папке с помощью кода php
. Теперь я создал папку внутри папки xyz
, скажем, abc
/var/www/xyz/abc
В моем коде php
, когда я читаю файл, расположенный внутри abc
, он работает нормально, но дает me 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: -
Решил эту проблему, добавив папку xyz
в группу var-www
. Таким образом, теперь я могу также записывать файлы в подпапках
Для этой ситуации вам нужно добавить бит set-group-ID
в каталог /var/www/xyz
, чтобы вновь созданные каталоги внутри группы наследовали от родителя.
chmod g+s /var/www/xyz
См. man 2 chmod
S_ISGID (02000) set-group-ID (установить эффективный идентификатор группы процесса для execve (2); обязательная блокировка, как описано в fcntl (2) ; взять группу нового файла из родительского каталога, как описано в chown (2) и mkdir (2))
blockquote>См. комментарии к ответу из указанного поста.
Редактировать после комментария:
Если вы добавили бит
setgid
в родительский каталог после , подкаталог был создан:[ 1120], но подкаталог был создан до этого: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