「作者主页」:士别三日wyx
「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者
chmod 命令
- 一、常用操作
- 1. 字母形式
- 2. 数字形式
- 3. 递归设置
- 二、文件权限解读
- 三、数字权限
- 四、特殊的root权限
- 五、SUID详解
- 1. 设置SUID
- 2. 取消SUID
- 3. SUID提权
作用:修改文件权限
参数:
- u 表示文件拥有者
- g 表示文件所属的用户组
- o 表示其他用户
- a a = u+g+o
+
增加权限-
减少权限=
设置权限- r 可读取
- w 可写入
- x 可执行
- -R 递归修改
一、常用操作
chmod u+r a.txt # 所属用户增加可读权限
chmod u-r a.txt # 所属用户减少可读权限
chmod u=r a.txt # 所属用户设置可读权限
chmod a+r a.txt # 给所有人增加可读权限
chmod u+x,g+w a.txt # 同时修改多个权限
chmod ug+x a.txt # 同时修改多个权限
chmod 777 a.txt # 给所有人增加读、写、执行权限
chmod -R 777 目录 # 修改目录及目录下所有文件的权限
1. 字母形式
1)给文件的所属用户增加执行权限
chmod u+x a.txt
2)给文件的所属用户减少执行权限
chmod u-x a.txt
3)给文件的所属用户设置读写权限
chmod u=rw a.txt
4)给文件的所属组增加执行权限
chmod g+x a.txt
5)给文件的其他用户增加执行权限
chmod o+x a.txt
6)同时修改多个权限,用逗号间隔
chmod u+x,g+w a.txt
7)给所属用户和所属组同时增加可执行权限
chmod ug+x a.txt
8)同时给多个文件修改权限
chmod u+x a.txt b.txt
9)给所有人都增加可执行权限
chmod a+x a.txt
2. 数字形式
1)给所有人都增加读、写、执行权限
chmod 777 a.txt
3. 递归设置
修改目录的权限后,目录中的文件权限并不会改变。
想要把目录和目录下的所有文件都修改权限,可以加上 -R
参数
chmod -R 777 目录
二、文件权限解读
我们用 ls -l
命令查看文件信息时,会显示下面这些字段,其中最左边的那一串字母,就表示这个文件的权限
drwxr-xr-x 2 root root 4096 Dec 16 13:56 a
- 第一位:表示文件类型(d表示目录,-表示文件)
- 第2~4位:表示文件所有者的权限
- 第5~7位:表示用户组的权限
- 第8~10位:表示其他用户的权限
权限使用 r
、w
、x
、-
四种符号表示
- r:read,表示读权限,文件可以被查看
- w:write,表示写权限,文件可以被修改
- x:execute,表示执行权限,文件可以被执行
- -:表示没有权限
三、数字权限
chmod命令可以用八进制数来制定权限,数字和字母权限的对应关系如下:
数字形式 | 权限权限 | 字母形式 |
---|---|---|
7 | 读 + 写 + 执行 | rwx |
6 | 读 + 写 | rw- |
5 | 读 + 执行 | r-x |
4 | 只读 | r– |
3 | 写 + 执行 | -wx |
2 | 只写 | -w- |
1 | 只执行 | –x |
0 | 无 | — |
四、特殊的root权限
虽然我们经常管 root 叫超级管理员用户,但 root 的权限却不受到 chmod 命令的约束。
比如 /etc/shadow
的权限是全空,正常来说,所有用户都不能查看这个文件,但 root 用户却可以查看它的内容。
这就意味着,root 的权限凌驾于Linux的权限管理机制之上。
五、SUID详解
SUID是Linux系统的一个特殊权限,可以让其他用户临时获取文件的执行权限。
如果程序拥有SUID,程序运行为进程时,进程的所属用户就会变成程序的拥有者,而不是程序的调用者。
就相当于用户使用程序拥有者的身份来运行这个程序。
1. 设置SUID
设置SUID的前提是,文件具有可执行权限,也就是 rwx
权限,在这个基础上,再给它增加 s
权限:
chmod u+s a.txt
设置完SUID后可以看到,文件的权限由 rwx
变成 res
如果给一个没有执行权限的文件设置SUID,就会变成一个大写的 S
,就是无效的意思。
2. 取消SUID
减去 s 权限,就能取消SUID权限
chmod u-s a.txt
3. SUID提权
拥有SUID权限的文件,在执行过程中,调用者会暂时获得文件所有者的权限。
如果文件的所有者是 root,低权限用户就可以利用这一点,进行提权。
以下命令可以寻找,系统上正在运行的拥有SUID的文件。
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} ;
Nmap和 Msfconsole等工具都有相应的SUID提权模块。