chmod 简介
chmod
是一个常用的 Linux 命令,用于改变文件或目录的权限。在 Linux 中,每个文件和目录都有权限位,分别控制着文件所有者、所属组和其他用户对文件的读、写和执行权限。
查看 Linux 文件权限
soulio@ubuntu:~$ ls -l /
total 4004936
lrwxrwxrwx 1 root root 7 Feb 16 2024 bin -> usr/bin
drwxr-xr-x 3 root root 4096 Aug 23 06:16 boot
...
第 1 位是文件类型:l 表示链接,d 表示文件,-表示普通文件。
第 2~10 位是权限位:分别表示属主、属组 和 其他用户的 rwx 权限。
chmod 基本语法
chmod [选项] mode file
-
mode
:权限模式,用数字或符号表示。 -
file
:要改变权限的文件或目录。
在 chmod
命令中,权限可以用数字或符号表示。
- u:文件所有者
- g:所属组
- o:其他用户
- a:所有用户
一些常用的 chmod
命令选项包括:
- -R:递归地改变指定目录及其子目录中所有文件的权限。
- --reference=referencefile:根据
referencefile
的权限来设置指定文件的权限。
示例列表
1. 给文件所有者增加执行权限
chmod u+x file.txt
2. 给文件所属组增加写权限
chmod g+w file.txt
3. 移除其他用户的读权限
chmod o-r file.txt
4. 给所有用户设置读权限
chmod a+r file.txt
5. 设置文件权限为只有所有者有读、写、执行权限
chmod 700 file.txt
6. 设置文件权限为所有者有读、写、执行权限,所属组和其他用户有读和执行权限
chmod 755 file.txt
7. 设置文件权限为所有者有读、写权限,所属组和其他用户没有任何权限
chmod 640 file.txt
8. 设置目录权限,使得所有者有完全权限,所属组和其他用户只能进入目录(不能列出目录内容或创建文件)
chmod 711 directory
9. 设置 setuid 权限,使得执行文件的用户获得文件所有者的权限
chmod u+s executable
10. 设置 setgid 权限,使得在目录中创建的文件继承目录的所属组而不是创建者的所属组
chmod g+s directory
11. 设置 sticky bit 权限,使得只有文件所有者可以删除或重命名文件,即使其他人有写权限
chmod +t directory
12. 同时移除 setuid、setgid 和 sticky bit 权限
chmod u-s,g-s,o-t directory
特殊权限
在Linux中,除了基本的读(r)、写(w)和执行(x)权限之外,还存在三种特殊权限:
一、概念
Setuid (SUID) :
- 概念:SUID是一种特殊权限,当它被设置在一个可执行文件上时,用户在执行这个文件时,会暂时获得该文件所有者的权限。
Setgid (SGID) :
- 概念:SGID是一种特殊权限,可以应用于可执行文件或目录。当应用于可执行文件时,执行者会获得文件所属组的权限;当应用于目录时,目录中创建的新文件和目录会继承该目录的组所有权。
Sticky Bit:
- 概念:Sticky Bit是一种特殊权限,通常只应用于目录。设置了Sticky Bit的目录中,只有文件的所有者或root用户才能删除或重命名文件,即使其他用户对目录有写权限。
二、标志符号
Setuid (SUID) :
- 标志符号:在
ls -l
命令的输出中,SUID权限在所有者的执行权限位上显示为s
(如果所有者有执行权限)或S
(如果所有者没有执行权限)。Setgid (SGID) :
- 标志符号:在
ls -l
命令的输出中,SGID权限在所属组的执行权限位上显示为s
(如果所属组有执行权限)或S
(如果所属组没有执行权限)。Sticky Bit:
- 标志符号:在
ls -l
命令的输出中,Sticky Bit在其他用户的执行权限位上显示为t
(如果其他用户有执行权限)或T
(如果其他用户没有执行权限)。三、实际用途
Setuid (SUID) :
- 实际用途:SUID常用于那些需要临时提升权限来执行特定操作的应用程序,例如
passwd
命令允许普通用户更改自己的密码,而密码文件通常需要root权限才能修改。Setgid (SGID) :
- 实际用途:SGID在可执行文件上用于让执行者以文件所属组的身份运行程序,常用于共享程序。在目录上,SGID用于确保所有用户创建的文件都属于该目录的组,便于组内用户共享文件。
Sticky Bit:
- 实际用途:Sticky Bit通常用于公共可写目录,如
/tmp
,以防止用户删除或重命名其他用户的文件,增加了系统安全性,尤其是在多用户环境中。