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与配额变更可审计、可回滚、可验证。