Linux用户权限分级隔离配置:从零实现安全隔离

Linux用户权限分级隔离配置:从零实现安全隔离

多人共用一台Linux服务器时,如果所有用户权限相同,很容易误删他人文件或泄露敏感数据。
通过 Linux用户权限分级隔离配置,你可以将用户划分到不同组,并为每个组或每个用户设置独立的文件访问权限。
本文面向零基础用户,从创建用户开始,一步步带你完成配置,并给出常见坑和验证方法。

准备工作:检查环境并获取root权限

开始之前,你需要一台Linux服务器(如Ubuntu 20.04或CentOS 7+),并且拥有 root权限 或一个可以使用 sudo 的用户。
如果你是用普通用户登录,执行下面命令时记得加 sudo

# 查看当前用户
whoami

# 检查能否使用sudo
sudo -v

如果能成功执行且不报错,就可以继续了。

第一步:按角色创建用户和组

假设你的服务器上有三个角色:开发者(dev)、运维(ops)和访客(guest)。
每个角色的访问需求不同,我们需要为每个角色创建一个 用户组,再把用户加入对应组。

# 创建三个组
sudo groupadd developers
sudo groupadd operators
sudo groupadd guests

# 创建用户并设置主组(也可以附加组)
sudo useradd -m -g developers dev01
sudo useradd -m -g operators ops01
sudo useradd -m -g guests guest01

# 为每个用户设置密码
sudo passwd dev01
sudo passwd ops01
sudo passwd guest01
注意:-m 会自动创建用户家目录,-g 指定主组。如果需要加入多个组,用 -G

第二步:分配目录权限实现隔离

核心思路是:每个用户只能读写自己的家目录和公共资源目录,不能随意查看其他用户的文件。
我们用 chownchmod 来操作。

1. 设置每个用户家目录权限

# 确保家目录仅属主可读写执行,其他人无权限
sudo chmod 700 /home/dev01
sudo chmod 700 /home/ops01
sudo chmod 700 /home/guest01

这样,即使其他用户知道路径也进不去。

2. 创建共享目录并按组授权

假设开发者需要共享代码仓库,运维需要共享日志目录,访客只能下载公开文件。

# 创建共享目录
sudo mkdir /srv/code
sudo mkdir /srv/logs
sudo mkdir /srv/public

# 修改所属组
sudo chown root:developers /srv/code
sudo chown root:operators /srv/logs
sudo chown root:guests /srv/public

# 设置权限:组内可读写,其他人无法访问
sudo chmod 770 /srv/code
sudo chmod 770 /srv/logs
sudo chmod 755 /srv/public   # 访客目录可以让所有人读,但只有组内可写

验证一下:dev01 用户可以进入 /srv/code 并创建文件,但 ops01 无法进入 `
/srv/code`(因为组不同)。

第三步:用umask控制新建文件的默认权限

即使目录权限正确,用户新建的文件可能默认带有过宽的权限(比如其他用户可读)。
通过设置 umask 可以控制。

# 查看当前umask值
umask

通常默认是 0022,表示新建文件权限为644(rw-r--r--),目录755(rwxr-xr-x)。
为了实现隔离,建议设置为 0077,新建的文件只有属主可读写。

修改所有用户的umask(全局生效):编辑 /etc/profile/etc/bash.bashrc,在文件末尾添加:

umask 0077

然后让用户重新登录生效。
也可以单独为某个用户设置在家目录的 .bashrc 中:

echo "umask 0077" >> /home/dev01/.bashrc
注意:umask值过高可能会影响服务端脚本的文件写入权限,请根据实际需要调整。

第四步:用sudo精确限制提权操作

分级隔离不只是文件权限,还要限制用户能否执行特权命令。
通过编辑 /etc/sudoers 文件(建议用 visudo 命令),可以精确控制。

# 允许developers组的所有成员执行任何命令(即完全sudo权限,通常不推荐)
%developers ALL=(ALL) ALL

# 允许operators组的成员只执行重启服务命令
%operators ALL=(ALL) /usr/bin/systemctl restart nginx, /usr/bin/systemctl restart mysql

# 不允许guests组使用sudo
# 不添加即可

保存退出后,用 ops01 用户测试:

sudo systemctl restart nginx   # 可以执行
sudo systemctl restart sshd    # 报错!未授权

就这样实现了 sudo权限分级

避坑指南

  • 不要给用户组过大的权限:例如将普通用户加入sudo组,会打破隔离。
  • 注意粘滞位:共享目录(如 /tmp)默认有粘滞位(chmod +t),防止用户删除不属于自己的文件。你自己的共享目录也建议加上:sudo chmod +t /srv/code
  • ACL高级权限:如果多组成员需要同时读写一个目录,使用ACL更精细。允许 developers 组成员读,operators 组成员写:sudo setfacl -m g:developers:rx /srv/public && sudo setfacl -m g:operators:rwx /srv/public
  • 修改文件后记得刷新:对新创建的目录或文件,组关系可能来不及生效,用 newgrp 命令切换组再测试。

验证你的隔离效果

切换不同用户进行测试:

# 切换用户
dev01 用户
su - dev01

# 尝试进入其他用户家目录
ls /home/ops01    # 权限拒绝

# 尝试在无权目录写文件
touch /srv/logs/test.txt   # 权限拒绝

# 检查新建文件的权限
touch ~/test.txt
ls -l ~/test.txt   # 应为 -rw------- (600)

按照上述步骤,你应该能成功实现 Linux用户权限分级隔离配置
如果你在过程中遇到“Permission denied”但权限似乎正确,请检查父目录的权限是否阻挡,比如 /home 目录通常权限为755,如果误改成700会导致其他用户无法进入。
多用户环境建议保持 /home 为755。

总结

通过用户分组、目录权限收紧、umask默认限制和sudo精细授权,你可以构建一个清晰的权限隔离体系。
这套方法适用于开发测试环境、团队项目或任何需要多用户安全共存的场景。
如果服务器需要对外提供Web服务,还可以结合 chroot 或容器进一步强化隔离,相关内容我们在其他文章中讨论。

分享到:
上一篇
Linux日志轮转防止磁盘占满:Linux日志轮转配置详解
下一篇
Linux静态IP跨境服务器设置
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意