1.2.3 权限与所有权管理命令

权限与所有权管理围绕“查看、变更、验证”展开,目标是确保文件与目录访问符合最小权限原则。运维中应结合用户/组规划与目录结构进行批量管理,避免权限漂移与误授权。

文章图片

0)工具安装(ACL 支持)

# Debian/Ubuntu
sudo apt-get update
sudo apt-get install -y acl

# RHEL/CentOS/Alma/Rocky
sudo yum install -y acl

1)路径与通配符基础(绝对/相对 + 通配符)
- 绝对路径:以 / 开头,从根目录起定位,如 /data/app/run.sh
- 相对路径:以当前目录为起点,如 ./run.sh../app/run.sh
- 通配符:
- *:匹配任意长度字符
- ?:匹配单个字符
- []:匹配集合/范围,如 [a-z][0-9]

# 绝对路径示例
ls -l /data/app/run.sh

# 相对路径示例(假设当前目录为 /data)
cd /data
ls -l app/run.sh
ls -l ./app/run.sh
ls -l ../data/app/run.sh

# 通配符示例
ls -l /data/app/*.sh         # 匹配所有 .sh
ls -l /data/app/run?.sh      # 匹配 run1.sh/runA.sh
ls -l /data/app/run[0-9].sh  # 匹配 run0.sh~run9.sh

2)查看权限与所有权
- ls -l:快速查看权限位、所有者、组
- stat:查看更完整的元数据(权限、inode、时间戳)

# 准备示例
mkdir -p /data/app && touch /data/app/run.sh
ls -l /data/app
# 期望输出示例:-rw-r--r-- 1 root root 0 ... run.sh

# 详细查看
stat /data/app/run.sh
# 关注 Access: (0644/-rw-r--r--) Uid/Gid 字段

3)变更权限(chmod)
- 数字法:chmod 750 file(rwx=7,r-x=5,---=0)
- 符号法:chmod u+x,g-w,o-r file
- 递归:chmod -R 750 dir

# 让脚本可执行,并限制其他用户
chmod 750 /data/app/run.sh
ls -l /data/app/run.sh
# 期望:-rwxr-x--- 1 root root ...

# 使用符号法撤掉组写权限
chmod g-w /data/app/run.sh

4)变更所有者/组(chown/chgrp)
- chown user:group file
- chgrp group file
- 递归:chown -R user:group dir

# 创建用户与组(示例)
sudo groupadd appgrp
sudo useradd -g appgrp appuser

# 变更所有者与组
sudo chown appuser:appgrp /data/app/run.sh
ls -l /data/app/run.sh
# 期望:-rwxr-x--- 1 appuser appgrp ...

# 仅变更组
sudo chgrp appgrp /data/app

5)验证访问效果(模拟用户)

# 切换到 appuser 验证可执行
sudo -iu appuser
cd /data/app
./run.sh
# 期望:若无可执行权限会报 "Permission denied"

# 回到 root
exit

6)批量管理与安全建议(结合通配符/路径)
- 目录权限建议:应用目录 750,脚本 750,配置文件 640
- 使用 find 批量修正权限:避免误修改其他路径

# 只修正目录权限
sudo find /data/app -type d -exec chmod 750 {} \;

# 只修正脚本权限(通配符匹配 .sh)
sudo find /data/app -type f -name "*.sh" -exec chmod 750 {} \;

# 配置文件权限
sudo find /data/app -type f -name "*.conf" -exec chmod 640 {} \;

7)排错清单(常见问题)

# 现象:Permission denied
# 排查步骤
ls -l /data/app/run.sh
stat /data/app/run.sh
# 检查:权限位、所有者/组、所在目录是否可执行(x)

# 目录无执行权限导致无法进入
ls -ld /data /data/app
# 若目录缺少 x,会导致无法访问文件

8)练习
1. 创建用户 devuser、组 devgrp,将 /data/dev 目录及其下脚本归属为 devuser:devgrp
2. 将 /data/dev 目录权限设置为 750,脚本权限为 750,配置文件权限为 640
3. 使用 sudo -iu devuser 验证脚本可执行,其他用户不可访问。