Linux 文件权限深度解析与实战指南
前言
在 Linux 系统中,文件权限是系统安全的基础,也是每个 Linux 使用者必须掌握的核心概念。本文将深入探讨 Linux 权限机制,从基础概念到高级应用,带你全面理解并熟练运用文件权限管理。
一、Linux 权限基础概念
1.1 用户和用户组
# 查看当前用户
whoami
id
# 查看系统用户
cat /etc/passwd
# 查看用户组
cat /etc/group
# 查看当前登录用户
users
w
1.2 文件权限的三种类型
- 读权限 ( r ):读取文件内容或列出目录内容
- 写权限 ( w ):修改文件内容或在目录中创建/删除文件
- 执行权限 ( x ):执行文件或进入目录
二、深入理解权限表示法
2.1 字符表示法详解
-rwxr-xr--
↑│└─┴─┴─┴─┴─┴─┴─┴─ 权限字符串
│
文件类型 (- 普通文件, d 目录, l 链接等)
权限字符串分为三组:
- 前3位:所有者权限
- 中3位:所属组权限
- 后3位:其他用户权限
2.2 数字表示法原理
rwx r-x r--
421 401 400
7 5 4
计算方式:
r = 4, w = 2, x = 1
rwx = 4+2+1 = 7
r-x = 4+0+1 = 5
r-- = 4+0+0 = 4
三、权限管理命令深度解析
3.1 chmod 命令全面掌握
数字模式修改权限
# 基础权限设置
chmod 755 script.sh # rwxr-xr-x
chmod 644 config.conf # rw-r--r--
chmod 600 private.key # rw-------
# 递归修改目录权限
chmod -R 755 /var/www/html
chmod -R u=rwX,g=rX,o=rX directory/ # 智能设置执行权限
符号模式精细控制
# 添加权限
chmod u+x script.sh # 给所有者添加执行权限
chmod g+w file.txt # 给组添加写权限
chmod o+r public.txt # 给其他用户添加读权限
chmod a+x command # 给所有用户添加执行权限
# 移除权限
chmod u-w sensitive.txt # 移除所有者写权限
chmod g-r secret.doc # 移除组读权限
chmod o-rwx private.txt # 移除其他用户所有权限
# 设置精确权限
chmod u=rwx,g=rx,o= script.sh # 设置精确权限,其他用户无权限
3.2 chown 命令高级用法
# 更改文件所有者
chown username file.txt
chown :groupname file.txt
chown username:groupname file.txt
# 递归更改目录所有权
chown -R www-data:www-data /var/www
chown -R user: . # 更改当前目录所有权
# 保持符号链接不变
chown -h username symlink # 更改符号链接本身的所有权
3.3 chgrp 命令专门用途
# 更改文件所属组
chgrp developers project/
chgrp -R admins /shared/
四、特殊权限详解
4.1 SetUID (Set User ID)
# 设置 SetUID 权限
chmod u+s /usr/bin/passwd
chmod 4755 /usr/bin/special_command
# 查看 SetUID 文件
find / -type f -perm /4000 2>/dev/null
作用:用户执行文件时,以文件所有者的身份运行
4.2 SetGID (Set Group ID)
# 设置 SetGID 权限
chmod g+s /shared/directory
chmod 2755 /usr/bin/group_command
# 对目录的作用:新建文件自动继承目录的组
作用:
- 对文件:以文件所属组的身份运行
- 对目录:新建文件自动继承目录的组
4.3 Sticky Bit
# 设置 Sticky Bit
chmod +t /tmp
chmod 1777 /shared/writable
# 查看设置了 Sticky Bit 的目录
find / -type d -perm /1000 2>/dev/null
作用:只有文件所有者才能删除/重命名自己的文件
五、默认权限与 umask
5.1 umask 工作原理
# 查看当前 umask
umask
umask -S
# 设置 umask
umask 0022 # 目录权限: 755, 文件权限: 644
umask 0002 # 目录权限: 775, 文件权限: 664
计算方式:
- 目录默认权限:777 - umask
- 文件默认权限:666 - umask
5.2 umask 配置文件
# 用户级别配置
vim ~/.bashrc
# 添加: umask 0022
# 系统级别配置
sudo vim /etc/profile
# 添加: umask 0022
六、ACL 高级权限控制
6.1 ACL 基础命令
# 检查文件系统是否支持 ACL
mount | grep acl
tune2fs -l /dev/sda1 | grep acl
# 安装 ACL 工具
sudo apt install acl # Ubuntu/Debian
sudo yum install acl # CentOS/RHEL
6.2 setfacl 设置 ACL
# 为用户设置权限
setfacl -m u:username:rwx file.txt
setfacl -m g:groupname:rx directory/
# 为多个用户设置权限
setfacl -m u:user1:rw,u:user2:r file.txt
# 递归设置 ACL
setfacl -R -m u:username:rwx project/
# 删除特定 ACL 条目
setfacl -x u:username file.txt
# 删除所有 ACL 权限
setfacl -b file.txt
6.3 getfacl 查看 ACL
# 查看文件 ACL
getfacl file.txt
# 查看目录 ACL
getfacl directory/
# 保存和恢复 ACL
getfacl -R /path > acl_backup.txt
setfacl --restore=acl_backup.txt
七、实战案例解析
7.1 Web 服务器目录权限配置
# 创建 web 目录结构
sudo mkdir -p /var/www/example.com/{public,logs,backup}
sudo chown -R www-data:www-data /var/www/example.com
sudo chmod -R 755 /var/www/example.com
sudo chmod 644 /var/www/example.com/public/*.html
# 设置上传目录权限
sudo mkdir /var/www/example.com/public/uploads
sudo chown www-data:www-data /var/www/example.com/public/uploads
sudo chmod 775 /var/www/example.com/public/uploads
# 设置日志目录权限
sudo chmod 755 /var/www/example.com/logs
sudo touch /var/www/example.com/logs/access.log
sudo chown www-data:adm /var/www/example.com/logs/access.log
sudo chmod 664 /var/www/example.com/logs/access.log
7.2 多用户协作目录配置
# 创建共享目录
sudo mkdir /shared
sudo groupadd developers
sudo usermod -aG developers user1
sudo usermod -aG developers user2
# 设置共享目录权限
sudo chown root:developers /shared
sudo chmod 2775 /shared # SetGID + rwxrwxr-x
# 验证配置
ls -ld /shared
# 输出: drwxrwsr-x 2 root developers 4096 Dec 25 10:00 /shared
7.3 安全敏感文件配置
# SSH 密钥权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/config
# 配置文件权限
chmod 600 /etc/shadow
chmod 644 /etc/passwd
八、权限问题排查技巧
8.1 常见权限问题诊断
# 检查文件权限
ls -la problematic_file
# 检查用户和组
id username
groups username
# 检查目录权限路径
namei -l /path/to/file
# 检查 ACL 权限
getfacl file.txt
8.2 权限调试命令
# 跟踪权限检查
strace -e trace=file command 2>&1 | grep EACCES
# 检查可执行文件依赖
ldd /usr/bin/program
# 检查 SELinux 上下文
ls -Z file.txt
ps -Z
九、最佳实践总结
- 最小权限原则:只授予必要的最小权限
- 定期审计:定期检查系统文件权限
- 使用组管理:通过用户组管理权限,而不是直接给用户授权
- 谨慎使用特殊权限:SetUID/SetGID 可能带来安全风险
- 文档化权限策略:记录重要目录的权限配置
结语
掌握 Linux 文件权限是成为合格系统管理员的重要一步。通过本文的深入学习,相信你已经能够游刃有余地处理各种权限管理场景。记住,良好的权限管理不仅是技术问题,更是安全意识和系统思维的体现。
1184

被折叠的 条评论
为什么被折叠?



