在 Linux 中,权限用于控制用户对文件和目录的访问和操作。
权限的分类:
Linux 中的每个文件和目录都有三种基本权限:读(r)、写(w)和执行(x),分别对应数字表示 4、2、1。同时存在三种访问级别,即文件的拥有者(user)、所属组(group)和其他用户(other)。
文件权限的含义:
- 读(r):对文件而言,可以读取文件内容;对目录来说,可以列出目录中的文件列表。
- 写(w):对文件而言,可以修改或删除文件内容;对目录而言,可以在该目录中创建、删除文件。
- 执行(x):如果是文件,可以运行(比如二进制文件或脚本);如果是目录,可以使用 cd 命令进入该目录。
目录权限的含义:
- 可读(r)权限:如果目录没有可读权限,则无法用 ls 等命令查看目录中的文件内容。
- 可写(w)权限:如果目录没有可写权限,则无法在目录中创建文件,也无法在目录中删除文件。
- 可执行(x)权限:如果目录没有可执行权限,则无法 cd 到目录中。
查看权限:使用 ls -l 命令或ll命令可以查看文件和目录的详细权限信息。
例如: -rw-r--r-- 1 root root 0 10 月 11 06:12 anaconda-ks.cfg ,其中 rw-r--r-- 表示权限,第一位 - 表示文件类型(普通文件),后面每三个字符一组,分别对应拥有者、所属组和其他用户的权限。
修改权限:使用 chmod 指令来设置文件的访问权限。只有文件的拥有者和 root 用户才能改变文件的权限。其用法为: chmod (参数) (权限) (文件或目录) 。
参数包括:
- u :表示拥有者(user)。
- g :表示所属组(group)。
- o :表示其他用户(other)。
- a :表示所有用户(all)。
权限可以用字符或八进制数字表示:
- 字符表示: r (读)、 w (写)、 x (执行),若要去掉相应权限则用 - 。例如, chmod u-rwx 文件名 表示去掉文件拥有者的所有权限; chmod a+r 文件名 表示增加所有用户的读权限; chmod u+x,g-w 文件名 表示去掉拥有者的执行权限,增加所属组的读权限。
- 八进制表示:将每个权限位的数字相加。例如, 7 ( 4 + 2 + 1 )表示 rwx 权限, 6 ( 4 + 2 )表示 rw-权限, 5 ( 4 + 1 )表示 r-x 权限等。如 chmod 755 文件名 可将文件权限设置为 rwxr-xr-x。
更改文件拥有者:使用 chown 指令,用法为: chown (用户名) (文件名) 。只有 root 用户才能更改文件的拥有者。
更改文件所属组:使用 chgrp 指令,用法为: chgrp (所属组名) (文件名) 。通常 root 用户或文件的拥有者(且必须是组成员)可以更改文件的所属组。
也可以同时更改文件的拥有者和所属组,中间加冒号,如: chown 用户名:所属组名 文件名 。
默认权限:
Linux 中文件的起始权限,普通文件为 0666,目录文件为 0777。但实际上看到的文件权限并非如此,普通文件的权限是 0664,目录文件的权限是 0775,这是因为创建文件或目录时还要受 umask 的影响。
umask 是权限掩码,可以使用 umask 命令查看当前用户的 umask 值。umask 中权限为 1 的位对应的起始权限就要变为 0。例如,普通用户的 umask 值为 0002,则新建文件的权限为 666 - 002 = 664(rw-r--r--),新建目录的权限为 777 - 002 = 775(rwxr-xr-x)。
还可以使用 umask 命令更改掩码,但仅在本次登录有效。
粘滞位:
当一个目录的拥有者允许其他用户在目录内创建或修改文件时(即目录具有写权限),其他用户可能会随意删除目录内的文件,不论其是否具有文件的写权限。
为解决这个问题,Linux 引入了粘滞位。使用 chmod o+t 目录 命令设置粘滞位后,该目录下的文件只能由 root 用户、该文件的拥有者或目录的拥有者删除。
例如,Linux 系统下 /tmp 目录就设置了粘滞位,用于存放多用户的临时文件,用户可以更改自己的临时文件,而无法更改其他用户的临时文件。