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=4w=2x=1
常见组合:
- 644rw-r--r--(配置文件)
- 755rwxr-xr-x(可执行程序、目录)
- 700rwx------(私有目录)

示例:设置目录与脚本权限

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