文件权限是多少位(bits)?
12位
分为 4 个组,每组 3 位。
例如,4755
对应的是 100 111 101 101
。
下面是各部分对应的内容:
1 | 100: setuid, setgid, sticky bits |
当我们运行 ls -l 时,显示的权限是 -rwxr-xr-x,这里的 r、w 和 x 是什么意思?
读、写、执行
每个文件有 3 套 读/写/执行
权限:
- 拥有该文件的用户
- 拥有该文件的组
- 其他用户
如果一个文件的权限是 0644,拥有该文件的组是否能写这个文件?
不能
0644
在二进制中是 000 110 100 100
。
说明如下:
1 | 000 |
所以任何人都可以读取该文件,但只有拥有该文件的用户才可以写文件。
操作系统内核是否关心你的用户名是什么?
不关心
内核基于 用户ID/组ID
进行所有的权限检查 —— 用户名和组名的存在只是为了让人类更容易识别和使用。
如果一个目录被设置为可读权限,这意味着什么?
意味着你可以列出该目录中的文件
对于目录来说,下面是读/写/执行
的含义:
- 读:你可以列出文件
- 写:你可以创建文件
- 执行:你可以进入该目录并访问其下的文件
如果一个文件的权限被设置为 0666
,这是否意味着任何人都可以阅读它?
不一定
如果该文件的父目录的执行位
被置为 0,这将使你无法读取该目录下的任何文件。
如果一个文件的权限被设置为 0000,这是否意味着没有人可以读它?
不是
root 可以读写权限为 0000 的文件。
每个进程都有一个用户ID(UID)吗?
是的
当你以用户身份登录时,几乎你启动的所有进程都会把它们的 UID 设置为你的 UID。
一个进程可以有多个组ID(GID)吗?
是的
进程有一个主 GID,也有一个补充(supplementary)组ID列表。文件权限检查将检查进程的任何一个组ID是否与文件的所有者匹配。
如果你把一个用户添加到一个组,以该用户身份运行的现有进程是否会自动将该 GID 添加到他们的 GID 列表中?
不会
退出并重新登陆后才会生效。
setuid
位的作用是什么?
在一个可执行文件上,它意味着该进程将以文件所有者的 UID 运行
例如,passwd(用来修改密码)通常设置了setuid位,因为它需要以 root 身份运行,以便能够写入修改密码的文件。
一个没有特权的进程有可能改变其 UID 吗?
不可能
你必须有超级用户的权限来改变你的 UID。
为什么 sudo 可以让你以 root 身份运行命令?
它设置了 setuid 位
sudo 总是以 root 身份运行。
所以如果 /etc/sudoers
允许你以 root 身份启动程序,则它将以 root 身份为你启动程序。