我试图允许对user1和www-data (apache)/ home / user1 / public_html /文件夹的文件的权限。
我已经被指示运行这些命令:
sudo chown -R www-data:user1 /home/user1/public_html/ sudo chmod g+s /home/user1/public_html/
现在,www-data可以编辑/删除/添加文件到/ home / user1 / public_html /,但是user1不能编辑任何东西。
我该如何解决这个问题?
谢谢,
实现这个最好的方法是使用posix ACL 。 标准的UNIX文件权限不真的把它剪掉。 你可以用一些简单的方法来实现,但它并不仅仅是一个杂凑,基本上它不是一个简单的解决scheme。
使用ACL可以毫不费力地解决这个问题。 要做到这一点,你可以使用下面的命令:
setfacl -R -m www-user:rwx /home/user1/public_html setfacl -R -d -m www-user:rwx /home/user1/public_html setfacl -R -m user1:rwx /home/user1/public_html setfacl -R -d -m user1:rwx /home/user1/public_html
-d标志会导致新文件inheritance您在目录中设置的ACL。
有一些注意事项要记住。
这可以明智地解决问题,并允许各种scheme的组合:
这是解决这类问题的首选方法。 这是一个简单的,不中断的,微不足道的变化。
Apache不需要到处写,为此你可以指定tmp,upload等。 文件夹。 因此,您可以将public_dir的权限设置为apache用户可以读取和执行的权限:
sudo chown user1:www-data /home/user1/public_html sudo chmod 0750 /home/user1/public_html
public_html目录下的所有其他文件可以在user1权限下,只能被“其他”(apache在这里)读取。 从安全angular度来看,这也更好。 正如我写的,只有必要的文件/文件夹应该由apache用户写入。
最简单的解决scheme是确保www-data可以将所有目录导航到/ home / user1 / public_html目录,并使用来自public_html和down的755目录权限。 public_html目录中的文件需要是世界(其他)可读的。 这些命令应该启用访问:
sudo chmod o+x /home sudo chmod 0+x /home/user1 find /home/user1/public_html -type d ! -perm -005 -print0 | xargs -0 sudo chmod o+rx find /home/user1/public_html -type f ! -perm -004 -print0 | xargs -0 sudo chmod o+r
第一个命令可能不是必需的。 有些系统严格限制对主目录的访问,第二条命令解决了这个问题。 它确实允许在主目录中打开文件,但是不允许列出目录。
最后三个命令可以被sudo删除的用户运行。
如果你这样做:
sudo chown -R www-data:user1 /home/user1/public_html/
您赋予了用户www-data和组user1的所有权。
附:
sudo chmod g+s /home/user1/public_html/
你在这个文件夹上设置执行的组ID,我从来没有见过这样做,我不知道为什么会这样做…它通常用于二进制文件。 你正在搞这件事。 除非你find一个合理的理由,否则:
sudo chmod gs /home/user1/public_html/
并设置user1(属于组user1)和www-data的读写权限。
sudo chmod -R 770 /home/user1/public_html
现在,您可以通过www-data和user1组中的所有用户(我假设只有user1是其中的一部分)对每个文件进行写入和读取。
这是很脏的,因为你可能想要一些文件只能由用户写入。 作为一名开发人员,在服务器上“上传”文件并不是很less,而不是仅仅编辑文件,通过将文件外包到一个安全的程序sftp / scp,解决了正确的pipe理问题。 你甚至可以尝试使用SCM。
你最有可能在问题中的命令错误的user1和万维网数据。
你不想给apache默认的写权限 – 并且让apache用户成为主人。
尝试这个:
sudo chown -R user1:www-data /home/user1/public_html/ sudo find /home/user1/public_html/ -type d -exec chmod 0755 {} \; -or -type f -exec chmod 0644 {} \;
这将使你的所有者,并使用相同的组作为apache,然后将权限重置为755的文件夹和644的文件。 7 5 5和6 4 4权限是适用于apache的权限 – 只允许apache写入权限到它绝对需要写入的文件夹。