1. sudo 命令简介
-
sudo用来进行指定的短暂授权。例如安装软件时需要管理员(root)权限,实际上安装的是一份软件,允许大家同时使用。 -
权限控制如同"白名单",只有被列入的用户才能执行特定操作。
举例:
bash
whoami
普通用户 -> sudo ls
# 报错
[sudo] password for kiana: is not in the sudoers file. This incident will be reported.
sudo 提示用户是否在 sudoers 文件中,决定是否授权。
bash
-r--r----- root root /etc/sudoers
添加用户权限:
bash
root ALL=(ALL) ALL
whb ALL=(ALL) ALL
2. 权限概述
权限的本质是:决定用户能做或者不能做什么操作。
权限的两个主要目的
-
控制用户行为:防止错误发生。
-
理解和管理权限:分配精细的权限,控制访问。
权限 = 角色 + 目标属性
-
角色:拥有者(user)、所属组(group)、其他用户(other)。
-
目标属性:文件的读、写、执行权限。
3. 文件权限
文件权限组成
权限由9个字符表示:rwxrwxrwx
-
r= 读权限 -
w= 写权限 -
x= 执行权限
三个为一组
第一组表示拥有者权限,第二组表示所属组权限,第三组表示其他用户权限。
文件权限的数字表示
-
rwx= 7 (二进制: 111) -
rw-= 6 (二进制: 110) -
r--= 4 (二进制: 100)例如
bash
-rwxrw-r-- 1 kiana kiana 0 Sep 24 18:51 my.txt
↑ ↑↑↑ ↑↑↑ ↑
│ │││ │││ └── 其他用户权限(r--)
│ │││ └─┴──── 所属组权限(rw-)
│ └┴┴─────── 拥有者权限(rwx)
└─────────── 文件类型(-表示普通文件)
4. chmod 修改文件权限
-
u:拥有者(user) -
g:所属组(group) -
o:其他用户(others)
字符模式
bash
chmod u-r my.txt # 移除拥有者的读权限
chmod u+r my.txt # 恢复拥有者的读权限
chmod u+rwx my.txt # 为拥有者添加读、写、执行权限
数字模式
bash
chmod 644 file # 设置权限为rw-r--r--
chmod 755 file # 设置权限为rwxr-xr-x
修改限制
-
用户只能修改自己的文件权限。
-
修改其他用户的文件权限需要更高权限(如
sudo)。
5. chown更改文件的所有者
普通用户无法改变其他用户的文件所有者,必须拥有 root 权限。
bash
sudo chown kiana:kiana cmd # 更改文件所有者
没有权限时会遇到什么情况?
系统会拒绝访问:
bash
cat my.txt
# cat: my.txt: Permission denied
6. 目录权限
目录权限与文件权限有所不同,特别是执行权限在目录中的作用:
-
读®:查看目录内容(列出文件)
-
写(w):在目录中创建、删除、重命名文件
-
执行(x):进入目录
注意:
-
没有读权限:无法查看目录内容
-
没有执行权限:无法进入目录
-
没有写权限:无法在目录内创建/删除文件
-
文件删除权限:取决于所在目录的写权限,而非文件本身权限
权限实例
bash
drwxrwxr-x 2 kiana kiana 4096 Sep 24 20:48 code
-
目录拥有者和所属组都有完全权限(
rwx) -
其他用户有读取和进入的权限(
r-x),但不能修改目录内容。
7. 粘滞位(Sticky bit)
-
作用:用于共享目录,防止非拥有者删除他人文件
-
设置方法 :
chmod +t directory或chmod 1777 directory -
特征 :目录权限最后一位变为t,如
drwxrwxrwt -
效果:用户只能删除自己创建的文件
设置粘滞位:
bash
chmod +t /shared/directory
共享文件一般放在系统文件tmp下
bash
drwxrwxrwt 14 root root 4096 Jan 14 20:31 tmp/
8. 权限掩码 (umask)
umask:默认的文件权限掩码,控制文件或目录的默认权限。
默认权限
-
普通文件的默认权限:
666(rw-rw-rw-)(去掉可执行权限) -
目录的默认权限:
777(rwxrwxrwx)(包含执行权限) -
umask会与默认权限进行按位与操作,从而决定最终的权限。 -
最终权限 = 起始权限 & (~umask)
查看 umask
bash
umask
0022 #因系统而异
-
对文件:
666 & (~0022)=648(去掉了其他用户的写权限) -
对目录:
777 & (~0022)=753(去掉了其他用户的写权限)
9. 总结
-
角色:每个文件都有三个角色权限:拥有者、所属组、其他用户。
-
角色判定顺序:拥有者 → 所属组 → 其他用户(只判定一次)
-
权限控制:每个角色可以拥有不同的读、写、执行权限。
-
root用户:不受任何权限限制
-
修改权限 :使用
chmod修改权限,使用chown更改文件所有者。 -
权限掩码 :
umask用于设置默认文件权限,灵活调整。 -
家目录隔离:默认情况下用户无法访问他人家目录
-
可执行权限:需要"权限+可执行内容"双重条件
| 命令 | 功能 | 示例 |
|---|---|---|
chmod |
修改权限 | chmod 755 file |
chown |
修改拥有者 | chown user:group file |
chgrp |
修改所属组 | chgrp group file |
umask |
设置权限掩码 | umask 022 |
sudo |
临时获取root权限 | sudo apt install package |