目录
1. Linux 用户与用户组深度解析
1.1 用户(User)的精细化管理
Linux 用户不仅是操作主体,更是权限控制的核心单元。用户分为三类:
- 超级用户(root):UID 为 0,拥有无限制权限(慎用)。
- 普通用户:UID ≥ 1000,权限受限,默认只能操作家目录。
- 系统用户:UID 1-999,用于服务进程(如
www-data
),无登录权限。
用户配置文件:
/etc/passwd
存储用户基础信息(不存密码):# 格式:用户名:密码占位符(x):UID:GID:描述:家目录:Shell alice:x:1001:1001:Alice Dev:/home/alice:/bin/bash
/etc/shadow
加密存储密码与策略:alice:$y$j9T$Fg...:19485:0:99999:7::: # 字段含义:密码哈希|最后修改日|最短有效期|最长有效期|警告期|失效期|保留
1.2 用户组(Group)的实战应用
用户组用于批量权限分配,组信息存储在 /etc/group
:
# 格式:组名:组密码占位符:GID:组成员列表
developers:x:1002:alice,bob
组类型:
- 主组(Primary Group):用户创建文件时的默认组。
- 附加组(Supplementary Group):扩展用户权限的辅助组。
管理命令:
# 创建用户并指定主组
sudo useradd -m -g developers charlie
# 添加用户到附加组
sudo usermod -aG docker charlie
# 查看用户所属组
groups charlie # 输出:charlie : developers docker
2. Linux 文件权限的完全指南
2.1 权限模型的三层结构
通过 ls -l
查看权限:
drwxr-xr-x 2 alice developers 4096 Aug 30 10:00 project/
- 类型位:
d
(目录)、-
(文件)、l
(链接) - 用户权限:
rwx
(所有者) - 组权限:
r-x
(所属组) - 其他权限:
r-x
(其他用户)
2.2 数字权限的奥秘
将权限转换为3位八进制数:
r=4
,w=2
,x=1
- 示例:
rwxr-xr--
→754
(7=4+2+1, 5=4+1, 4=4)drwxrwxrwt
→1777
(Sticky Bit + 777)
2.3 权限修改命令详解
chmod
:修改权限
# 数字模式(推荐)
chmod 755 script.sh # rwxr-xr-x
# 符号模式(精细调整)
chmod g+w,o-rx data/ # 组添加写,其他人移除读执行
# 递归修改目录及子文件
chmod -R 750 /var/www/
chown
:修改所有者和组
# 修改文件所有者
sudo chown alice report.txt
# 同时修改所有者和组
sudo chown alice:developers /project/
# 递归修改目录
sudo chown -R bob:developers /team_data/
3. 高级权限控制技术
3.1 特殊权限:SUID、SGID、Sticky Bit
权限 | 符号 | 数字 | 作用场景 |
---|---|---|---|
SUID | s | 4000 | 执行时继承所有者权限(如 /usr/bin/passwd ) |
SGID | s | 2000 | 目录中新文件继承组权限(协作目录) |
Sticky | t | 1000 | 仅所有者可删除文件(如 /tmp ) |
设置方法:
# 设置 SUID
chmod u+s /usr/bin/backup_tool
# 设置 SGID(目录)
chmod g+s /shared_team/
# 设置 Sticky Bit
chmod +t /public_upload/
3.2 ACL(访问控制列表):突破传统权限限制
当标准权限无法满足需求时,使用ACL实现精细控制:
# 安装ACL工具(如果未预装)
sudo apt install acl # Debian/Ubuntu
sudo yum install acl # CentOS/RHEL
# 为用户添加读写执行权限
setfacl -m u:charlie:rwx /project/docs/
# 为组添加读权限
setfacl -m g:interns:r-- /project/docs/
# 设置默认ACL(影响新建文件)
setfacl -d -m g:dev:rwx /shared/
# 查看ACL规则
getfacl /project/docs/
4. 实战场景与解决方案
场景1:团队协作目录配置
需求:
- 目录
/team
允许developers
组读写 - 新建文件自动继承组权限
- 禁止其他人访问
实现:
sudo mkdir /team
sudo chown root:developers /team
sudo chmod 2770 /team # SGID生效
sudo setfacl -d -m g:developers:rwx /team # 默认ACL
场景2:Web服务器安全权限
要求:
- Nginx用户
www-data
可读文件,但禁止写入 - 开发者通过
devgroup
组管理代码
sudo chown -R www-data:devgroup /var/www/html
sudo find /var/www/html -type d -exec chmod 750 {} \;
sudo find /var/www/html -type f -exec chmod 640 {} \;
sudo setfacl -R -m g:devgroup:rwx /var/www/html # 允许开发者修改
场景3:临时文件共享区
需求:
- 所有人可上传文件到
/public
- 仅文件所有者可删除
sudo mkdir /public
sudo chmod 1777 /public # Sticky Bit + 777
5. 安全最佳实践与调试技巧
5.1 安全原则
最小权限原则:
- 避免使用
chmod 777
或chown root:root
无脑操作 - 用组权限替代全局开放
- 避免使用
敏感文件保护:
chmod 600 ~/.ssh/authorized_keys # SSH密钥文件 chmod 700 ~/.ssh # SSH目录
定期审计:
# 查找全局可写文件 find / -xdev -type f -perm -o+w -ls # 查找无主文件 find / -xdev \( -nouser -o -nogroup \) -ls
5.2 权限问题调试流程
检查权限与所有者:
ls -ld /path/to/dir # 查看目录权限 ls -l file.txt # 查看文件权限
验证用户组成员:
groups alice # 显示用户所属组 getent group developers # 查看组内用户
测试权限模拟:
sudo -u testuser ls /restricted_dir # 模拟用户访问
检查ACL规则:
getfacl /path/to/resource
6. 扩展知识:umask 与默认权限
6.1 umask 的作用
umask
决定新建文件和目录的默认权限:
- 文件默认权限:
666 - umask
- 目录默认权限:
777 - umask
示例:
umask 0022 # 默认值
# 文件权限:666 - 022 = 644(rw-r--r--)
# 目录权限:777 - 022 = 755(rwxr-xr-x)
umask 0002 # 宽松模式
# 文件:664(rw-rw-r--)
# 目录:775(rwxrwxr-x)
6.2 修改 umask
- 临时生效:
umask 0007 # 仅当前会话有效
- 永久生效:
将umask 0022
添加到~/.bashrc
或/etc/profile
。
附录:命令速查表
命令 | 用途 | 示例 |
---|---|---|
chmod |
修改权限 | chmod 755 file |
chown |
修改所有者和组 | chown user:group dir |
setfacl |
设置ACL规则 | setfacl -m u:user:rwx file |
getfacl |
查看ACL规则 | getfacl /path |
usermod |
修改用户属性(如附加组) | usermod -aG docker user |
groups |
显示用户所属组 | groups alice |
find + chmod/chown |
批量修改权限 | find . -type f -exec chmod 644 {} \; |