3.7.1 Linux权限模型与权限位
3.7.1 Linux权限模型与权限位#
本节围绕 Linux 的“用户-组-其他”权限模型与权限位,结合命令示例、原理草图、排错与练习,帮助你在实际运维中正确判断与修改权限。
1. 权限模型原理草图#
2. 权限位含义与显示#
使用 ls -l 查看权限位与类型:
ls -l /data
# -rw-r--r-- 1 ops ops 18 May 12 10:00 app.conf
# drwxr-x--- 2 ops dev 40 May 12 09:50 logs
# lrwxrwxrwx 1 ops ops 11 May 12 09:45 current -> releases/1
解释:
- - 普通文件,d 目录,l 软链接
- r 读:文件可读;目录可列出内容
- w 写:文件可修改;目录可创建/删除/重命名
- x 执行:文件可执行;目录可进入(cd)
3. 数字权限表示法与换算#
权限位数值:r=4、w=2、x=1
常见组合:
- 644 → rw-r--r--(配置文件)
- 755 → rwxr-xr-x(可执行程序、目录)
- 700 → rwx------(私有目录)
示例:设置目录与脚本权限
mkdir -p /data/app/bin
chmod 755 /data/app
chmod 700 /data/app/bin
chmod 644 /data/app/app.conf
chmod 755 /data/app/bin/run.sh
4. 权限生效规则与访问示例#
权限判断优先级:属主 > 属组 > 其他
目录与文件共同生效:进入目录需 x,查看需 r。
示例:验证目录 x 权限影响
# 场景:目录无执行权限,无法进入
chmod 644 /data/app
cd /data/app
# 预期:Permission denied
# 修复:添加执行权限
chmod 755 /data/app
cd /data/app
# 预期:成功进入
5. 权限修改与属主属组#
常用命令与含义:
- chmod 修改权限
- chown 修改属主/属组
- chgrp 修改属组
示例:按最小权限设置应用目录
# 创建用户与组
groupadd dev
useradd -g dev appuser
# 设置属主属组
chown -R appuser:dev /data/app
# 设置权限(目录 750,文件 640)
find /data/app -type d -exec chmod 750 {} \;
find /data/app -type f -exec chmod 640 {} \;
# 验证
ls -ld /data/app
ls -l /data/app/app.conf
6. umask 与默认权限#
默认权限计算:
- 文件:666 - umask
- 目录:777 - umask
示例:临时设置 umask 并验证
umask 027
touch /data/app/umask_test.txt
mkdir -p /data/app/umask_dir
ls -l /data/app/umask_test.txt
# -rw-r----- 1 appuser dev 0 May 12 10:30 /data/app/umask_test.txt
ls -ld /data/app/umask_dir
# drwxr-x--- 2 appuser dev 6 May 12 10:30 /data/app/umask_dir
7. 常见排错场景#
1)“Permission denied” 无法进入目录
# 检查目录权限
namei -l /data/app/bin
# 修复:确保路径上的每一层目录有 x
chmod 755 /data /data/app
2)属组权限不生效
# 检查用户是否在组内
id appuser
# 重新登录或刷新组
newgrp dev
3)脚本无法执行
# 检查执行权限与 shebang
ls -l /data/app/bin/run.sh
head -n 1 /data/app/bin/run.sh
# 修复
chmod +x /data/app/bin/run.sh
8. 练习#
1)创建目录 /opt/share,让 dev 组可读写进入,其他用户禁止访问。
2)设置 umask 002 后创建文件与目录,并对比默认权限变化。
3)将 /usr/local/bin/hello.sh 设置为仅属主可写,所有人可读可执行。
4)写出命令,递归将 /data/app 中目录设为 750、文件设为 640。