尽管将我添加到用户组,但在 var/www 中写入文件时权限被拒绝

尽管将我添加到用户组,但在 var/www 中写入文件时权限被拒绝

/var/www我按照给出的步骤授予了工作用户(我)读写文件的权限编辑和添加文件到“/var/www”的最简单方法是什么?。当我尝试在项目目录中创建/读取文件时,它工作正常。

说我在工作 /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: -

答案1

对于这种情况,您需要set-group-ID在目录中添加位/var/www/xyz,以便新创建的目录从父级继承组。

chmod g+s /var/www/xyz

man 2 chmod

S_ISGID (02000) 设置组 ID(在 execve(2) 上设置进程有效组 ID;强制锁定,如 fcntl(2) 中所述;从父目录中获取新文件的组,如 chown(2) 和 mkdir(2) 中所述)

请参阅对所引帖子答案的评论。

评论后编辑:

如果你setgid在父目录中添加了位子目录已创建:

  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

通过将文件夹添加xyz到组解决了此问题var-www。因此,现在我也可以写入子文件夹中的文件

相关内容