第326集Linux权限管理架构实战:文件权限、ACL高级控制与企业级权限管控
|字数总计:3.9k|阅读时长:16分钟|阅读量:
Linux权限管理架构实战:文件权限、ACL高级控制与企业级权限管控
一、Linux权限管理基础
1.1 文件权限概述
Linux系统中的每个文件和目录都有权限控制,用于管理谁可以访问、修改或执行。
1 2 3 4 5 6 7 8 9 10 11 12 13
| ls -l file.txt
|
1.2 权限类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| Linux权限类型: 读权限 (Read): 符号: r 数值: 4 文件: 可以读取文件内容 目录: 可以列出目录内容 写权限 (Write): 符号: w 数值: 2 文件: 可以修改文件内容 目录: 可以创建/删除目录中的文件 执行权限 (Execute): 符号: x 数值: 1 文件: 可以作为程序执行 目录: 可以进入目录
|
1.3 权限表示方法
符号表示法
数字表示法
二、chmod命令详解
2.1 chmod基本用法
数字表示法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| chmod 755 file.txt
chmod 644 file.txt
chmod 755 directory/
chmod -R 755 directory/
find . -type f -exec chmod 644 {} \; find . -type d -exec chmod 755 {} \;
|
符号表示法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| chmod +x file.sh
chmod -w file.txt
chmod +r file.txt
chmod u+x file.sh
chmod g+w file.txt
chmod o-rwx file.txt
chmod u=rwx,g=rx,o=rx file.sh
chmod u+w,g-w,o+x file.txt
|
2.2 chmod高级用法
目录和文件分别设置权限
1 2 3 4 5 6 7 8 9 10 11 12
| find . -type f -exec chmod 644 {} \;
find . -type d -exec chmod 755 {} \;
find . -type f | xargs chmod 644 find . -type d | xargs chmod 755
find . -type f -exec chmod 644 {} \; -o -type d -exec chmod 755 {} \;
|
参考文件设置权限
1 2 3 4 5
| chmod --reference=reference_file.txt target_file.txt
chmod -R --reference=source_dir/ target_dir/
|
三、chown和chgrp
3.1 chown命令
改变文件所有者
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| chown user file.txt
chown user:group file.txt
chown -R user:group directory/
chown user file.txt
chown :group file.txt
chown --reference=source.txt target.txt
chown user file1.txt file2.txt file3.txt
|
常见用法示例
1 2 3 4 5 6 7 8 9 10 11
| chown www-data:www-data file.txt
chown -R deploy:deploy /var/www/html
chown user directory/
chown -h user link.txt
|
3.2 chgrp命令
改变文件组
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| chgrp group file.txt
chgrp -R group directory/
chgrp group file1.txt file2.txt
chgrp --reference=source.txt target.txt
chgrp -c group file.txt
|
四、特殊权限位
4.1 setuid (SUID)
setuid位允许程序以文件所有者的身份运行,而不是执行者的身份。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| chmod 4755 file.sh
chmod u+s file.sh
ls -l file.sh
chmod -s file.sh
chmod u-s file.sh
ls -l /usr/bin/passwd
|
SUID应用场景
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| SUID应用场景: 系统命令: - /usr/bin/passwd (修改密码需要写/etc/shadow) - /usr/bin/ping (需要访问网络套接字) - /sbin/ping6 - /usr/bin/su 自定义程序: - 需要以其他用户身份运行的程序 - 访问受限资源 安全注意事项: - SUID位存在安全风险 - 必须谨慎使用 - 定期审查SUID程序
|
4.2 setgid (SGID)
setgid位让目录中的新文件继承目录的组,而不是创建者的主组。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| chmod 2755 directory/
chmod g+s directory/
ls -ld directory/
chmod 2755 file.sh
chmod -s file.sh
chmod g-s file.sh
find /usr/bin -perm +2000 -ls
|
SGID目录示例
1 2 3 4 5 6 7 8
| mkdir /shared/project chgrp developers /shared/project chmod 2775 /shared/project
ls -ld /shared/project
|
4.3 sticky bit
sticky bit主要用于目录,允许用户删除自己的文件,但不能删除他人的文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| chmod 1755 /tmp chmod +t /tmp
ls -ld /tmp
ls -ld /tmp ls -ld /var/tmp
chmod -t directory/
|
粘滞位应用场景
1 2 3 4 5 6 7 8 9 10 11 12
| 粘滞位应用场景: 共享目录: - /tmp (临时文件目录) - /var/tmp (系统临时目录) 协作目录: - 团队共享的upload目录 - 可写但只能删除自己文件的目录 限制删除: - 防止用户删除他人文件 - 保持目录内容整洁
|
4.4 特殊权限位组合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
chmod 7755 file.sh
chmod 3755 directory/
chmod 7755 directory/
find /usr/bin -perm -4000 -ls find /usr/bin -perm -2000 -ls find / -perm -1000 -type d -ls
|
五、ACL高级权限控制
5.1 ACL基础
ACL(Access Control List)提供更细粒度的权限控制。
1 2 3 4 5 6 7
| mount | grep acl
mount -o remount,acl /
|
安装ACL工具
1 2 3 4 5 6 7 8 9
| yum install acl
apt-get install acl
getfacl --version setfacl --version
|
5.2 getfacl和setfacl
查看ACL权限
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| getfacl file.txt
getfacl directory/
getfacl -R directory/ | less
getfacl -a file.txt
getfacl -d directory/
|
设置ACL权限
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| setfacl -m u:user2:rwx file.txt
setfacl -m g:developers:rw- file.txt
setfacl -m o::r-- file.txt
setfacl -x u:user2 file.txt
setfacl -x g:developers file.txt
setfacl -b file.txt
|
ACL高级用法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| setfacl -m d:u:user2:rwx directory/
setfacl -R -m u:user2:rw directory/
setfacl -R -m d:u:user2:rw directory/
setfacl --set-file=acl_file.txt target.txt
setfacl -m m::rwx file.txt
setfacl -m default:u::rwx directory/
|
5.3 ACL实战案例
案例1:协作目录权限
1 2 3 4 5 6 7 8 9 10 11 12 13
| mkdir -p /shared/project chgrp developers /shared/project chmod 2770 /shared/project
setfacl -m g:developers:rwx /shared/project
setfacl -d -m g:developers:rwx /shared/project
getfacl /shared/project
|
案例2:Web服务器目录权限
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| sudo mkdir -p /var/www/html sudo chown www-data:www-data /var/www/html
sudo setfacl -m u:www-data:rwx /var/www/html
sudo setfacl -m g:developers:rw- /var/www/html
sudo setfacl -m o::r-- /var/www/html
sudo setfacl -R -m u:www-data:rwx /var/www/html sudo setfacl -R -m g:developers:rw- /var/www/html
getfacl /var/www/html
|
六、umask权限掩码
6.1 umask基础
umask决定了新创建文件的默认权限。
1 2 3 4 5 6 7 8 9 10
| umask
umask 022
|
6.2 umask计算
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| umask计算规则: 默认文件权限: 666 (rw-rw-rw-) 减去umask值: 022 (-----w--w-) 实际文件权限: 644 (rw-r--r--) 默认目录权限: 777 (rwxrwxrwx) 减去umask值: 022 (-----w--w-) 实际目录权限: 755 (rwxr-xr-x)
常见umask值: 000: 文件666, 目录777 (不安全) 002: 文件664, 目录775 (组可写) 022: 文件644, 目录755 (标准) 027: 文件640, 目录750 (组只读) 077: 文件600, 目录700 (最严格)
|
6.3 设置系统umask
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| umask 022
echo "umask 022" >> ~/.bashrc source ~/.bashrc
sudo vi /etc/profile
sudo vi /etc/bash.bashrc
|
七、企业级权限管理
7.1 权限审计脚本
权限审计自动化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| #!/bin/bash
echo "=== Linux权限审计 ===" echo "审计时间: $(date)" echo ""
echo "1. SUID文件:" find /usr/bin /bin /sbin -perm -4000 -ls 2>/dev/null echo ""
echo "2. SGID文件:" find /usr/bin /bin /sbin -perm -2000 -ls 2>/dev/null echo ""
echo "3. 系统关键目录权限:" for dir in /etc /boot /usr; do echo "$dir: $(stat -c '%a %n' $dir 2>/dev/null)" done echo ""
echo "4. Root所有者的可写文件(非root用户可写):" find / -user root -perm -002 -type f -ls 2>/dev/null | head -20 echo ""
echo "5. 所有用户可写文件:" find / -perm -222 -type f -ls 2>/dev/null | head -20 echo ""
echo "审计完成"
|
7.2 权限修复脚本
自动修复权限
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| #!/bin/bash
TARGET_DIR="${1:-.}"
echo "=== 修复目录权限 ===" echo "目标目录: $TARGET_DIR" echo ""
echo "1. 修复文件权限..." find "$TARGET_DIR" -type f -exec chmod 644 {} \; echo " ✓ 文件权限修复完成"
echo "2. 修复目录权限..." find "$TARGET_DIR" -type d -exec chmod 755 {} \; echo " ✓ 目录权限修复完成"
echo "3. 添加脚本执行权限..." find "$TARGET_DIR" -type f -name "*.sh" -exec chmod +x {} \; find "$TARGET_DIR" -type f -name "*.py" -exec chmod +x {} \; echo " ✓ 脚本执行权限添加完成"
echo "" echo "修改统计:" echo " 文件: $(find "$TARGET_DIR" -type f | wc -l)" echo " 目录: $(find "$TARGET_DIR" -type d | wc -l)"
echo "" echo "修复完成"
|
7.3 Web服务器权限标准
标准Web目录权限
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| #!/bin/bash
WEB_ROOT="/var/www/html" WEB_USER="www-data"
echo "=== Web服务器权限配置 ==="
sudo chown -R $WEB_USER:$WEB_USER "$WEB_ROOT"
sudo find "$WEB_ROOT" -type d -exec chmod 755 {} \; echo " ✓ 目录权限设置为755"
sudo find "$WEB_ROOT" -type f -exec chmod 644 {} \; echo " ✓ 文件权限设置为644"
sudo find "$WEB_ROOT" -type f -name "*.php" -exec chmod 755 {} \; sudo find "$WEB_ROOT" -type f -name "*.cgi" -exec chmod 755 {} \; echo " ✓ 脚本文件添加执行权限"
sudo chown -R $WEB_USER:$WEB_USER "$WEB_ROOT" echo " ✓ 所有者设置完成"
sudo chmod 1777 /tmp 2>/dev/null sudo chmod 1777 /var/tmp 2>/dev/null
echo "" echo "Web服务器权限配置完成"
|
八、权限管理最佳实践
8.1 最佳实践清单
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| 权限管理最佳实践: 1. 最小权限原则: - 只授予必要的权限 - 避免使用777权限 - 定期审查权限 2. 文件权限标准: - 普通文件: 644 - 可执行文件: 755 - 配置文件: 600 - 日志文件: 644 3. 目录权限标准: - 普通目录: 755 - 脚本目录: 755 - 临时目录: 1777(粘滞位) - 用户目录: 700 4. 特殊权限使用: - SUID: 谨慎使用,定期审查 - SGID: 用于协作目录 - Sticky Bit: 用于共享目录 5. ACL应用: - 细粒度权限控制 - 复杂场景使用ACL - 默认ACL用于继承 6. 权限审计: - 定期审计权限 - 监控权限变更 - 自动化权限检查
|
8.2 常见权限配置示例
配置文件权限
1 2 3 4 5 6 7 8 9 10
| chmod 600 /etc/shadow chmod 600 /etc/gshadow chmod 600 ~/.ssh/id_rsa chmod 600 ~/.bash_history
chmod 644 /etc/fstab chmod 644 /etc/hosts chmod 644 /etc/passwd
|
脚本权限
1 2 3 4 5 6 7 8 9 10
| chmod +x script.sh chmod 755 script.sh
chmod 444 data.txt
chmod 666 data.txt chmod 664 data.txt
|
目录权限
1 2 3 4 5 6 7 8 9 10 11
| chmod 700 ~/
chmod 775 /shared/directory
chmod 755 /var/www/html
chmod 1777 /tmp
|
九、故障排查
9.1 常见权限问题
问题1:Permission denied
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| ls -l file.txt
ls -l file.txt
groups id
chown user file.txt
chmod +r file.txt
usermod -a -G group user
|
问题2:无法删除文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| ls -ld directory/
ls -l file.txt
groups
chmod +w directory/
chmod -t directory/
getfacl file.txt setfacl -x u:user file.txt
|
9.2 权限诊断工具
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| find . -ls | head -20
namei -l /path/to/file
ls -lR directory/
getfacl directory/
find /usr/bin -perm -4000 -ls
|
十、总结
Linux权限管理是系统安全的基础。本文涵盖了:
核心要点
- 基础权限:rwx符号、755数字、u/g/o三层权限
- 特殊权限:SUID、SGID、粘滞位
- ACL高级权限:细粒度控制
- umask掩码:默认权限控制
技术要点
- chmod/chown/chgrp:权限与所有权管理
- setfacl/getfacl:ACL高级访问控制
- umask:默认权限配置
- 权限审计:安全监控
实践建议
- 遵循最小权限:仅授予必要权限
- 使用标准配置:文档755、文件644
- 定期审计:检测异常权限
- 借助ACL:实现更细粒度控制
- 自动化管理:通过脚本落实策略
通过合理的权限管理,可提升系统安全性并降低风险。