Linux多用户权限隔离配置实操教程:从零开始隔离用户目录
Linux多用户权限隔离配置实操教程:从零开始隔离用户目录
当多个人共用一台 Linux 服务器时,最怕的就是用户之间互相窜改文件,甚至误删别人的数据。Linux多用户权限隔离配置 就是解决这个问题的关键操作——通过用户组、目录权限和所有权设置,让每个用户只能操作自己的文件,互不干扰。
本文用最简单的步骤,带你一步步完成隔离,哪怕你是第一次接触 Linux 也能照着做。
为什么需要多用户权限隔离?
举个例子:你和同事共享一台服务器,各自存放项目代码。
如果没有权限隔离,A 可以随意删除 B 的目录,B 也可以读取 A 的私密配置。权限隔离 的本质就是基于 Linux 的 ugo(用户、组、其他人)权限模型,为每个用户分配独立的工作目录,并限制其他用户的访问。
准备工作:检查当前用户和系统环境
打开终端(或者通过 SSH 登录服务器),先确认当前登录的用户。
执行:
whoami
确保你使用的是 root 用户 或拥有 sudo 权限的用户,否则后续创建用户和修改目录权限会失败。
接着查看系统版本(可选):
cat /etc/os-release | head -3
本文示例基于 CentOS 7/8 和 Ubuntu 20.04/22.04,命令通用。
第一步:创建用户组和普通用户
我们要把需要隔离的用户放到同一个组里吗?
不一定。
更常见的做法是 每个用户单独一个专用组,这样目录权限更容易控制。
这里演示创建两个用户:dev1 和 dev2。
# 创建用户 dev1,同时创建同名组 dev1
useradd -m dev1
# 设置密码
passwd dev1
# 创建用户 dev2
useradd -m dev2
passwd dev2
-m 参数会自动创建用户的家目录(/home/dev1 和 /home/dev2)。
现在用户已经存在,但默认权限可能允许其他用户读取自己的家目录,需要进一步隔离。
第二步:设置目录权限和所有权
查看家目录的默认权限:
ls -ld /home/dev1
输出类似 drwx------ 表示只有 owner(dev1)有权限,其他人无任何权限。
这已经是隔离状态了。
但有时服务器上的 /home 目录权限可能过于宽松,或者你需要单独为某个共享目录做隔离。
这里再演示一个 共享项目目录 的隔离场景:创建一个 /data/share 目录,要求 dev1 和 dev2 都能读写,但互不可删对方的文件。
mkdir /data/share
# 创建用户组 devteam
groupadd devteam
# 将两个用户加入组
gpasswd -a dev1 devteam
gpasswd -a dev2 devteam
# 设置目录组为 devteam
chgrp devteam /data/share
# 设置权限:所有者与组读写执行,其他人无权限;并设置粘滞位
chmod 2770 /data/share
粘滞位(权限中的 2 即 chmod 的 2000 位)的作用是:即使目录对组可写,用户也只能删除自己的文件,无法删除别人的。
第三步:测试用户权限隔离
先测试家目录隔离。
用 dev1 登录:
su - dev1
ls /home/dev2
应该提示 Permission denied。
再往 /home/dev2 里写文件也会被拒绝。
测试共享目录粘滞位:
# 以 dev1 身份在 /data/share 创建文件
touch /data/share/test1_dev1
# 切换为 dev2
su - dev2
touch /data/share/test2_dev2
# 尝试删除 dev1 的文件
rm /data/share/test1_dev1
如果粘滞位生效,会提示 Operation not permitted,并且文件保留。
常见问题与避坑
- Q:为什么改了权限后其他用户依然能访问?
A:检查目录的上级目录权限。
比如 /data 如果对其他人有 x 权限,就能遍历到 /data/share。
建议 /data 权限设为 755 或 750,只允许 root 和组访问。
- Q:粘滞位不生效?
A:确认目录权限是 2770 或 1777(末尾是 7)。
用 chmod 1777 /data/share 也可以,但组写权限要保证。
- Q:创建用户后无法 SSH 登录?
A:检查 /etc/ssh/sshd_config 中是否禁止了密码认证,或者用户家目录权限不对(不能是 777)。
- 避坑重点:
- 不要在
/home目录上直接设置粘滞位,系统默认家目录权限是700,不需要额外操作。 - 修改用户所属组后,用户需要重新登录才能生效组权限。
- 生产环境中,建议用
ACL或getfacl/setfacl实现更精细的权限控制,但本文的基础方法已满足多数场景。
验证隔离效果:一条命令确认
最后,用 root 身份执行以下命令,快速检查每个用户家目录的权限:
ls -la /home/
理想状态是每个目录权限显示为 drwx------ 或 drwxr-x---(如果希望同组可读)。
对于共享目录 /data/share,检查是否包含粘滞位标志(权限末尾有 t):
ls -ld /data/share
# 输出示例:drwxrws---... 或 drwxrwx--T
如果你按照上述步骤完成了配置,Linux多用户权限隔离 就已经生效了。
建议把这个配置流程记录下来,以后新增用户时直接复用。
遇到异常时,优先回看避坑部分,多数问题都能解决。
---
*本文适用于 CentOS 7/8、Ubuntu 20.04/22.04,命令兼容主流发行版。如果使用其他发行版,注意 useradd、groupadd、gpasswd 的语法差异。*