3.7.6 权限与配额故障排查与最佳实践
本节聚焦权限、ACL与配额在生产环境中的常见故障定位与最佳实践,并提供可执行示例、排错流程与练习。
权限/ACL/配额作用链路示意(便于定位问题发生在哪一层):
一、权限与ACL故障排查流程与示例#
1.1 快速定位步骤(含命令解释)#
1) 确认所有者、属组、权限位与父目录权限链
# 查看目标文件/目录权限
ls -ld /data/app
# 查看父目录链的“执行权限(x)”
namei -l /data/app
解释:
- ls -ld 查看目录本身权限。
- namei -l 逐级显示路径权限,定位缺失“x”的目录。
2) 检查特殊权限(SUID/SGID/Sticky)
# 查找系统中的SUID/SGID文件
find / -xdev -perm -4000 -o -perm -2000 2>/dev/null
# 查看目录是否设置了Sticky
ls -ld /tmp /data/share
解释:
- -perm -4000 / -perm -2000 分别查SUID/SGID。
- 目录的Sticky位(t)常用于共享临时目录防误删。
3) 检查ACL是否覆盖或被mask限制
# 查看ACL
getfacl /data/app
# 查看并设置mask
setfacl -m m:rwx /data/app
解释:
- ACL的有效权限会被mask限制。
- m:rwx 允许ACL生效到最大权限。
1.2 ACL问题复现实例(含修复)#
场景:用户dev1对目录无写权限,尽管赋予了ACL。
# 准备目录
mkdir -p /data/app
chown root:dev /data/app
chmod 2775 /data/app
# 设置ACL(给dev1写权限)
setfacl -m u:dev1:rwx /data/app
# 故意设置mask过小导致权限无效
setfacl -m m:rx /data/app
# 验证
getfacl /data/app
预期问题:dev1无法写入。
修复:
# 放开mask
setfacl -m m:rwx /data/app
1.3 ACL跨文件系统复制导致丢失#
# 错误:未保留ACL
cp -r /data/app /backup/app
# 正确:保留ACL与属性
cp -a /data/app /backup/app
# 或使用rsync
rsync -aA /data/app /backup/app
解释:
- -aA 保留ACL,避免恢复后权限异常。
二、配额故障排查与示例#
2.1 典型排查流程#
1) 检查挂载选项是否启用配额
mount | grep /data
# 预期包含 usrquota,grpquota 或 uquota,gquota
2) 检查配额文件是否存在且有效
ls -l /data/aquota.user /data/aquota.group
3) 强制校验与重建配额
# 停止写入或尽量低峰执行
quotacheck -ugm /data
# 启用配额
quotaon /data
解释:
- -u/-g 用户/组配额
- -m 强制检查(不卸载)
4) 检查用户配额与实际使用
quota -u dev1
repquota -a
2.2 配额“未生效”复现与修复#
场景:为用户设置限制后仍能写入。
# 配置挂载(/etc/fstab)示例
UUID=xxxx /data ext4 defaults,usrquota,grpquota 0 2
# 重新挂载
mount -o remount /data
# 初始化配额
quotacheck -ugm /data
quotaon /data
# 设置配额
edquota -u dev1
常见原因与修复:
- 未启用quotaon → 执行 quotaon /data
- 只设置块配额,实际超限为inode → 设置inode限制
- 配额文件损坏 → quotacheck -ugm /data
三、最佳实践(可执行)#
3.1 权限与ACL#
# 共享目录统一组权限并保组一致
chown -R root:dev /data/share
chmod 2775 /data/share # SGID
# 默认ACL保证新文件继承
setfacl -m d:g:dev:rwx /data/share
说明:
- SGID保证新建文件组一致。
- d:为默认ACL,仅对新建文件生效。
3.2 SUID/SGID审计基线#
# 基线清单
find / -xdev -perm -4000 -o -perm -2000 2>/dev/null | sort > /var/log/suid_sgid_baseline.txt
3.3 配额容量规划#
# 监控配额
repquota -a | awk 'NR>2 {print $1,$3,$4,$7,$8}'
说明:
- 结合业务增长预留缓冲,软/硬限制与宽限期要区分。
四、故障排查清单(可直接复用)#
# 1. 权限链路
namei -l /path/to/dir
# 2. ACL与mask
getfacl /path/to/dir
setfacl -m m:rwx /path/to/dir
# 3. 特殊权限
ls -ld /path/to/dir
find / -xdev -perm -4000 -o -perm -2000 2>/dev/null
# 4. 配额状态
mount | grep /data
quotaon -p /data
repquota -a
五、练习题(带目标)#
1) ACL与mask练习
目标:为用户dev1赋予写权限,但通过mask限制为只读,再恢复为可写。
要求:使用getfacl验证变更。
2) 权限链路练习
目标:创建/data/app/log并让用户dev1可进入但不可删除他人文件。
要求:结合SGID与Sticky位实现,写出验证命令。
3) 配额练习
目标:为用户dev1设置块限制100M、inode限制1000,触发超限并记录提示。
要求:输出quota -u dev1与拒写的终端提示截图/日志。
以上内容可作为生产排查模板,确保权限、ACL与配额变更可审计、可回滚、可验证。