← 回目录
06 Week 02 · 权限和用户

读懂 rwx,看懂 755

这是运维面试出现频率最高的基础题,没有之一。今天把 Day 01 里那十个字符彻底讲透。

第二周开始。上周你已经能查问题、改配置了,但有一类问题当时绕过去了——Permission denied。这周就解决它。

今天要敲的
$ ls -l /etc/passwd
$ ls -ld /tmp                     # -d 看目录本身,不看里面
$ chmod 755 /tmp/lab/test.sh
$ chmod 644 /tmp/lab/test.txt
$ chmod +x  /tmp/lab/test.sh

回到那十个字符

Day 01 见过,今天拆开
-rw-r--r-- ← 一个字符 + 三组,每组三个
第 1 位
文件类型- 普通文件,d 目录,l 软链接。它不是权限,别数进去。
第 2–4 位
属主(owner)的权限——文件归谁,谁就用这三位。
第 5–7 位
属组(group)的权限——属于这个组的成员用这三位。
第 8–10 位
其他人(other)的权限——不是属主、也不在组里的所有人。
系统怎么判断该用哪一组

从左到右,命中即停。你是属主 → 用属主那三位,后面两组跟你没关系了

这解释了一个反直觉的现象:属主的权限比其他人还小时,属主反而做不了。比如 -r--rw-r--,属主只能读,哪怕组里的人能写。

rwx 到底是什么意思

今天最重要的一节

大部分教程只说「r 读、w 写、x 执行」就过去了。但 rwx 对「文件」和「目录」的含义完全不一样——这是新手最容易栽的地方,也是面试的进阶题。

同样是 rwx,用在文件和目录上完全不同
r · 文件
读文件内容catless 得开)。
r · 目录
列出目录里有什么ls 能出结果)。但仅此而已——不代表能访问里面的文件。
w · 文件
修改文件内容
w · 目录
能在目录里新建、删除、改名文件。注意:删一个文件看的是目录的 w,不是文件自己的权限。
x · 文件
执行它(脚本、程序)。普通文本文件不需要这个。
x · 目录
进入这个目录(cd 进得去),也是访问里面文件的前提
目录的 x 是个大坑

目录没有 x,你就进不去,里面的文件一个都碰不到——哪怕那些文件本身权限是 777。

反过来,目录只有 x 没有 r:你 ls 不出内容(不知道里面有啥),但如果你确切知道文件名,照样能访问

所以目录权限里 r 和 x 通常要一起给,这就是为什么目录默认是 755 而不是 744。

数字怎么来的

755 到底是什么
每个权限对应一个数
r = 4     w = 2     x = 1     - = 0

# 每一组把有的加起来,三组凑成三位数

rwx = 4+2+1 = 7
rw- = 4+2+0 = 6
r-x = 4+0+1 = 5
r-- = 4+0+0 = 4
所以
rwx r-x r-x  →  755   属主全权,其他人能读能进
rw- r-- r--  →  644   属主可改,其他人只读
rwx --- ---  →  700   只有属主能用,别人完全碰不到
rw- --- ---  →  600   只有属主能读写
rwx rwx rwx  →  777   所有人全权 —— 别用
记两个就够开始了

755 给目录和脚本(要能进、能执行),644 给普通文件(不需要执行)。

这两个覆盖你 90% 的场景。剩下的等遇到了再查。

chmod

两种写法,都要会
数字法 —— 一次设定全部
$ chmod 755 /tmp/lab/test.sh    # 直接定成 rwxr-xr-x
$ chmod 644 /tmp/lab/test.txt
$ chmod -R 755 /tmp/lab/        # -R 递归,整个目录树
符号法 —— 只改某一部分
$ chmod +x  test.sh      # 所有人都加执行权限
$ chmod u+x test.sh      # u=属主 只给属主加
$ chmod g-w test.txt     # g=属组 去掉组的写权限
$ chmod o-r secret.txt   # o=其他人 不让别人读
$ chmod a+r public.txt   # a=所有人
什么时候用哪种

数字法:你清楚知道最终要什么权限,一步到位。写脚本、做部署时用它。

符号法:只想动一个点,别的保持不变。最典型的就是 chmod +x 给脚本加执行权限——第 26 天你会天天用。

为什么不该用 777

这题一答就露怯

新手遇到 Permission denied,最快的"解决"办法就是 chmod 777。**它确实能让问题消失——但那是把问题盖住,不是解决。**

而且有些场景 777 会直接让功能失效,不是安全问题,是根本用不了:

SSH 就是典型例子(第 20 天会用到)
# SSH 对密钥文件的权限有强制要求,太开放它就拒绝工作
$ chmod 700 ~/.ssh                  # 目录必须 700
$ chmod 600 ~/.ssh/authorized_keys  # 公钥文件必须 600
$ chmod 600 ~/.ssh/id_rsa           # 私钥必须 600

# 权限太开时的报错:
Permissions 0644 for '/home/devops/.ssh/id_rsa' are too open.
It is required that your private key files are NOT accessible by others.

密钥登录配不通,十次有三次是权限的问题。记住 .ssh 是 700、里面的文件是 600,能省你很多时间。

顺带一提 umask

新文件的默认权限从哪来

touch 一个新文件,默认是 644;mkdir 一个新目录,默认是 755。这个默认值是 umask 决定的。

看一眼就行
$ umask
0022

# 原理:从最大权限里「减掉」umask
#   目录  777 - 022 = 755
#   文件  666 - 022 = 644   (文件默认不给 x,所以是 666 起步)

今天知道有这么回事就够了,不用背。面试偶尔会问一句"新建文件默认权限怎么来的",能说出 umask 这个词就行。

今天的面试点

三道题,从基础到进阶
「755 是什么意思?」

「属主读写执行,属组和其他人只能读和执行。」

补一句会更好:「目录必须有 x 才能进得去,所以目录一般给 755 而不是 744。」

「目录的 x 权限是干什么的?」

这是进阶题,答对能明显加分。

「目录的 x 是进入权限。没有 x 就 cd 不进去,里面的文件一个都访问不了,哪怕文件本身是 777。而 r 只管能不能 ls 出列表——所以目录的 r 和 x 通常要一起给。」

「遇到权限问题你会直接 chmod 777 吗?」

这是道送命题,别答"会"。

「不会。777 是把问题盖住而不是解决,而且有些场景反而会失效——比如 SSH 的密钥文件权限太开,它会直接拒绝登录。我一般是先 ls -l 看属主和权限,id 确认当前用户在哪些组,按最小权限来调。」

今天的练习

敲完再走 · 约 12 分钟
  • ls -l /etc/passwd,把那十个字符念出来:什么类型、三组各是什么权限
  • ls -ld /tmp,看看 /tmp 是几,想想为什么它跟别的目录不一样(末尾那个 t 先不用管)
  • 建个文件 touch /tmp/lab/p.txtls -l 看默认是不是 644
  • 建个目录 mkdir /tmp/lab/pdls -ld 看默认是不是 755,再 umask 对一下
  • 重点实验chmod 644 /tmp/lab/pd(去掉目录的 x),然后试 cd /tmp/lab/pd —— 看它怎么拒绝你,然后 chmod 755 改回来
  • 用符号法练一次:chmod u+xls -l 看变化,然后 chmod u-x 改回去
明天预告

Day 07 讲属主和属组——权限管「能做什么」,属主属组管「你是谁」。两者合起来才是完整的判断。

明天还会讲一个真实场景:网站报 403 打不开,怎么按顺序排查。