目录
- 前言
- 一、Linux权限管理
- 1.1 Linux用户类型
- 1.2 文件类型和访问权限
- 1.3 文件访问权限的相关设置方法
- 1.3.1 更改文件属性
- 1.3.2 更改文件角色
- 1.4 目录权限
- 1.5 权限掩码
- 1.6 粘滞位
- 总结
前言
在Linux系统中,权限是指系统用来限制和控制用户对文件和目录的访问能力的一组规则。这些规则决定了用户可以对文件或目录执行哪些操作,比如读取(read)、写入(write)、执行(execute)等。Linux系统通过权限来维护系统的安全性和数据的完整性。
一、Linux权限管理
1.1 Linux用户类型
- 超级用户(root):拥有系统中最高权限,可以执行系统级别的管理任务,访问和修改系统的所有文件和设置。
- 普通用户:由管理员创建并分配给系统的普通用户账户,具有较低的权限,只能访问和修改自己的文件和一些共享的资源。
whoami
:显示当前用户的用户名
su [用户名]
:切换用户
root@hcss-ecs-8f13:~/112# whoami
root
root@hcss-ecs-8f13:~/112# su yjz
yjz@hcss-ecs-8f13:/root/112$ whoami
yjz
yjz@hcss-ecs-8f13:/root/112$ su
Password:
root@hcss-ecs-8f13:~/112# whoami
root
root@hcss-ecs-8f13:~/112#
su后面什么都不加默认切换到超级用户下,从普通用户切换到超级用户时需要输入超级用户的密码(输入的过程是不显示的),从普通用户切换到另一个普通用户时也要输密码,而从超级用户下切换到普通用户是不需要密码的。
1.2 文件类型和访问权限
文件的基本权限分为三组:
- 所有者(User):文件的创建者或拥有者,拥有对文件的完全控制权
- 所属组(Group):与文件相关联的用户组,该组的所有成员都具有一定的权限来访问文件
- 其他用户(Others):既不是文件的所有者也不是文件的所属组成员的用户,其权限受到文件的权限设置的限制
- d:目录
- -:普通文件
- 最前面由10个字符组成,第一个字符表示文件类型,后面的九个字符按3个一组分别表示所有者、用户组和其他用户的权限
Linux权限是指对文件和目录所具有的操作权限,包括读(r)、写(w)和执行(x)权限。
权限 = 角色 + 文件的属性。 对某一个文件是否有读、写、执行权限,第一看我们的角色,第二看这个文件对于我们所扮演的这个角色是否有相应的权限。也就是说,即使我(普通用户)是这个文件的拥有者,如果这个文件没有读属性,我也不能读这个文件。
| 示例:
root@hcss-ecs-8f13:~/112# whoami
root
root@hcss-ecs-8f13:~/112# su yjz
yjz@hcss-ecs-8f13:/root/112$ whoami
yjz
yjz@hcss-ecs-8f13:/root/112$ ls -l
total 8
drwxr-xr-x 2 root root 4096 Sep 20 17:39 mydir
-rwxrwxr-x 1 root root 12 Sep 21 00:12 test.txt
yjz@hcss-ecs-8f13:/root/112$ echo "Are you ok?" > test.txt
bash: test.txt: Permission denied
yjz@hcss-ecs-8f13:/root/112$ su
Password:
root@hcss-ecs-8f13:~/112# echo "Are you ok?" > test.txt
root@hcss-ecs-8f13:~/112#
上面的示例中,文件test.txt
的拥有者是root,我们从超级用户root切换到普通用户yjz下,对于文件test.txt
,用户yjz是其他用户,而对于文件test.txt
的其他用户是没有写权限的,所以当我们以yjz的身份往文件test.txt
中写时系统提示错误,当我们重新切换到超级用户下就可以往文件test.txt
中写入了。
不过上面权限的限制仅仅针对普通用户而言,对于超级用户root,没有权限的限制。
root@hcss-ecs-8f13:~/112# ls -l
total 8
-r--rw---- 1 yjz yjz 0 Sep 21 11:39 file.txt
drwxr-xr-x 2 root root 4096 Sep 20 17:39 mydir
---------- 1 root root 12 Sep 21 11:31 test.txt
root@hcss-ecs-8f13:~/112# echo "Are you ok?" > test.txt
root@hcss-ecs-8f13:~/112# cat test.txt
Are you ok?
root@hcss-ecs-8f13:~/112# echo "hello world" >> test.txt
root@hcss-ecs-8f13:~/112# cat test.txt
Are you ok?
hello world
root@hcss-ecs-8f13:~/112#
从上面的结果我们看到,root作为文件的拥有者,即使这个文件对root没有读、写、执行权限,root依旧可以对读写;甚至,当root对某个文件而言只是other时,即使这个文件对other而言没有读、写、执行权限,root依旧可以对其读写。从这不难看出,root就是超级老大,想干什么就干什么。
| 注意:
1. 文件有可执行权限,和文件能否被执行,是两码事。
一个文件可执行,一要看这个文件对当前用户是否有可执行权限,二要这个文件就应该是个可执行文件。
就比如某个人明明有能力胜任某项工作,但领导就不给他做这个工作的机会,那他也没办法。而另一个人明明没有一点能力,但领导就点名让他去做,那领导就有点强人所难了。
2. 确定身份的过程,只能确定一次,一般顺序为拥有者、所属组、其他用户
如果某个文件的拥有者没有对这个文件的写权限,即使这个文件的所属组有写权限,而文件的拥有者也是所属组,那这个文件的拥有者依然不能对这个文件进行写入。
yjz@hcss-ecs-8f13:/root/112$ ls -l
total 8
-r--rw-r-- 1 yjz yjz 0 Sep 21 11:39 file.txt
drwxr-xr-x 2 root root 4096 Sep 20 17:39 mydir
-r---wxr-- 1 root root 12 Sep 21 11:31 test.txt
yjz@hcss-ecs-8f13:/root/112$ echo "Are you ok?" > file.txt
bash: file.txt: Permission denied
yjz@hcss-ecs-8f13:/root/112$
1.3 文件访问权限的相关设置方法
1.3.1 更改文件属性
更改文件权限,可以更改访问者的角色,也可以更改文件对于某类用户的权限。
- chmod:设置文件的访问权限,只有文件的拥有者和root才能修改文件的访问权限
用户符号:
- u:拥有者
- g:所属组
- o:其他用户
- a:所有用户
| 示例:
chmod u+x file
:使文件file的拥有者具有执行权限chmod g+wx file
:使文件file的所属组具有写、执行权限chmod o-rwx file
:撤去文件file的其他用户的读、写、执行权限chmod a+rwx file
:使文件file的拥有者、所属组、其他用户都具有读、写、执行权限
root@hcss-ecs-8f13:~/112# ls -l
total 8
drwxr-xr-x 2 root root 4096 Sep 20 17:39 mydir
-rw-r--r-- 1 root root 12 Sep 20 23:10 test.txt
root@hcss-ecs-8f13:~/112# chmod u+x test.txt
root@hcss-ecs-8f13:~/112# ls -l
total 8
drwxr-xr-x 2 root root 4096 Sep 20 17:39 mydir
-rwxr--r-- 1 root root 12 Sep 20 23:10 test.txt
root@hcss-ecs-8f13:~/112# chmod g+wx test.txt
root@hcss-ecs-8f13:~/112# ls -l
total 8
drwxr-xr-x 2 root root 4096 Sep 20 17:39 mydir
-rwxrwxr-- 1 root root 12 Sep 20 23:10 test.txt
root@hcss-ecs-8f13:~/112# chmod a-rwx test.txt
root@hcss-ecs-8f13:~/112# ls -l
total 8
drwxr-xr-x 2 root root 4096 Sep 20 17:39 mydir
---------- 1 root root 12 Sep 20 23:10 test.txt
root@hcss-ecs-8f13:~/112# chmod a+rwx test.txt
root@hcss-ecs-8f13:~/112# ls -l
total 8
drwxr-xr-x 2 root root 4096 Sep 20 17:39 mydir
-rwxrwxrwx 1 root root 12 Sep 20 23:10 test.txt
root@hcss-ecs-8f13:~/112#
通过上面的示例我们不难看出,不管是拥有者、所属组、还是其他用户,r、w、x所对应的位置是不变的,所以我们也可以用8进制的数字来表示用户的权限。
例如: 对某一个文件来说,它的拥有者有读、写权限,没有执行权限,则对应的二进制为110,转换为8进制为6;它的所属组只有执行权限,没有读、写权限,则对应的二进制为001,转换为8进制为1;它的其他用户只有写权限,没有读、执行权限,则对应的二进制为100,转换为8进制为4。
root@hcss-ecs-8f13:~/112# ls -l
total 8
drwxr-xr-x 2 root root 4096 Sep 20 17:39 mydir
-r--r--r-- 1 root root 12 Sep 21 00:24 test.txt
root@hcss-ecs-8f13:~/112# chmod 614 test.txt
root@hcss-ecs-8f13:~/112# ls -l
total 8
drwxr-xr-x 2 root root 4096 Sep 20 17:39 mydir
-rw---xr-- 1 root root 12 Sep 21 00:24 test.txt
root@hcss-ecs-8f13:~/112#
| 示例:
chmod 555 test.txt
:文件的拥有者、所属组、其他用户都有读、执行权限,都没有写权限chmod 777 test.txt
:文件的拥有者、所属组、其他用户都有读、写、执行权限chmod 444 test.txt
:文件的拥有者、所属组、其他用户都只有读权限
root@hcss-ecs-8f13:~/112# ls -l
total 8
drwxr-xr-x 2 root root 4096 Sep 20 17:39 mydir
-rwxrwxr-x 1 root root 12 Sep 21 00:24 test.txt
root@hcss-ecs-8f13:~/112# chmod 555 test.txt
root@hcss-ecs-8f13:~/112# ls -l
total 8
drwxr-xr-x 2 root root 4096 Sep 20 17:39 mydir
-r-xr-xr-x 1 root root 12 Sep 21 00:24 test.txt
root@hcss-ecs-8f13:~/112# chmod 777 test.txt
root@hcss-ecs-8f13:~/112# ls -l
total 8
drwxr-xr-x 2 root root 4096 Sep 20 17:39 mydir
-rwxrwxrwx 1 root root 12 Sep 21 00:24 test.txt
root@hcss-ecs-8f13:~/112# chmod 444 test.txt
root@hcss-ecs-8f13:~/112# ls -l
total 8
drwxr-xr-x 2 root root 4096 Sep 20 17:39 mydir
-r--r--r-- 1 root root 12 Sep 21 00:24 test.txt
root@hcss-ecs-8f13:~/112#
1.3.2 更改文件角色
一般只有root和文件拥有者才能决定文件的拥有权。
- chown:更改文件的拥有者
- chgrp:更改文件的所属组
root@hcss-ecs-8f13:~/112# chown yjz test.txt
root@hcss-ecs-8f13:~/112# ls -l
total 8
-r--rw---- 1 yjz yjz 0 Sep 21 11:39 file.txt
drwxr-xr-x 2 root root 4096 Sep 20 17:39 mydir
---------- 1 yjz root 24 Sep 25 14:22 test.txt
root@hcss-ecs-8f13:~/112# chgrp yjz test.txt
root@hcss-ecs-8f13:~/112# ls -l
total 8
-r--rw---- 1 yjz yjz 0 Sep 21 11:39 file.txt
drwxr-xr-x 2 root root 4096 Sep 20 17:39 mydir
---------- 1 yjz yjz 24 Sep 25 14:22 test.txt
root@hcss-ecs-8f13:~/112#
我们可以用chown yjz:yjz test.txt
的形式一次性将文件的拥有者和所属组更改。
root@hcss-ecs-8f13:~/112# ls -l
total 8
-r--rw---- 1 yjz yjz 0 Sep 21 11:39 file.txt
drwxr-xr-x 2 root root 4096 Sep 20 17:39 mydir
---------- 1 root root 24 Sep 25 14:22 test.txt
root@hcss-ecs-8f13:~/112# chown yjz:yjz test.txt
root@hcss-ecs-8f13:~/112# ls -l
total 8
-r--rw---- 1 yjz yjz 0 Sep 21 11:39 file.txt
drwxr-xr-x 2 root root 4096 Sep 20 17:39 mydir
---------- 1 yjz yjz 24 Sep 25 14:22 test.txt
root@hcss-ecs-8f13:~/112#
此时文件test.txt
的拥有者和所属组都是yjz,那root将文件给了yjz,yjz可以还回去吗?或者yjz可以把文件给其他普通用户吗?
root@hcss-ecs-8f13:~/112# su yjz
yjz@hcss-ecs-8f13:/root/112$ ls -l
total 8
-r--rw---- 1 yjz yjz 0 Sep 21 11:39 file.txt
drwxr-xr-x 2 root root 4096 Sep 20 17:39 mydir
---------- 1 yjz yjz 24 Sep 25 14:22 test.txt
yjz@hcss-ecs-8f13:/root/112$ chown root test.txt
chown: changing ownership of 'test.txt': Operation not permitted
yjz@hcss-ecs-8f13:/root/112$ chown xiaoyang test.txt
chown: changing ownership of 'test.txt': Operation not permitted
yjz@hcss-ecs-8f13:/root/112$
答案是:不可以。
作为文件的普通拥有者,我们可以更改文件的r、w、x权限,因为这个文件本身就是我的,但是这个文件的拥有权不是我能决定的,一个文件属于谁只有超级用户root说了算。
1.4 目录权限
不只有普通文件有权限的限制,目录(文件夹)也有权限的限制。通过我们平时的观察,目录的权限也是r、w、x,它们分别是表示什么呢?
yjz@hcss-ecs-8f13:~$ ls -l
total 4
drwxrwxr-x 2 yjz yjz 4096 Sep 25 21:09 dir
yjz@hcss-ecs-8f13:~$ chmod u-r dir
yjz@hcss-ecs-8f13:~$ ls -l
total 4
d-wxrwxr-x 2 yjz yjz 4096 Sep 25 21:09 dir
yjz@hcss-ecs-8f13:~$ cd dir
yjz@hcss-ecs-8f13:~/dir$ ls
ls: cannot open directory '.': Permission denied
yjz@hcss-ecs-8f13:~/dir$ chmod u+r,u-w ../dir
yjz@hcss-ecs-8f13:~/dir$ ls -l ../
total 4
dr-xrwxr-x 2 yjz yjz 4096 Sep 25 21:09 dir
yjz@hcss-ecs-8f13:~/dir$ pwd
/home/yjz/dir
yjz@hcss-ecs-8f13:~/dir$ ls
file1.txt file2.txt
yjz@hcss-ecs-8f13:~/dir$ > file3.txt
bash: file3.txt: Permission denied
yjz@hcss-ecs-8f13:~/dir$ rm file1.txt
rm: cannot remove 'file1.txt': Permission denied
yjz@hcss-ecs-8f13:~/dir$ cd ../
yjz@hcss-ecs-8f13:~$ ls -l
total 4
dr-xrwxr-x 2 yjz yjz 4096 Sep 25 21:09 dir
yjz@hcss-ecs-8f13:~$ chmod u+w,u-x dir
yjz@hcss-ecs-8f13:~$ ls -l
total 4
drw-rwxr-x 2 yjz yjz 4096 Sep 25 21:09 dir
yjz@hcss-ecs-8f13:~$ pwd
/home/yjz
yjz@hcss-ecs-8f13:~$ touch file3.txt dir
yjz@hcss-ecs-8f13:~$ ls dir
ls: cannot access 'dir/file2.txt': Permission denied
ls: cannot access 'dir/file1.txt': Permission denied
file1.txt file2.txt
yjz@hcss-ecs-8f13:~$ cd dir
bash: cd: dir: Permission denied
yjz@hcss-ecs-8f13:~$ ls -l
total 4
drw-rwxr-x 2 yjz yjz 4096 Sep 25 21:14 dir
-rw-rw-r-- 1 yjz yjz 0 Sep 25 21:14 file3.txt
yjz@hcss-ecs-8f13:~$
通过上面的测试我们可以得出:
- r:查看目录的权限
- w:在当前目录下新建、删除、更改文件的权限
- x:进入目录的权限
注意:
- 目录的权限和普通文件的权限我们要分清楚,目录没有写权限,不代表目录下的文件不能读、写、执行。
- 目录对当前用户没有x权限,而这个目录下又有文件,即使这个目录对当前用户有w权限,用
rm -rf dir
也不能删除目录。这是因为删除目录要递归式(-r)删除,而目录对当前用户没有x权限的话就进不去目录,所以删除不了;但是如果目录下没有文件的话,就能删除
yjz@hcss-ecs-8f13:~$ ls -l
total 4
drw-rwxr-x 2 yjz yjz 4096 Sep 25 21:43 dir
yjz@hcss-ecs-8f13:~$ rm -rf dir
rm: cannot remove 'dir/test.txt': Permission denied
yjz@hcss-ecs-8f13:~$ chmod u+x dir
yjz@hcss-ecs-8f13:~$ ls -l
total 4
drwxrwxr-x 2 yjz yjz 4096 Sep 25 21:43 dir
yjz@hcss-ecs-8f13:~$ rm -rf dir
yjz@hcss-ecs-8f13:~$ ls -l
total 0
yjz@hcss-ecs-8f13:~$ mkdir dir
yjz@hcss-ecs-8f13:~$ ls -l
total 4
drwxrwxr-x 2 yjz yjz 4096 Sep 25 21:47 dir
yjz@hcss-ecs-8f13:~$ chmod u-x dir
yjz@hcss-ecs-8f13:~$ ls -l
total 4
drw-rwxr-x 2 yjz yjz 4096 Sep 25 21:47 dir
yjz@hcss-ecs-8f13:~$ rm -rf dir
yjz@hcss-ecs-8f13:~$
1.5 权限掩码
不知道你有没有细心观察过我们新建的目录或文件它默认的权限是怎样的呢?
yjz@hcss-ecs-8f13:~$ ls -l
total 0
yjz@hcss-ecs-8f13:~$ pwd
/home/yjz
yjz@hcss-ecs-8f13:~$ mkdir dir
yjz@hcss-ecs-8f13:~$ touch file.txt
yjz@hcss-ecs-8f13:~$ ls -l
total 4
drwxrwxr-x 2 yjz yjz 4096 Sep 25 21:53 dir
-rw-rw-r-- 1 yjz yjz 0 Sep 25 21:53 file.txt
yjz@hcss-ecs-8f13:~$
可以看到新建的目录默认权限是775,而新建的普通文件默认权限是664,这是为什么呢?
其实目录的起始权限是777,而普通文件的起始权限是666,至于为什么又变成了775和664,正是因为权限掩码的关系。
权限掩码(umask)用于定义新创建的文件或目录的默认权限,一般是0002。
最终权限 = 起始权限 & (~umask)
当在Linux中创建文件或目录时,系统会先根据umask值来决定哪些权限位应该被取消,而权限掩码是可以更改的:
yjz@hcss-ecs-8f13:~$ umask 000
yjz@hcss-ecs-8f13:~$ ls -l
total 4
drwxrwxr-x 2 yjz yjz 4096 Sep 25 21:53 dir
-rw-rw-r-- 1 yjz yjz 0 Sep 25 21:53 file.txt
yjz@hcss-ecs-8f13:~$ mkdir testdir
yjz@hcss-ecs-8f13:~$ touch testfile.txt
yjz@hcss-ecs-8f13:~$ ls -l
total 8
drwxrwxr-x 2 yjz yjz 4096 Sep 25 21:53 dir
-rw-rw-r-- 1 yjz yjz 0 Sep 25 21:53 file.txt
drwxrwxrwx 2 yjz yjz 4096 Sep 25 22:10 testdir
-rw-rw-rw- 1 yjz yjz 0 Sep 25 22:11 testfile.txt
yjz@hcss-ecs-8f13:~$
当我们把umask修改为000后,再新建的目录默认权限就成了777,新建的普通文件的默认权限就成了666。
权限掩码会直接影响到新创建文件和目录的默认权限,所以修改umask要慎重考虑。
1.6 粘滞位
什么是粘滞位呢?这里先买个关子,我们知道普通用户都在home目录下,那普通用户自己的家目录默认权限是怎样的呢?
yjz@hcss-ecs-8f13:/home$ ls /home -l
total 8
drwxr-x--- 2 xiaoyang xiaoyang 4096 Sep 21 11:59 xiaoyang
drwxr-x--- 4 yjz yjz 4096 Sep 25 22:14 yjz
yjz@hcss-ecs-8f13:/home$
可以看到普通用户自己的家目录对其他用户什么权限都没有,对所属组也没有写权限。
如果现在有这么一个情景,因为工作需求yjz和xiaoyang需要共享一个目录,那这个项目的负责人应该把这个目录建在哪儿呢?建在他们任何一个人的家目录下都不行,因为家目录是比较隐私的,其他用户一般不能进入、操作别人的家目录。
可以考虑将目录建在根目录下,然后放开这个目录对其他用户的读、写、执行权限。
通常只有root用户才能在Linux系统的根目录下新建目录和文件。
root@hcss-ecs-8f13:/# mkdir share_dir
root@hcss-ecs-8f13:/# ls -l
total 72
lrwxrwxrwx 1 root root 7 Aug 9 2022 bin -> usr/bin
drwxr-xr-x 3 root root 4096 Jul 7 12:15 boot
drwxr-xr-x 7 root root 4096 Jul 7 12:15 CloudrResetPwdAgent
drwxr-xr-x 19 root root 3960 Sep 16 14:41 dev
drwxr-xr-x 108 root root 4096 Sep 21 00:17 etc
drwxr-xr-x 4 root root 4096 Sep 21 00:16 home
lrwxrwxrwx 1 root root 7 Aug 9 2022 lib -> usr/lib
lrwxrwxrwx 1 root root 9 Aug 9 2022 lib32 -> usr/lib32
lrwxrwxrwx 1 root root 9 Aug 9 2022 lib64 -> usr/lib64
lrwxrwxrwx 1 root root 10 Aug 9 2022 libx32 -> usr/libx32
drwx------ 2 root root 16384 Jul 7 11:14 lost+found
drwxr-xr-x 2 root root 4096 Aug 9 2022 media
drwxr-xr-x 2 root root 4096 Aug 9 2022 mnt
drwxr-xr-x 2 root root 4096 Aug 9 2022 opt
dr-xr-xr-x 209 root root 0 Sep 16 14:41 proc
drwx------ 7 root root 4096 Sep 25 14:18 root
drwxr-xr-x 35 root root 960 Sep 25 14:18 run
lrwxrwxrwx 1 root root 8 Aug 9 2022 sbin -> usr/sbin
drwxr-xr-x 2 root root 4096 Sep 25 22:45 share_dir
drwxr-xr-x 6 root root 4096 Aug 9 2022 snap
drwxr-xr-x 2 root root 4096 Aug 9 2022 srv
dr-xr-xr-x 13 root root 0 Sep 16 14:41 sys
drwxrwxrwt 14 root root 4096 Sep 25 22:31 tmp
drwxr-xr-x 14 root root 4096 Aug 9 2022 usr
drwxr-xr-x 13 root root 4096 Aug 9 2022 var
root@hcss-ecs-8f13:/# chmod o+w share_dir
root@hcss-ecs-8f13:/# ls -l
total 72
lrwxrwxrwx 1 root root 7 Aug 9 2022 bin -> usr/bin
drwxr-xr-x 3 root root 4096 Jul 7 12:15 boot
drwxr-xr-x 7 root root 4096 Jul 7 12:15 CloudrResetPwdAgent
drwxr-xr-x 19 root root 3960 Sep 16 14:41 dev
drwxr-xr-x 108 root root 4096 Sep 21 00:17 etc
drwxr-xr-x 4 root root 4096 Sep 21 00:16 home
lrwxrwxrwx 1 root root 7 Aug 9 2022 lib -> usr/lib
lrwxrwxrwx 1 root root 9 Aug 9 2022 lib32 -> usr/lib32
lrwxrwxrwx 1 root root 9 Aug 9 2022 lib64 -> usr/lib64
lrwxrwxrwx 1 root root 10 Aug 9 2022 libx32 -> usr/libx32
drwx------ 2 root root 16384 Jul 7 11:14 lost+found
drwxr-xr-x 2 root root 4096 Aug 9 2022 media
drwxr-xr-x 2 root root 4096 Aug 9 2022 mnt
drwxr-xr-x 2 root root 4096 Aug 9 2022 opt
dr-xr-xr-x 209 root root 0 Sep 16 14:41 proc
drwx------ 7 root root 4096 Sep 25 14:18 root
drwxr-xr-x 35 root root 960 Sep 25 14:18 run
lrwxrwxrwx 1 root root 8 Aug 9 2022 sbin -> usr/sbin
drwxr-xrwx 2 root root 4096 Sep 25 22:45 share_dir
drwxr-xr-x 6 root root 4096 Aug 9 2022 snap
drwxr-xr-x 2 root root 4096 Aug 9 2022 srv
dr-xr-xr-x 13 root root 0 Sep 16 14:41 sys
drwxrwxrwt 14 root root 4096 Sep 25 22:31 tmp
drwxr-xr-x 14 root root 4096 Aug 9 2022 usr
drwxr-xr-x 13 root root 4096 Aug 9 2022 var
root@hcss-ecs-8f13:/#
现在yjz和xiaoyang就可以共享这个目录了。yjz和xiaoyang都可以在这个目录下新建文件等操作,yjz新建的普通文件默认对xiaoyang这个其他用户只有r权限,yjz在他新建的文件中写的东西xiaoyang也能看到。
但某天yjz和xiaoyang突然闹矛盾了,yjz就打算不让xiaoyang查看他的文件了,等xiaoyang发现yjz把他拉黑了后,xiaoyang干脆心一横把yjz的这个文件给删了,那闹到这种地步就出事了,无论怎样xiaoyang也不该删除yjz的文件,因为文件毕竟是人家的。
xiaoyang能删除yjz的文件是因为这个文件是在共享目录share_dir下,share_dir目录对其他用户的权限是能进入、能查看、能修改。
xiaoyang@hcss-ecs-8f13:/share_dir$ ls -l
total 0
-rw-rw-r-- 1 yjz yjz 0 Sep 25 22:58 file1.txt
-rw-rw-r-- 1 xiaoyang xiaoyang 0 Sep 25 22:58 file2.txt
xiaoyang@hcss-ecs-8f13:/share_dir$ su yjz
Password:
yjz@hcss-ecs-8f13:/share_dir$ echo "Are you ok?" >> file1.txt
yjz@hcss-ecs-8f13:/share_dir$ cat file1.txt
Are you ok?
yjz@hcss-ecs-8f13:/share_dir$ su xiaoyang
Password:
xiaoyang@hcss-ecs-8f13:/share_dir$ cat file1.txt
Are you ok?
xiaoyang@hcss-ecs-8f13:/share_dir$ su yjz
Password:
yjz@hcss-ecs-8f13:/share_dir$ chmod o-r file1.txt
yjz@hcss-ecs-8f13:/share_dir$ su xiaoyang
Password:
xiaoyang@hcss-ecs-8f13:/share_dir$ ls -l
total 4
-rw-rw---- 1 yjz yjz 12 Sep 25 23:07 file1.txt
-rw-rw-r-- 1 xiaoyang xiaoyang 0 Sep 25 22:58 file2.txt
xiaoyang@hcss-ecs-8f13:/share_dir$ cat file1.txt
cat: file1.txt: Permission denied
xiaoyang@hcss-ecs-8f13:/share_dir$ rm file1.txt
rm: remove write-protected regular file 'file1.txt'? y
xiaoyang@hcss-ecs-8f13:/share_dir$ ls -l
total 0
-rw-rw-r-- 1 xiaoyang xiaoyang 0 Sep 25 22:58 file2.txt
xiaoyang@hcss-ecs-8f13:/share_dir$
所以现在我们的需求是,既要这个目录允许其他用户进入,能读、能写,还要求不能删除别人的文件。为了防止出现类似这种事故,粘滞位就出现了。
设置粘滞位:chmod +t 文件名
取消粘滞位: chmod -t 文件名
root@hcss-ecs-8f13:/# ls -l
total 72
lrwxrwxrwx 1 root root 7 Aug 9 2022 bin -> usr/bin
drwxr-xr-x 3 root root 4096 Jul 7 12:15 boot
drwxr-xr-x 7 root root 4096 Jul 7 12:15 CloudrResetPwdAgent
drwxr-xr-x 19 root root 3960 Sep 16 14:41 dev
drwxr-xr-x 108 root root 4096 Sep 21 00:17 etc
drwxr-xr-x 4 root root 4096 Sep 21 00:16 home
lrwxrwxrwx 1 root root 7 Aug 9 2022 lib -> usr/lib
lrwxrwxrwx 1 root root 9 Aug 9 2022 lib32 -> usr/lib32
lrwxrwxrwx 1 root root 9 Aug 9 2022 lib64 -> usr/lib64
lrwxrwxrwx 1 root root 10 Aug 9 2022 libx32 -> usr/libx32
drwx------ 2 root root 16384 Jul 7 11:14 lost+found
drwxr-xr-x 2 root root 4096 Aug 9 2022 media
drwxr-xr-x 2 root root 4096 Aug 9 2022 mnt
drwxr-xr-x 2 root root 4096 Aug 9 2022 opt
dr-xr-xr-x 186 root root 0 Sep 16 14:41 proc
drwx------ 7 root root 4096 Sep 26 07:06 root
drwxr-xr-x 35 root root 960 Sep 26 07:06 run
lrwxrwxrwx 1 root root 8 Aug 9 2022 sbin -> usr/sbin
drwxr-xrwx 2 root root 4096 Sep 25 23:09 share_dir
drwxr-xr-x 6 root root 4096 Aug 9 2022 snap
drwxr-xr-x 2 root root 4096 Aug 9 2022 srv
dr-xr-xr-x 13 root root 0 Sep 16 14:41 sys
drwxrwxrwt 14 root root 4096 Sep 26 06:29 tmp
drwxr-xr-x 14 root root 4096 Aug 9 2022 usr
drwxr-xr-x 13 root root 4096 Aug 9 2022 var
root@hcss-ecs-8f13:/# chmod +t share_dir
root@hcss-ecs-8f13:/# ls -l
total 72
lrwxrwxrwx 1 root root 7 Aug 9 2022 bin -> usr/bin
drwxr-xr-x 3 root root 4096 Jul 7 12:15 boot
drwxr-xr-x 7 root root 4096 Jul 7 12:15 CloudrResetPwdAgent
drwxr-xr-x 19 root root 3960 Sep 16 14:41 dev
drwxr-xr-x 108 root root 4096 Sep 21 00:17 etc
drwxr-xr-x 4 root root 4096 Sep 21 00:16 home
lrwxrwxrwx 1 root root 7 Aug 9 2022 lib -> usr/lib
lrwxrwxrwx 1 root root 9 Aug 9 2022 lib32 -> usr/lib32
lrwxrwxrwx 1 root root 9 Aug 9 2022 lib64 -> usr/lib64
lrwxrwxrwx 1 root root 10 Aug 9 2022 libx32 -> usr/libx32
drwx------ 2 root root 16384 Jul 7 11:14 lost+found
drwxr-xr-x 2 root root 4096 Aug 9 2022 media
drwxr-xr-x 2 root root 4096 Aug 9 2022 mnt
drwxr-xr-x 2 root root 4096 Aug 9 2022 opt
dr-xr-xr-x 185 root root 0 Sep 16 14:41 proc
drwx------ 7 root root 4096 Sep 26 07:06 root
drwxr-xr-x 35 root root 960 Sep 26 07:06 run
lrwxrwxrwx 1 root root 8 Aug 9 2022 sbin -> usr/sbin
drwxr-xrwt 2 root root 4096 Sep 25 23:09 share_dir
drwxr-xr-x 6 root root 4096 Aug 9 2022 snap
drwxr-xr-x 2 root root 4096 Aug 9 2022 srv
dr-xr-xr-x 13 root root 0 Sep 16 14:41 sys
drwxrwxrwt 14 root root 4096 Sep 26 06:29 tmp
drwxr-xr-x 14 root root 4096 Aug 9 2022 usr
drwxr-xr-x 13 root root 4096 Aug 9 2022 var
root@hcss-ecs-8f13:/# su yjz
yjz@hcss-ecs-8f13:/$ cd /share_dir
yjz@hcss-ecs-8f13:/share_dir$ > file1.txt
yjz@hcss-ecs-8f13:/share_dir$ echo "Are you ok?" >> file1.txt
yjz@hcss-ecs-8f13:/share_dir$ su xiaoyang
Password:
xiaoyang@hcss-ecs-8f13:/share_dir$ pwd
/share_dir
xiaoyang@hcss-ecs-8f13:/share_dir$ > file2.txt
xiaoyang@hcss-ecs-8f13:/share_dir$ echo "Thank you" >> file2.txt
xiaoyang@hcss-ecs-8f13:/share_dir$ ls -l
total 8
-rw-rw-r-- 1 yjz yjz 12 Sep 26 07:14 file1.txt
-rw-rw-r-- 1 xiaoyang xiaoyang 10 Sep 26 07:16 file2.txt
xiaoyang@hcss-ecs-8f13:/share_dir$ cat file1.txt
Are you ok?
xiaoyang@hcss-ecs-8f13:/share_dir$ cat file2.txt
Thank you
xiaoyang@hcss-ecs-8f13:/share_dir$ rm file1.txt
rm: remove write-protected regular file 'file1.txt'? y
rm: cannot remove 'file1.txt': Operation not permitted
xiaoyang@hcss-ecs-8f13:/share_dir$ rm file2.txt
xiaoyang@hcss-ecs-8f13:/share_dir$ ls -l
total 4
-rw-rw-r-- 1 yjz yjz 12 Sep 26 07:14 file1.txt
xiaoyang@hcss-ecs-8f13:/share_dir$
其实系统已经帮我们建了一个可以用来共享的目录tmp:
| /tmp 目录的主要用途包括:
- 存放临时文件: 程序在执行过程中可能会生成一些临时文件,这些文件不需要永久保存,因此可以存放在 /tmp 目录下
- 共享临时空间: 由于 /tmp 对所有用户都是可访问的,因此它可以作为不同用户或程序之间共享临时数据的场所
- 系统重启后自动清理: 如前所述,/tmp 目录的内容在系统重启后通常会被清空,这有助于保持系统的整洁,并防止因旧文件积累而导致的潜在问题
| 当一个目录被设置为粘滞位,则该目录下的文件只能由:
1. 超级用户删除
2. 该目录所有者删除
3. 该文件所有者删除
总结
- 目录的可执行权限是表示你可否在目录下执行命令
- 如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目录,即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
- 而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限
- 所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档
本篇文章的分享就到这里了,如果您觉得在本文有所收获,还请留下您的三连支持哦~