我确信这是一个简单的问题,但我似乎找不到任何无法让它发挥作用的原因。
我正在尝试在 PHP 服务器的 Web 根目录中设置组文件夹。每个部门都应该有一个这样的组:
/srv/www/htdocs/dev/dept1
/srv/www/htdocs/dev/dept2
组 dept1 中的所有用户都应该对 dept1 文件夹具有读/写访问权限,dept2 中的所有用户都应该对 dept2 文件夹具有读/写访问权限,等等。为了实现这一点,我创建了一个如下组:
sudo groupadd dept1
sudo useradd -G dept1 -m user1
cd /srv/www/htdocs/dev
mkdir dept1
sudo chown -R wwwrun:dept1 dept1
sudo chmod -R g+rwxs dept1
wwwrun
是运行 Apache 的用户。其目的是让用户能够在其部门文件夹中创建/读取/更新/删除他们想要的任何内容。但是,尝试后发现,用户帐户可以查看文件夹的内容并读取文件,但不能创建或写入文件。
我究竟做错了什么?
答案1
凭借您授予的权限,dept1
组中的用户可以创建和删除 中的文件/srv/www/htdocs/dev/dept1
。但是在典型配置下,他们创建的文件和子目录将不是组可写的。
你可以通过更改每个人的权限来安排大多数文件为组可写umask设置。umask 设置决定了哪些权限不是赋予新文件。通常将其设置为 022,这意味着除非明确指定,否则文件将不能被组写入或被其他人写入。您可以将其更改为 002,以便默认情况下文件可以被组写入。但是,这只有在每个用户都有自己的私有组时才是合理的(否则,人们的文件将由其主要组中的每个人写入)。
更好的解决方案是确保访问控制列表在所在的文件系统上启用/srv/www/htdocs/dev
(确保第四列中的fstab
条目包含)。然后创建一个 ACL,授予组对该目录的写权限,并使该权限授予目录中新创建的条目继承。这类似于 umask 更改,但它与文件系统中的这个特定位置相关联。运行以下两个命令后,所有典型用例中的权限都将正确。acl
srv/www/htdocs/dev/dept1
dept1
setfacl -R -m group:dept1:rwx /srv/www/htdocs/dev/dept1
setfacl -R -d -m group:dept1:rwx /srv/www/htdocs/dev/dept1
答案2
您的用户如何访问文件?他们如何尝试更新/创建文件?我假设他们正在登录服务器,让他们运行“groups”命令以确保他们确实在正确的组中,并且应该首先列出。