4.6 KiB
4.6 KiB
title | date | tags | draft | |||
---|---|---|---|---|---|---|
Linux 文件系统中的权限 | 2021-09-29T22:01:00+08:00 |
|
false |
常规权限
读权限(r)
- 对文件来说, 就是文件的读取权限, 如
cat
. - 对目录来说, 就是查询目录下文件结构的权限, 如
ls
.
写权限(w)
- 对文件来说, 就是文件的写入权限, 如重定向输出到这个文件.
- 对目录来说, 就是修改此目录下的文件结构的权限, 包括创建文件/删除文件/移动文件.
执行权限(x)
- 对文件来说, 就是文件的执行权限.
- 对于目录来说, 就是进入此目录的权限, 并控制访问此目录中的其他文件或目录的权限, 若无此权限, 则目录的读写权限也会受到影响.
下面为一些各种情况下进行操作的示例. 可以发现没有 x 权限时, r 权限只能列出目录的文件名称, 不能得知其权限和修改时间等信息; w 权限无法在目录中创建文件; 无法对目录中的文件的内容进行读取或修改.
仅有 x 权限时, 不能读取目录内文件的名称, 不能在目录中创建或删除文件, 但是可以获取文件的权限信息, 可以修改目录中其他文件的内容.
$ ls -l
dr-------- 2 leafee98 leafee 4096 Sep 29 20:57 dir
$ ls -l dir
ls: cannot access 'dir/a': Permission denied
-????????? ? ? ? ? ? a
......
......
$ ls -l
d-w------- 2 leafee98 leafee 4096 Sep 29 20:57 dir
$ touch dir/b
touch: cannot touch 'dir/b': Permission denied
......
......
$ ls -l
drw------- 2 leafee98 leafee 4096 Sep 29 20:57 dir
$ echo "nya~" > dir/a
zsh: permission denied: dir/a
$ cat dir/a
cat: dir/a: Permission denied
......
......
$ ls -l
d--x------ 2 leafee98 leafee 4096 Sep 29 20:57 dir
$ ls -l dir
ls: cannot open directory 'dir': Permission denied
$ echo "miao~" > dir/a ; cat dir/a
miao~
$ rm dir/a
rm: cannot remove 'dir/a': Permission denied
$ touch dir/z
touch: cannot touch 'dir/z': Permission denied
$ ls -l dir/a
-rw-r--r-- 1 leafee98 leafee 6 Sep 29 21:18 dir/a
特殊权限
用户特殊权限(SUID user+s)
- 标记到文件(file)时, 此文件在运行时, 会以文件属主的身份运行.
- 标记到目录(directory)时, 不会有其他的作用.
如命令 sudo
就是属主为 root 的添加 SUID 标记的可执行文件.
$ ls -l /usr/bin/sudo
-rwsr-xr-x 1 root root 223536 Sep 22 14:19 /usr/bin/sudo
组特殊权限(SGID group+s)
- 标记到文件时, 文件在运行时会以文件属组的身份运行.
- 标记到目录, 所有在此目录下创建的文件, 其属组均会变为该目录的属组. (移动文件至此目录下属组不会改变)
$ sudo chmod g+s dir ; ls -l
drwsrwsrwx 2 mail daemon 4096 Sep 29 21:40 dir
$ touch file ; mv file dir/
$ touch dir/file2
$ ls -l dir
-rw-r--r-- 1 leafee98 leafee 0 Sep 29 21:35 file
-rw-r--r-- 1 leafee98 daemon 0 Sep 29 21:35 file2
沾滞位(STICKY other+t)
- 标记到文件时, 不会产生任何效果.
- 标记到目录时, 对于此目录下的所有文件, 将仅有这些文件的属主分别对其有删除权限.
$ sudo chmod o+t dir ; ls -l
drwxrwxrwt 2 mail daemon 4096 Sep 29 21:38 dir
$ touch file1 file2 ; sudo chown mail file2 ; ls -l
-rw-r--r-- 1 leafee98 daemon 0 Sep 29 21:38 file1
-rw-r--r-- 1 mail daemon 0 Sep 29 21:38 file2
$ rm file1 file2 ; ls -l
rm: cannot remove 'file2': Operation not permitted
-rw-r--r-- 1 mail leafee 0 Sep 29 21:38 file2
在命令中使用
chmod 中的标记
常规权限的 r 为 4, w 为 2, x 为 1. 且分别对应属主(或称为用户 user), 属组(group), 其他(other).
$ chmod o+w file
$ chmod g-x file
$ chmod 755 file
特殊权限的 SUID 为 4, SGID 为 2, STICKY 为 1, 且数字表示权限时不与常规权限同时计算.
$ chmod u+s file
$ chmod g-s file
$ chmod o+t file
$ chmod 6755 file
ls 命令中的标记
特殊权限在 ls 命令的输出中会占据常规权限 x 的位置, 如果原来文件或目录已经具有 x 权限, 则新添加的 SUID, SGID, STICKY 会以小写字母 s 或 t 占在相应位置. 如果原来文件或目录不具有 x 权限, 则出现在相应位置的字母会是大写形式.
$ sudo chmod 7777 dir ; ls -l
drwsrwsrwt 2 mail daemon 4096 Sep 29 21:40 dir
$ sudo chmod 7666 dir ; ls -l
drwSrwSrwT 2 mail daemon 4096 Sep 29 21:40 dir