1. 基础权限系统
文件/目录权限结构
-rwxrwxrwx
↑ ↑ ↑
| | └── 其他用户权限
| └── 所属组权限
└── 所有者权限
权限表示
2. 常用命令
查看权限
ls-l# 查看详细信息
ls-la# 查看所有文件(包括隐藏文件)
stat filename # 查看详细权限信息
修改权限 chmod
# 数字模式
chmod755 file.txt # rwxr-xr-x
chmod644 file.txt # rw-r--r--
chmod600 file.txt # rw-------
# 符号模式
chmod u+x file.txt # 给所有者添加执行权限
chmod g-w file.txt # 从所属组移除写权限
chmodo=r file.txt # 其他用户只读
chmod a+x file.txt # 给所有用户添加执行权限
chmodu=rwx,g=rx,o= file.txt # 分别设置
修改所有者 chown
chown user file.txt # 修改所有者
chown user:group file.txt # 同时修改所有者和组
chown :group file.txt # 只修改组
chown-R user:group directory/ # 递归修改目录
修改所属组 chgrp
chgrp group file.txt
chgrp -R group directory/
3. 特殊权限
SetUID (4)
SetGID (2)
Sticky Bit (1)
4. 权限掩码 umask
查看和设置
umask # 查看当前umask
umask 022# 设置umask
umask -S# 符号形式显示
计算方法
5. ACL(访问控制列表)
高级权限控制
# 安装ACL工具(如果需要)
sudo apt install acl # Ubuntu/Debian
sudo yum install acl # RHEL/CentOS
# 查看ACL
getfacl file.txt
# 设置ACL
setfacl -m u:username:rwx file.txt # 给用户添加权限
setfacl -m g:groupname:rx file.txt # 给组添加权限
setfacl -x u:username file.txt # 删除用户ACL条目
setfacl -b file.txt # 删除所有ACL条目
# 递归设置目录
setfacl -R-m u:username:rwx dir/
# 默认ACL(影响新创建的文件)
setfacl -d-m u:username:rwx dir/
6. 实用示例
常见权限配置
# 网页文件
chmod755 /var/www/html/ # 目录
chmod644 /var/www/html/*.html # 网页文件
# 用户家目录
chmod700 /home/username # 私有目录
chmod755 /home/public # 公开目录
# 脚本文件
chmod+x script.sh # 添加执行权限
# 配置文件
chmod600 ~/.ssh/id_rsa # 私钥文件
chmod644 ~/.ssh/id_rsa.pub # 公钥文件
chmod700 ~/.ssh # SSH目录
权限检查脚本示例
#!/bin/bash
# 检查特定目录权限
echo"Checking permissions for /etc/passwd:"
ls-l /etc/passwd
echo-e"\nChecking home directory permissions:"
find /home -maxdepth1-type d -execls-ld {} \;
echo-e"\nChecking SUID files:"
find / -perm-4000-type f 2>/dev/null | head -10
7. 安全最佳实践
最小权限原则:只授予必要权限
定期审计:检查权限设置
使用组管理:通过组分配权限而非个人用户
重要文件保护
chattr +i important_file # 不可修改
chattr +a log_file # 只追加
监控权限变更:使用auditd等工具
8. 权限故障排查
# 为什么无法访问?
ls-la file.txt # 检查权限
id # 检查用户和组
groups username # 查看用户所属组
getfacl file.txt # 检查ACL
lsattr file.txt # 检查特殊属性