现在我们的一台服务器已设置为所有用户都在自己的组中。是否可以将它们重新分配到单个组,然后允许每个用户对其他用户的目录进行只读访问?
有什么快速命令可以为许多用户执行此操作吗?
答案1
简短的回答:不要这样做。
长答案:这曾经是 Unix 机器的默认设置。但这会导致无意的数据共享,如果权限出现问题,甚至可能被其他用户修改数据。随着时间的推移,大多数 Unix/Linux 安装都迁移到每个用户都有一个组的设置。最初,当一个用户属于多个组(Unix 中的主组和补充组)时,为了获得另一个组的权限,必须将要切换到的组和要运行的程序交给一个特殊程序(我忘记了名字,已经很久了......)。在当今的系统中,每个进程同时属于所有组,因此不再需要这样做。只需将所有用户放入共享文件所属的组中即可。处理 ACL 的文件系统上还提供了更细化的权限,您可以在其中分配单个用户对文件的权限,而与用户/组/其他人无关。查看 acl(5)、chacl(1) 的手册页。
答案2
我真的想说“不要”,因为这不是最好的主意。然而,这并不能回答你的问题,所以让我们这样做吧。以下是我在下面构建的脚本中的一些假设:
- 您创建了一个名为 users 的组
- 您要添加到该组的所有用户的 uid 都在 500 到 10000 之间
- 只有您要添加到该组的用户的 uid 介于 500 到 10000 之间
- 在运行 shellscript 之前,您将了解它的作用,或者要求澄清。
首先我们修复 /home 中文件夹的所有权:
chgrp users -r /home
首先让我们获取所有 uid 为 500 或更高的用户:
getent passwd | awk -F: '{if($3 > 500 && $3 < 10000) { print $1 }}'
在我的系统上返回:
dennis
paul
tom
现在我们需要更改组:
for user in $(getent passwd | awk -F: '{if($3 > 500 && $3 < 10000) { print $1 }}'); do
usermod -g users $user
done
现在您可以删除不再需要的组:
for user in $(getent passwd | awk -F: '{if($3 > 500 && $3 < 10000) { print $1 }}'); do
groupdel $user
done