文件权限管理:chmod、chown
Linux 权限模型
Linux 中每个文件都有三种权限,对应三类用户:
三种权限
| 权限 | 符号 | 数字 | 对文件的作用 | 对目录的作用 |
|---|---|---|---|---|
| 读(Read) | r | 4 | 查看文件内容 | 列出目录内容(ls) |
| 写(Write) | w | 2 | 修改文件内容 | 创建/删除目录内文件 |
| 执行(Execute) | x | 1 | 执行程序/脚本 | 进入目录(cd) |
三类用户
| 用户类型 | 含义 |
|---|---|
| 所有者(Owner/User) | 创建文件的用户 |
| 所属组(Group) | 文件所属的组 |
| 其他人(Others) | 系统中其他所有用户 |
chmod:修改权限
chmod(Change Mode)修改文件或目录的权限。
数字表示法(最常用)
# 权限数字 = 所有者 + 组 + 其他人
# 7 = 4+2+1 = rwx
# 6 = 4+2 = rw-
# 5 = 4+1 = r-x
# 4 = 4 = r--
# 0 = 0 = ---
chmod 755 script.sh # rwxr-xr-x(所有者可读写执行,其他人可读执行)
chmod 644 file.txt # rw-r--r--(所有者可读写,其他人只读)
chmod 700 private.key # rwx------(只有所有者能访问)
chmod 777 shared/ # rwxrwxrwx(所有人完全权限,慎用)
符号表示法
# 给所有者添加执行权限
chmod u+x script.sh
# 给组添加写权限
chmod g+w file.txt
# 移除其他人的读权限
chmod o-r file.txt
# 给所有人添加执行权限
chmod a+x script.sh
# 设置权限为 rwxr-xr-x
chmod u=rwx,g=rx,o=rx script.sh
常用权限组合
| 数字 | 权限 | 适用场景 |
|---|---|---|
| 777 | rwxrwxrwx | 共享目录(慎用) |
| 755 | rwxr-xr-x | 可执行脚本、程序 |
| 644 | rw-r--r-- | 普通文件、配置文件 |
| 700 | rwx------ | 私钥、密码文件 |
| 600 | rw------- | 敏感数据文件 |
chown:修改所有者
chown(Change Owner)修改文件的所有者和所属组。
# 修改文件所有者
sudo chown root file.txt
# 修改文件所有者和组
sudo chown user:group file.txt
# 只修改组
sudo chown :group file.txt
# 递归修改目录及其内容(-R)
sudo chown -R user:user directory/
注意:修改所有者通常需要 sudo,因为普通用户不能随意把文件"送给"别人。
实际场景:脚本权限问题
场景:编写并运行 Shell 脚本
# 1. 创建脚本文件
cat > hello.sh
#!/bin/bash
echo "Hello, Linux!"
# 按 Ctrl+D 保存
# 2. 查看权限
ls -l hello.sh
# -rw-r--r-- 1 user user 30 Jan 15 10:00 hello.sh
# 3. 尝试执行
./hello.sh
# bash: ./hello.sh: Permission denied
# 4. 添加执行权限
chmod +x hello.sh
# 5. 再次执行
./hello.sh
# Hello, Linux!
特殊权限位
SUID(Set User ID)
执行文件时临时获得文件所有者的权限。
# 典型例子:passwd 命令
ls -l /usr/bin/passwd
# -rwsr-xr-x 1 root root ... /usr/bin/passwd
# s 出现在所有者权限位,表示 SUID
原理:passwd 需要修改 /etc/shadow(只有 root 能写),但普通用户需要改密码。SUID 让普通用户执行 passwd 时临时获得 root 权限。
SGID(Set Group ID)
对目录:新创建的文件继承目录的组。
# 设置 SGID
chmod g+s shared/
# 新创建的文件自动属于 shared 目录的组
Sticky Bit
对目录:只有文件所有者能删除自己的文件(即使其他人有写权限)。
# 典型例子:/tmp 目录
ls -ld /tmp
# drwxrwxrwt 10 root root ... /tmp
# t 出现在其他人权限位,表示 Sticky Bit
本篇小结
- 三种权限:r(4) 读、w(2) 写、x(1) 执行
- 三类用户:u 所有者、g 组、o 其他人
chmod 755 file:数字法设置权限,最常用chmod u+x file:符号法添加权限chown user:group file:修改所有者和组- 脚本执行前需要
chmod +x添加执行权限 - 特殊权限:SUID(临时提权)、SGID(继承组)、Sticky(防误删)
动手实践
创建脚本并设置权限:
cat > run.sh #!/bin/bash echo "Running as $(whoami)" # Ctrl+D ls -l run.sh # 观察默认权限 chmod +x run.sh # 添加执行权限 ./run.sh # 执行脚本权限计算练习:
touch test1 test2 test3 chmod 640 test1 # rw-r----- chmod 750 test2 # rwxr-x--- chmod 444 test3 # r--r--r-- ls -l test* # 验证你的计算观察系统命令的 SUID:
ls -l /usr/bin/passwd ls -l /usr/bin/sudo ls -ld /tmp用符号法修改权限:
chmod u=rwx,g=rx,o=r file.txt ls -l file.txt思考:为什么
/tmp目录需要 Sticky Bit?如果没有 Sticky Bit,普通用户 A 能删除普通用户 B 在/tmp下的文件吗?