Linux用户组管理权限隔离:Linux用户组权限隔离实战
为什么需要用户组权限隔离
当一台Linux服务器上有多个用户(比如开发人员、运维、测试),你肯定不希望他们互相乱翻文件。用户组权限隔离是最直接的解决方案:把相同职能的用户放进一个组,然后给这个组分配特定目录的读写权限,其他人无权限。
这样既不用给每个人单独设置,又能保证数据安全。
动手前先确认两件事
- 你有root或sudo权限。大部分组管理命令需要sudo执行。
- 已规划好用户和组的对应关系。例如:项目A的成员放在
group-a组,项目B的成员放在group-b组。
实操:创建用户组并分配权限
假设要创建一个名为webdev的组,把用户alice和bob加进去,然后让/var/www/project目录只允许webdev组成员读写。
1. 创建用户组
sudo groupadd webdev
如果要同时设置组ID(GID),可以用-g参数。
2. 将用户添加到组
sudo usermod -aG webdev alice
sudo usermod -aG webdev bob
注意-aG:-a表示追加,-G指定附加组。如果漏了-a,会移除用户的其他辅助组。
3. 设置目录的组所有权和权限
sudo chown -R :webdev /var/www/project
sudo chmod -R 770 /var/www/project
chown -R :webdev把目录的所属组改为webdev;chmod 770给所有者(root)和组(webdev)读写执行权限,其他人无权限。
4. 启用SGID位(推荐)
SGID可以让用户在目录内新建的文件自动继承目录的组,避免新文件变成用户的私有组。
sudo chmod -R g+s /var/www/project
验证:ls -ld /var/www/project,权限会显示rwxrws---(注意组权限位的s)。
常见坑:权限不生效的排查方向
- 用户未重新登录:
usermod后用户需要退出重登才会生效。可以用groups alice查看当前组,如果没出现webdev,重登即可。 - umask影响:新建文件的权限受umask限制。默认umask 022会去除组写权限。可以在
~/.bashrc里加umask 002让组保留写权限(仅限该用户)。 - 主组vs附加组混淆:
usermod -g会改主组,慎用。文章用的-aG是添加附加组,不影响用户主组与家目录权限。 - SGID未设置:如果用户新建文件组仍是其私有组,检查
g+s位是否生效。
验证结果并巩固设置
- 用
alice登录,尝试在/var/www/project下创建文件。
su - alice
cd /var/www/project
touch test.txt
ls -l test.txt
如果组是webdev,权限包含组写,说明隔离生效。
- 用另一个非
webdev组的用户(比如testuser)尝试访问该目录,应提示权限拒绝。
sudo useradd testuser
sudo passwd testuser
su - testuser
cd /var/www/project # 应报 Permission denied
至此你就完成了完整的Linux用户组管理权限隔离配置。
以后新增成员只需继续用usermod -aG添加即可,无需反复改目录权限。
建议定期用ls -l检查关键目录的组和SGID位是否被错误修改。