授予其他用户文件的组权限

授予其他用户文件的组权限

我正在使用 Debian 7 并创建了一个新用户(网站),其 htdocs 目录如下:

$ sudo adduser website
$ sudo mkdir -p /home/website/htdocs
$ sudo chown -R website /home/website

现在我希望另一个组(开发人员)的用户能够访问该用户的目录。我努力了:

$ sudo chown -R :developers /home/website

我可以看到该组已分配(使用ls -lastat)并且用户位于该组中,但他们没有访问权限?

drwxr-xr-x     3     website     developers     4096 May 3 09:09     website

我也想:

  • 允许另一组“承包商”访问网站文件

  • 限制网站用户仅访问其主目录

  • 确保新的网站文件继承这些权限

您是否必须使用访问控制列表 - 或者是否有更好的方法来执行此操作(例如不对每个站点使用单独的用户)?

答案1

在不了解操作系统或分布的情况下很难给出精确的命令;是的! ACL 可以工作,但也有一个标准方法。

adduseruseradd,您的发行版上的其中之一可能会自动创建用户的主目录。如果是这样,那么目录的内容/etc/skel/将被复制到用户的主目录中,设置权限,并且可能会执行一些其他适当的操作。

可能存在预先定义的共享组,例如“工作人员”;但是,如果我们想创建自己的群组进行共享,那也没有什么问题。因此,创建一个新组或使用现有组。确保已使用 、 或根据操作系统定义了要成为该组成员usermodmoduser用户vigr。当前登录的每个用户都必须注销并重新登录才能成为新组的成员。

创建一个对所有用户通用的目录,例如/home/share_directory/或任何其他对您的情况最有意义的目录。相关的最佳实践是不使用目录之内任何用户的主目录。如果除了所有者和组之外没有人能够看到该目录中的文件,则将该目录的权限更改为0770。如果“其他”可以读取,则使用0775。该目录的所有者几乎肯定是root。

chown root:group_name /home/share_directory/

接下来,更改 setuid 位。

chmod +s /home/share_directory/

如果没有用户应该能够修改另一个用户的文件,那么还要设置粘位。

chmod +t /home/share_directory/

这些示例使用以下命令同时设置 setuid 和粘性位八进制表示法

chmod 5775 /home/share_directory/

或者

chmod 5770 /home/share_directory/

对于更新的问题,ACL 似乎是正确的工具。现在大多数 Linux 发行版都acl在选项中包含了该选项defaults。如果您的发行版默认不包含该acl选项,那么需要做一些工作才能开始使用它。首先使用acl/etc/fstab 中的选项挂载文件系统。

sudo vim /etc/fstab
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx / ext4 defaults,acl 0 1

如果需要,重新挂载文件系统:sudo mount -o remount,acl /。然后为此目的创建一个用户可能所属的组。您可能还需要安装 ACL 工具:apt-get install acl

sudo groupadd developers
sudo usermod -a -G developers $username

(或者该组可能是“承包商”。)当前登录的用户必须注销并再次登录才能成为新组的成员。当然,如果您想保留 /var/www 目录中的内容,请不要执行此操作,但这只是为了说明将其设置为启动:

sudo rm -rf /var/www
sudo mkdir -p /var/www/public
sudo chown -R root:developers /var/www/public
sudo chmod 0775 /var/www/public
sudo chmod g+s /var/www/public
sudo setfacl -d -m u::rwx,g::rwx,o::r-x /var/www/public
sudo setfacl -m u::rwx,g::rwx,o::r-x /var/www/public
sudo setfacl -d -m u::rwx,g:contractors:rwx,o::r-x /var/www/public
sudo setfacl -m u::rwx,g:contractors:rwx,o::r-x /var/www/public

上面的命令之间的区别setfacl如下:第一个实例使用默认组(目录的组所有者),而第二个实例显式指定组。该开关为目录中的所有新文件系统对象-d建立默认掩码 ( )。-m然而,我们还需要再次运行该命令,而不需要-d将 ACL 应用于目录本身。然后在配置文件中将对“/var/www”的引用替换为“/var/www/public”并重新加载。

sudo vim /etc/apache2/sites-enabled/000-default
sudo /etc/init.d/apache2 reload

如果我们想限制除创建文件的用户之外的所有用户的删除和重命名:sudo chmod +t /var/www/public.这样,如果我们想为 Apache 文档根目录之外的框架创建目录,或者创建服务器可写目录,这仍然很容易。

Apache 可写日志目录:

sudo mkdir /var/www/logs
sudo chgrp www-data /var/www/logs
sudo chmod 0770 /var/www/logs

Apache可读的库目录:

sudo mkdir /var/www/lib
sudo chgrp www-data /var/www/logs
sudo chmod 0750 /var/www/logs

在无关紧要的目录中进行一点“播放”应该有助于使其适合您的情况。

在限制方面,我使用两种不同的方法:shellrssh旨在提供 SCP/SFTP 访问,但不提供 SSH 访问;或者,要限制对主目录的使用,您可以使用内部 sftp 子系统,在/etc/ssh/sshd_config.

Subsystem sftp internal-sftp

Match group sftponly
  ChrootDirectory /home/%u
  X11Forwarding no
  AllowTcpForwarding no
  ForceCommand internal-sftp

创建一个名为 sftponly 的组。使用户成为 sftponly 组的成员。/由于 chroot,将其主目录更改为。目录 /home/username 应归 root 所有。您还可以将用户的 shell 设置为 /bin/false 以阻止 SSH 访问。我主要关心交互式访问,因此通常遵循该rssh路径。 (除了我定义的写入能力之外,他们不能在任何地方写入。)

相关内容