权限与 sudo · Linux 与命令行
每个文件,谁能读、谁能改、谁能运行?
课程目录为什么需要它
权限是 Linux 的第一道防线。所有人都能读的密码文件、谁都能改却又被服务器执行的脚本,都是攻击者的经典入口。「Permission denied(权限不够)」也是新手最常见的错误,而它背后的原因总是很清楚。
直觉理解
ls -l 会显示类似 -rwxr-x--- 的东西。第一个字符(- 是文件,d 是文件夹)后面是三组,每组三个字符:
| 所有者 | 同组 | 其他人 |
|---|---|---|
| rwx | r-x | --- |
r 读,w 写,x 执行(对文件夹来说:能进入)。
每组也可以写成一个数字:r = 4、w = 2、x = 1,加起来。所以 rwx r-x --- 就是 750,chmod 750 文件 就能这样设置。chmod u+x 文件 只给所有者加上执行权限。
sudo 以 root(管理员)身份运行一条命令,root 什么都能做。
定义
权限位
Read, write and execute for the owner, the group and everyone else, written as letters (rwxr-xr--) or digits (754).分别给所有者、同组用户和其他人的读、写、执行权限,可以写成字母(rwxr-xr--)或数字(754)。
最小权限
Give each user and program only the access it needs. Secrets are often 600: the owner reads and writes, nobody else can even read.每个用户和程序只给它需要的权限。密钥文件常用 600:所有者能读写,其他人连读都不行。
示例
读懂权限
在互动课里运行deploy.sh 现在还不能运行;secret.env 属于 root,只有 root 能读。
ls -l
chmod u+x deploy.sh
ls -l deploy.sh
./deploy.sh- L1deploy.sh 是 rw-r--r--(644):哪里都没有 x。
- L2u+x:给所有者(你)加上执行权限。
- L3现在是 rwxr--r--,也就是 744。
- L4./ 的意思是:运行当前文件夹里的这个文件。
deploying
权限不够,以及 sudo
在互动课里运行你不是 root,所以 600 的文件对你关着。sudo 能打开它,这正是 sudo 要少用的原因。
whoami
sudo cat secret.env
cat secret.env这个例子故意以报错结束:重点是学会读报错信息。
- L1你是 learner。
learner - L2以 root 身份,读成功了。
- L3以 learner 身份:权限不够,运行在这里停下。
常见错误
chmod 777
777 让任何人都能读、改、运行这个文件。它「解决」权限错误的方式是去掉所有保护。应该先弄清楚到底谁需要访问。
习惯性加 sudo
带 sudo 的手误可能弄坏整个系统,用 sudo 建的文件也会属于 root。只在确实需要的那一条命令上用。
小测验
1. `rw-r-----` 对应哪三个数字?
查看答案
答案:A
所有者 rw- = 4 + 2 = 6,同组 r-- = 4,其他人 --- = 0。
2. 这段代码会输出什么?
touch key.pem
chmod 600 key.pem
ls -l key.pem查看答案
答案:A
6 = 所有者 rw,其他两组都是 0。
动手练习
3 道练习,分三层:先预测程序的输出,再按新需求改程序,最后从零写一个。代码在浏览器里运行,提交马上判题。
- 预测输出数字变字母
执行完这些命令后,
ls -l显示 a 和 b 的权限是什么? - 改需求把密钥锁好
chmod 777让所有人都能读写这个密钥。改成只有你能读写api.key,谁也不能运行它。 - 从零写让脚本能运行
让
deploy.sh对所有者可执行、对所有人可读、只有所有者可写(也就是 744),然后运行它。
本课术语
| 术语 | 中文 | 英文定义 |
|---|---|---|
| Permission | 权限 | Whether a user may read, write or execute a file. |
| root | root 超级用户 | The administrator account on Linux; it may do anything. |
| sudo | sudo | Runs one command as root. |