目录
前言一、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# whoamirootroot@hcss-ecs-8f13:~/112# su yjzyjz@hcss-ecs-8f13:/root/112$ whoamiyjzyjz@hcss-ecs-8f13:/root/112$ suPassword: root@hcss-ecs-8f13:~/112# whoamirootroot@hcss-ecs-8f13:~/112#
su后面什么都不加默认切换到超级用户下,从普通用户切换到超级用户时需要输入超级用户的密码(输入的过程是不显示的),从普通用户切换到另一个普通用户时也要输密码,而从超级用户下切换到普通用户是不需要密码的。
1.2 文件类型和访问权限
文件的基本权限分为三组:
所有者(User):文件的创建者或拥有者,拥有对文件的完全控制权所属组(Group):与文件相关联的用户组,该组的所有成员都具有一定的权限来访问文件其他用户(Others):既不是文件的所有者也不是文件的所属组成员的用户,其权限受到文件的权限设置的限制 d:目录-:普通文件最前面由10个字符组成,第一个字符表示文件类型,后面的九个字符按3个一组分别表示所有者、用户组和其他用户的权限Linux权限是指对文件和目录所具有的操作权限,包括读(r)、写(w)和执行(x)权限。
权限 = 角色 + 文件的属性。 对某一个文件是否有读、写、执行权限,第一看我们的角色,第二看这个文件对于我们所扮演的这个角色是否有相应的权限。也就是说,即使我(普通用户)是这个文件的拥有者,如果这个文件没有读属性,我也不能读这个文件。
| 示例:
root@hcss-ecs-8f13:~/112# whoamirootroot@hcss-ecs-8f13:~/112# su yjzyjz@hcss-ecs-8f13:/root/112$ whoamiyjzyjz@hcss-ecs-8f13:/root/112$ ls -ltotal 8drwxr-xr-x 2 root root 4096 Sep 20 17:39 mydir-rwxrwxr-x 1 root root 12 Sep 21 00:12 test.txtyjz@hcss-ecs-8f13:/root/112$ echo "Are you ok?" > test.txtbash: test.txt: Permission deniedyjz@hcss-ecs-8f13:/root/112$ suPassword: root@hcss-ecs-8f13:~/112# echo "Are you ok?" > test.txtroot@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 -ltotal 8-r--rw---- 1 yjz yjz 0 Sep 21 11:39 file.txtdrwxr-xr-x 2 root root 4096 Sep 20 17:39 mydir---------- 1 root root 12 Sep 21 11:31 test.txtroot@hcss-ecs-8f13:~/112# echo "Are you ok?" > test.txtroot@hcss-ecs-8f13:~/112# cat test.txtAre you ok?root@hcss-ecs-8f13:~/112# echo "hello world" >> test.txtroot@hcss-ecs-8f13:~/112# cat test.txtAre you ok?hello worldroot@hcss-ecs-8f13:~/112#
从上面的结果我们看到,root作为文件的拥有者,即使这个文件对root没有读、写、执行权限,root依旧可以对读写;甚至,当root对某个文件而言只是other时,即使这个文件对other而言没有读、写、执行权限,root依旧可以对其读写。从这不难看出,root就是超级老大,想干什么就干什么。
| 注意:
1. 文件有可执行权限,和文件能否被执行,是两码事。
一个文件可执行,一要看这个文件对当前用户是否有可执行权限,二要这个文件就应该是个可执行文件。
就比如某个人明明有能力胜任某项工作,但领导就不给他做这个工作的机会,那他也没办法。而另一个人明明没有一点能力,但领导就点名让他去做,那领导就有点强人所难了。
2. 确定身份的过程,只能确定一次,一般顺序为拥有者、所属组、其他用户
如果某个文件的拥有者没有对这个文件的写权限,即使这个文件的所属组有写权限,而文件的拥有者也是所属组,那这个文件的拥有者依然不能对这个文件进行写入。
yjz@hcss-ecs-8f13:/root/112$ ls -ltotal 8-r--rw-r-- 1 yjz yjz 0 Sep 21 11:39 file.txtdrwxr-xr-x 2 root root 4096 Sep 20 17:39 mydir-r---wxr-- 1 root root 12 Sep 21 11:31 test.txtyjz@hcss-ecs-8f13:/root/112$ echo "Are you ok?" > file.txtbash: file.txt: Permission deniedyjz@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 -ltotal 8drwxr-xr-x 2 root root 4096 Sep 20 17:39 mydir-rw-r--r-- 1 root root 12 Sep 20 23:10 test.txtroot@hcss-ecs-8f13:~/112# chmod u+x test.txtroot@hcss-ecs-8f13:~/112# ls -ltotal 8drwxr-xr-x 2 root root 4096 Sep 20 17:39 mydir-rwxr--r-- 1 root root 12 Sep 20 23:10 test.txtroot@hcss-ecs-8f13:~/112# chmod g+wx test.txtroot@hcss-ecs-8f13:~/112# ls -ltotal 8drwxr-xr-x 2 root root 4096 Sep 20 17:39 mydir-rwxrwxr-- 1 root root 12 Sep 20 23:10 test.txtroot@hcss-ecs-8f13:~/112# chmod a-rwx test.txtroot@hcss-ecs-8f13:~/112# ls -ltotal 8drwxr-xr-x 2 root root 4096 Sep 20 17:39 mydir---------- 1 root root 12 Sep 20 23:10 test.txtroot@hcss-ecs-8f13:~/112# chmod a+rwx test.txtroot@hcss-ecs-8f13:~/112# ls -ltotal 8drwxr-xr-x 2 root root 4096 Sep 20 17:39 mydir-rwxrwxrwx 1 root root 12 Sep 20 23:10 test.txtroot@hcss-ecs-8f13:~/112#
通过上面的示例我们不难看出,不管是拥有者、所属组、还是其他用户,r、w、x所对应的位置是不变的,所以我们也可以用8进制的数字来表示用户的权限。
例如: 对某一个文件来说,它的拥有者有读、写权限,没有执行权限,则对应的二进制为110,转换为8进制为6;它的所属组只有执行权限,没有读、写权限,则对应的二进制为001,转换为8进制为1;它的其他用户只有写权限,没有读、执行权限,则对应的二进制为100,转换为8进制为4。
root@hcss-ecs-8f13:~/112# ls -ltotal 8drwxr-xr-x 2 root root 4096 Sep 20 17:39 mydir-r--r--r-- 1 root root 12 Sep 21 00:24 test.txtroot@hcss-ecs-8f13:~/112# chmod 614 test.txtroot@hcss-ecs-8f13:~/112# ls -ltotal 8drwxr-xr-x 2 root root 4096 Sep 20 17:39 mydir-rw---xr-- 1 root root 12 Sep 21 00:24 test.txtroot@hcss-ecs-8f13:~/112#
| 示例:
chmod 555 test.txt
:文件的拥有者、所属组、其他用户都有读、执行权限,都没有写权限chmod 777 test.txt
:文件的拥有者、所属组、其他用户都有读、写、执行权限chmod 444 test.txt
:文件的拥有者、所属组、其他用户都只有读权限 root@hcss-ecs-8f13:~/112# ls -ltotal 8drwxr-xr-x 2 root root 4096 Sep 20 17:39 mydir-rwxrwxr-x 1 root root 12 Sep 21 00:24 test.txtroot@hcss-ecs-8f13:~/112# chmod 555 test.txtroot@hcss-ecs-8f13:~/112# ls -ltotal 8drwxr-xr-x 2 root root 4096 Sep 20 17:39 mydir-r-xr-xr-x 1 root root 12 Sep 21 00:24 test.txtroot@hcss-ecs-8f13:~/112# chmod 777 test.txtroot@hcss-ecs-8f13:~/112# ls -ltotal 8drwxr-xr-x 2 root root 4096 Sep 20 17:39 mydir-rwxrwxrwx 1 root root 12 Sep 21 00:24 test.txtroot@hcss-ecs-8f13:~/112# chmod 444 test.txtroot@hcss-ecs-8f13:~/112# ls -ltotal 8drwxr-xr-x 2 root root 4096 Sep 20 17:39 mydir-r--r--r-- 1 root root 12 Sep 21 00:24 test.txtroot@hcss-ecs-8f13:~/112#
1.3.2 更改文件角色
一般只有root和文件拥有者才能决定文件的拥有权。
chown:更改文件的拥有者chgrp:更改文件的所属组root@hcss-ecs-8f13:~/112# chown yjz test.txtroot@hcss-ecs-8f13:~/112# ls -ltotal 8-r--rw---- 1 yjz yjz 0 Sep 21 11:39 file.txtdrwxr-xr-x 2 root root 4096 Sep 20 17:39 mydir---------- 1 yjz root 24 Sep 25 14:22 test.txtroot@hcss-ecs-8f13:~/112# chgrp yjz test.txtroot@hcss-ecs-8f13:~/112# ls -ltotal 8-r--rw---- 1 yjz yjz 0 Sep 21 11:39 file.txtdrwxr-xr-x 2 root root 4096 Sep 20 17:39 mydir---------- 1 yjz yjz 24 Sep 25 14:22 test.txtroot@hcss-ecs-8f13:~/112#
我们可以用chown yjz:yjz test.txt
的形式一次性将文件的拥有者和所属组更改。
root@hcss-ecs-8f13:~/112# ls -ltotal 8-r--rw---- 1 yjz yjz 0 Sep 21 11:39 file.txtdrwxr-xr-x 2 root root 4096 Sep 20 17:39 mydir---------- 1 root root 24 Sep 25 14:22 test.txtroot@hcss-ecs-8f13:~/112# chown yjz:yjz test.txtroot@hcss-ecs-8f13:~/112# ls -ltotal 8-r--rw---- 1 yjz yjz 0 Sep 21 11:39 file.txtdrwxr-xr-x 2 root root 4096 Sep 20 17:39 mydir---------- 1 yjz yjz 24 Sep 25 14:22 test.txtroot@hcss-ecs-8f13:~/112#
此时文件test.txt
的拥有者和所属组都是yjz,那root将文件给了yjz,yjz可以还回去吗?或者yjz可以把文件给其他普通用户吗?
root@hcss-ecs-8f13:~/112# su yjzyjz@hcss-ecs-8f13:/root/112$ ls -ltotal 8-r--rw---- 1 yjz yjz 0 Sep 21 11:39 file.txtdrwxr-xr-x 2 root root 4096 Sep 20 17:39 mydir---------- 1 yjz yjz 24 Sep 25 14:22 test.txtyjz@hcss-ecs-8f13:/root/112$ chown root test.txtchown: changing ownership of 'test.txt': Operation not permittedyjz@hcss-ecs-8f13:/root/112$ chown xiaoyang test.txtchown: changing ownership of 'test.txt': Operation not permittedyjz@hcss-ecs-8f13:/root/112$
答案是:不可以。
作为文件的普通拥有者,我们可以更改文件的r、w、x权限,因为这个文件本身就是我的,但是这个文件的拥有权不是我能决定的,一个文件属于谁只有超级用户root说了算。
1.4 目录权限
不只有普通文件有权限的限制,目录(文件夹)也有权限的限制。通过我们平时的观察,目录的权限也是r、w、x,它们分别是表示什么呢?
yjz@hcss-ecs-8f13:~$ ls -ltotal 4drwxrwxr-x 2 yjz yjz 4096 Sep 25 21:09 diryjz@hcss-ecs-8f13:~$ chmod u-r diryjz@hcss-ecs-8f13:~$ ls -ltotal 4d-wxrwxr-x 2 yjz yjz 4096 Sep 25 21:09 diryjz@hcss-ecs-8f13:~$ cd diryjz@hcss-ecs-8f13:~/dir$ lsls: cannot open directory '.': Permission deniedyjz@hcss-ecs-8f13:~/dir$ chmod u+r,u-w ../diryjz@hcss-ecs-8f13:~/dir$ ls -l ../total 4dr-xrwxr-x 2 yjz yjz 4096 Sep 25 21:09 diryjz@hcss-ecs-8f13:~/dir$ pwd/home/yjz/diryjz@hcss-ecs-8f13:~/dir$ lsfile1.txt file2.txtyjz@hcss-ecs-8f13:~/dir$ > file3.txtbash: file3.txt: Permission deniedyjz@hcss-ecs-8f13:~/dir$ rm file1.txtrm: cannot remove 'file1.txt': Permission deniedyjz@hcss-ecs-8f13:~/dir$ cd ../yjz@hcss-ecs-8f13:~$ ls -ltotal 4dr-xrwxr-x 2 yjz yjz 4096 Sep 25 21:09 diryjz@hcss-ecs-8f13:~$ chmod u+w,u-x diryjz@hcss-ecs-8f13:~$ ls -ltotal 4drw-rwxr-x 2 yjz yjz 4096 Sep 25 21:09 diryjz@hcss-ecs-8f13:~$ pwd/home/yjzyjz@hcss-ecs-8f13:~$ touch file3.txt diryjz@hcss-ecs-8f13:~$ ls dirls: cannot access 'dir/file2.txt': Permission deniedls: cannot access 'dir/file1.txt': Permission deniedfile1.txt file2.txtyjz@hcss-ecs-8f13:~$ cd dirbash: cd: dir: Permission deniedyjz@hcss-ecs-8f13:~$ ls -ltotal 4drw-rwxr-x 2 yjz yjz 4096 Sep 25 21:14 dir-rw-rw-r-- 1 yjz yjz 0 Sep 25 21:14 file3.txtyjz@hcss-ecs-8f13:~$
通过上面的测试我们可以得出:
r:查看目录的权限w:在当前目录下新建、删除、更改文件的权限x:进入目录的权限注意:
目录的权限和普通文件的权限我们要分清楚,目录没有写权限,不代表目录下的文件不能读、写、执行。目录对当前用户没有x权限,而这个目录下又有文件,即使这个目录对当前用户有w权限,用rm -rf dir
也不能删除目录。这是因为删除目录要递归式(-r)删除,而目录对当前用户没有x权限的话就进不去目录,所以删除不了;但是如果目录下没有文件的话,就能删除 yjz@hcss-ecs-8f13:~$ ls -ltotal 4drw-rwxr-x 2 yjz yjz 4096 Sep 25 21:43 diryjz@hcss-ecs-8f13:~$ rm -rf dirrm: cannot remove 'dir/test.txt': Permission deniedyjz@hcss-ecs-8f13:~$ chmod u+x diryjz@hcss-ecs-8f13:~$ ls -ltotal 4drwxrwxr-x 2 yjz yjz 4096 Sep 25 21:43 diryjz@hcss-ecs-8f13:~$ rm -rf diryjz@hcss-ecs-8f13:~$ ls -ltotal 0yjz@hcss-ecs-8f13:~$ mkdir diryjz@hcss-ecs-8f13:~$ ls -ltotal 4drwxrwxr-x 2 yjz yjz 4096 Sep 25 21:47 diryjz@hcss-ecs-8f13:~$ chmod u-x diryjz@hcss-ecs-8f13:~$ ls -ltotal 4drw-rwxr-x 2 yjz yjz 4096 Sep 25 21:47 diryjz@hcss-ecs-8f13:~$ rm -rf diryjz@hcss-ecs-8f13:~$
1.5 权限掩码
不知道你有没有细心观察过我们新建的目录或文件它默认的权限是怎样的呢?
yjz@hcss-ecs-8f13:~$ ls -ltotal 0yjz@hcss-ecs-8f13:~$ pwd/home/yjzyjz@hcss-ecs-8f13:~$ mkdir diryjz@hcss-ecs-8f13:~$ touch file.txtyjz@hcss-ecs-8f13:~$ ls -ltotal 4drwxrwxr-x 2 yjz yjz 4096 Sep 25 21:53 dir-rw-rw-r-- 1 yjz yjz 0 Sep 25 21:53 file.txtyjz@hcss-ecs-8f13:~$
可以看到新建的目录默认权限是775,而新建的普通文件默认权限是664,这是为什么呢?
其实目录的起始权限是777,而普通文件的起始权限是666,至于为什么又变成了775和664,正是因为权限掩码的关系。
权限掩码(umask)用于定义新创建的文件或目录的默认权限,一般是0002。
最终权限 = 起始权限 & (~umask)
当在Linux中创建文件或目录时,系统会先根据umask值来决定哪些权限位应该被取消,而权限掩码是可以更改的:
yjz@hcss-ecs-8f13:~$ umask 000yjz@hcss-ecs-8f13:~$ ls -ltotal 4drwxrwxr-x 2 yjz yjz 4096 Sep 25 21:53 dir-rw-rw-r-- 1 yjz yjz 0 Sep 25 21:53 file.txtyjz@hcss-ecs-8f13:~$ mkdir testdiryjz@hcss-ecs-8f13:~$ touch testfile.txtyjz@hcss-ecs-8f13:~$ ls -ltotal 8drwxrwxr-x 2 yjz yjz 4096 Sep 25 21:53 dir-rw-rw-r-- 1 yjz yjz 0 Sep 25 21:53 file.txtdrwxrwxrwx 2 yjz yjz 4096 Sep 25 22:10 testdir-rw-rw-rw- 1 yjz yjz 0 Sep 25 22:11 testfile.txtyjz@hcss-ecs-8f13:~$
当我们把umask修改为000后,再新建的目录默认权限就成了777,新建的普通文件的默认权限就成了666。
权限掩码会直接影响到新创建文件和目录的默认权限,所以修改umask要慎重考虑。
1.6 粘滞位
什么是粘滞位呢?这里先买个关子,我们知道普通用户都在home目录下,那普通用户自己的家目录默认权限是怎样的呢?
yjz@hcss-ecs-8f13:/home$ ls /home -ltotal 8drwxr-x--- 2 xiaoyang xiaoyang 4096 Sep 21 11:59 xiaoyangdrwxr-x--- 4 yjz yjz 4096 Sep 25 22:14 yjzyjz@hcss-ecs-8f13:/home$
可以看到普通用户自己的家目录对其他用户什么权限都没有,对所属组也没有写权限。
如果现在有这么一个情景,因为工作需求yjz和xiaoyang需要共享一个目录,那这个项目的负责人应该把这个目录建在哪儿呢?建在他们任何一个人的家目录下都不行,因为家目录是比较隐私的,其他用户一般不能进入、操作别人的家目录。
可以考虑将目录建在根目录下,然后放开这个目录对其他用户的读、写、执行权限。
通常只有root用户才能在Linux系统的根目录下新建目录和文件。
root@hcss-ecs-8f13:/# mkdir share_dirroot@hcss-ecs-8f13:/# ls -ltotal 72lrwxrwxrwx 1 root root 7 Aug 9 2022 bin -> usr/bindrwxr-xr-x 3 root root 4096 Jul 7 12:15 bootdrwxr-xr-x 7 root root 4096 Jul 7 12:15 CloudrResetPwdAgentdrwxr-xr-x 19 root root 3960 Sep 16 14:41 devdrwxr-xr-x 108 root root 4096 Sep 21 00:17 etcdrwxr-xr-x 4 root root 4096 Sep 21 00:16 homelrwxrwxrwx 1 root root 7 Aug 9 2022 lib -> usr/liblrwxrwxrwx 1 root root 9 Aug 9 2022 lib32 -> usr/lib32lrwxrwxrwx 1 root root 9 Aug 9 2022 lib64 -> usr/lib64lrwxrwxrwx 1 root root 10 Aug 9 2022 libx32 -> usr/libx32drwx------ 2 root root 16384 Jul 7 11:14 lost+founddrwxr-xr-x 2 root root 4096 Aug 9 2022 mediadrwxr-xr-x 2 root root 4096 Aug 9 2022 mntdrwxr-xr-x 2 root root 4096 Aug 9 2022 optdr-xr-xr-x 209 root root 0 Sep 16 14:41 procdrwx------ 7 root root 4096 Sep 25 14:18 rootdrwxr-xr-x 35 root root 960 Sep 25 14:18 runlrwxrwxrwx 1 root root 8 Aug 9 2022 sbin -> usr/sbindrwxr-xr-x 2 root root 4096 Sep 25 22:45 share_dirdrwxr-xr-x 6 root root 4096 Aug 9 2022 snapdrwxr-xr-x 2 root root 4096 Aug 9 2022 srvdr-xr-xr-x 13 root root 0 Sep 16 14:41 sysdrwxrwxrwt 14 root root 4096 Sep 25 22:31 tmpdrwxr-xr-x 14 root root 4096 Aug 9 2022 usrdrwxr-xr-x 13 root root 4096 Aug 9 2022 varroot@hcss-ecs-8f13:/# chmod o+w share_dirroot@hcss-ecs-8f13:/# ls -ltotal 72lrwxrwxrwx 1 root root 7 Aug 9 2022 bin -> usr/bindrwxr-xr-x 3 root root 4096 Jul 7 12:15 bootdrwxr-xr-x 7 root root 4096 Jul 7 12:15 CloudrResetPwdAgentdrwxr-xr-x 19 root root 3960 Sep 16 14:41 devdrwxr-xr-x 108 root root 4096 Sep 21 00:17 etcdrwxr-xr-x 4 root root 4096 Sep 21 00:16 homelrwxrwxrwx 1 root root 7 Aug 9 2022 lib -> usr/liblrwxrwxrwx 1 root root 9 Aug 9 2022 lib32 -> usr/lib32lrwxrwxrwx 1 root root 9 Aug 9 2022 lib64 -> usr/lib64lrwxrwxrwx 1 root root 10 Aug 9 2022 libx32 -> usr/libx32drwx------ 2 root root 16384 Jul 7 11:14 lost+founddrwxr-xr-x 2 root root 4096 Aug 9 2022 mediadrwxr-xr-x 2 root root 4096 Aug 9 2022 mntdrwxr-xr-x 2 root root 4096 Aug 9 2022 optdr-xr-xr-x 209 root root 0 Sep 16 14:41 procdrwx------ 7 root root 4096 Sep 25 14:18 rootdrwxr-xr-x 35 root root 960 Sep 25 14:18 runlrwxrwxrwx 1 root root 8 Aug 9 2022 sbin -> usr/sbindrwxr-xrwx 2 root root 4096 Sep 25 22:45 share_dirdrwxr-xr-x 6 root root 4096 Aug 9 2022 snapdrwxr-xr-x 2 root root 4096 Aug 9 2022 srvdr-xr-xr-x 13 root root 0 Sep 16 14:41 sysdrwxrwxrwt 14 root root 4096 Sep 25 22:31 tmpdrwxr-xr-x 14 root root 4096 Aug 9 2022 usrdrwxr-xr-x 13 root root 4096 Aug 9 2022 varroot@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 -ltotal 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.txtxiaoyang@hcss-ecs-8f13:/share_dir$ su yjzPassword: yjz@hcss-ecs-8f13:/share_dir$ echo "Are you ok?" >> file1.txtyjz@hcss-ecs-8f13:/share_dir$ cat file1.txtAre you ok?yjz@hcss-ecs-8f13:/share_dir$ su xiaoyangPassword: xiaoyang@hcss-ecs-8f13:/share_dir$ cat file1.txtAre you ok?xiaoyang@hcss-ecs-8f13:/share_dir$ su yjzPassword: yjz@hcss-ecs-8f13:/share_dir$ chmod o-r file1.txtyjz@hcss-ecs-8f13:/share_dir$ su xiaoyangPassword: xiaoyang@hcss-ecs-8f13:/share_dir$ ls -ltotal 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.txtxiaoyang@hcss-ecs-8f13:/share_dir$ cat file1.txtcat: file1.txt: Permission deniedxiaoyang@hcss-ecs-8f13:/share_dir$ rm file1.txtrm: remove write-protected regular file 'file1.txt'? yxiaoyang@hcss-ecs-8f13:/share_dir$ ls -ltotal 0-rw-rw-r-- 1 xiaoyang xiaoyang 0 Sep 25 22:58 file2.txtxiaoyang@hcss-ecs-8f13:/share_dir$
所以现在我们的需求是,既要这个目录允许其他用户进入,能读、能写,还要求不能删除别人的文件。为了防止出现类似这种事故,粘滞位就出现了。
设置粘滞位:chmod +t 文件名
取消粘滞位: chmod -t 文件名
root@hcss-ecs-8f13:/# ls -ltotal 72lrwxrwxrwx 1 root root 7 Aug 9 2022 bin -> usr/bindrwxr-xr-x 3 root root 4096 Jul 7 12:15 bootdrwxr-xr-x 7 root root 4096 Jul 7 12:15 CloudrResetPwdAgentdrwxr-xr-x 19 root root 3960 Sep 16 14:41 devdrwxr-xr-x 108 root root 4096 Sep 21 00:17 etcdrwxr-xr-x 4 root root 4096 Sep 21 00:16 homelrwxrwxrwx 1 root root 7 Aug 9 2022 lib -> usr/liblrwxrwxrwx 1 root root 9 Aug 9 2022 lib32 -> usr/lib32lrwxrwxrwx 1 root root 9 Aug 9 2022 lib64 -> usr/lib64lrwxrwxrwx 1 root root 10 Aug 9 2022 libx32 -> usr/libx32drwx------ 2 root root 16384 Jul 7 11:14 lost+founddrwxr-xr-x 2 root root 4096 Aug 9 2022 mediadrwxr-xr-x 2 root root 4096 Aug 9 2022 mntdrwxr-xr-x 2 root root 4096 Aug 9 2022 optdr-xr-xr-x 186 root root 0 Sep 16 14:41 procdrwx------ 7 root root 4096 Sep 26 07:06 rootdrwxr-xr-x 35 root root 960 Sep 26 07:06 runlrwxrwxrwx 1 root root 8 Aug 9 2022 sbin -> usr/sbindrwxr-xrwx 2 root root 4096 Sep 25 23:09 share_dirdrwxr-xr-x 6 root root 4096 Aug 9 2022 snapdrwxr-xr-x 2 root root 4096 Aug 9 2022 srvdr-xr-xr-x 13 root root 0 Sep 16 14:41 sysdrwxrwxrwt 14 root root 4096 Sep 26 06:29 tmpdrwxr-xr-x 14 root root 4096 Aug 9 2022 usrdrwxr-xr-x 13 root root 4096 Aug 9 2022 varroot@hcss-ecs-8f13:/# chmod +t share_dirroot@hcss-ecs-8f13:/# ls -ltotal 72lrwxrwxrwx 1 root root 7 Aug 9 2022 bin -> usr/bindrwxr-xr-x 3 root root 4096 Jul 7 12:15 bootdrwxr-xr-x 7 root root 4096 Jul 7 12:15 CloudrResetPwdAgentdrwxr-xr-x 19 root root 3960 Sep 16 14:41 devdrwxr-xr-x 108 root root 4096 Sep 21 00:17 etcdrwxr-xr-x 4 root root 4096 Sep 21 00:16 homelrwxrwxrwx 1 root root 7 Aug 9 2022 lib -> usr/liblrwxrwxrwx 1 root root 9 Aug 9 2022 lib32 -> usr/lib32lrwxrwxrwx 1 root root 9 Aug 9 2022 lib64 -> usr/lib64lrwxrwxrwx 1 root root 10 Aug 9 2022 libx32 -> usr/libx32drwx------ 2 root root 16384 Jul 7 11:14 lost+founddrwxr-xr-x 2 root root 4096 Aug 9 2022 mediadrwxr-xr-x 2 root root 4096 Aug 9 2022 mntdrwxr-xr-x 2 root root 4096 Aug 9 2022 optdr-xr-xr-x 185 root root 0 Sep 16 14:41 procdrwx------ 7 root root 4096 Sep 26 07:06 rootdrwxr-xr-x 35 root root 960 Sep 26 07:06 runlrwxrwxrwx 1 root root 8 Aug 9 2022 sbin -> usr/sbindrwxr-xrwt 2 root root 4096 Sep 25 23:09 share_dirdrwxr-xr-x 6 root root 4096 Aug 9 2022 snapdrwxr-xr-x 2 root root 4096 Aug 9 2022 srvdr-xr-xr-x 13 root root 0 Sep 16 14:41 sysdrwxrwxrwt 14 root root 4096 Sep 26 06:29 tmpdrwxr-xr-x 14 root root 4096 Aug 9 2022 usrdrwxr-xr-x 13 root root 4096 Aug 9 2022 varroot@hcss-ecs-8f13:/# su yjzyjz@hcss-ecs-8f13:/$ cd /share_diryjz@hcss-ecs-8f13:/share_dir$ > file1.txtyjz@hcss-ecs-8f13:/share_dir$ echo "Are you ok?" >> file1.txtyjz@hcss-ecs-8f13:/share_dir$ su xiaoyangPassword: xiaoyang@hcss-ecs-8f13:/share_dir$ pwd/share_dirxiaoyang@hcss-ecs-8f13:/share_dir$ > file2.txtxiaoyang@hcss-ecs-8f13:/share_dir$ echo "Thank you" >> file2.txtxiaoyang@hcss-ecs-8f13:/share_dir$ ls -ltotal 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.txtxiaoyang@hcss-ecs-8f13:/share_dir$ cat file1.txtAre you ok?xiaoyang@hcss-ecs-8f13:/share_dir$ cat file2.txtThank youxiaoyang@hcss-ecs-8f13:/share_dir$ rm file1.txtrm: remove write-protected regular file 'file1.txt'? yrm: cannot remove 'file1.txt': Operation not permittedxiaoyang@hcss-ecs-8f13:/share_dir$ rm file2.txtxiaoyang@hcss-ecs-8f13:/share_dir$ ls -ltotal 4-rw-rw-r-- 1 yjz yjz 12 Sep 26 07:14 file1.txtxiaoyang@hcss-ecs-8f13:/share_dir$
其实系统已经帮我们建了一个可以用来共享的目录tmp:
| /tmp 目录的主要用途包括:
存放临时文件: 程序在执行过程中可能会生成一些临时文件,这些文件不需要永久保存,因此可以存放在 /tmp 目录下共享临时空间: 由于 /tmp 对所有用户都是可访问的,因此它可以作为不同用户或程序之间共享临时数据的场所系统重启后自动清理: 如前所述,/tmp 目录的内容在系统重启后通常会被清空,这有助于保持系统的整洁,并防止因旧文件积累而导致的潜在问题| 当一个目录被设置为粘滞位,则该目录下的文件只能由:
1. 超级用户删除
2. 该目录所有者删除
3. 该文件所有者删除
总结
目录的可执行权限是表示你可否在目录下执行命令如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目录,即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档本篇文章的分享就到这里了,如果您觉得在本文有所收获,还请留下您的三连支持哦~