【Linux】权限管理——专治不会设置权限而头疼

news2024/10/1 6:33:52
头像
🚀个人主页:@小羊
🚀所属专栏:Linux
很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~

动图描述

目录

  • 前言
  • 一、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 文件类型和访问权限

文件的基本权限分为三组:

  1. 所有者(User):文件的创建者或拥有者,拥有对文件的完全控制权
  2. 所属组(Group):与文件相关联的用户组,该组的所有成员都具有一定的权限来访问文件
  3. 其他用户(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才能修改文件的访问权限

用户符号:

  1. u:拥有者
  2. g:所属组
  3. o:其他用户
  4. 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:进入目录的权限

注意:

  1. 目录的权限和普通文件的权限我们要分清楚,目录没有写权限,不代表目录下的文件不能读、写、执行。
  2. 目录对当前用户没有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,至于为什么又变成了775664,正是因为权限掩码的关系。

权限掩码(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命令,但仍然没有权限读出目录下的文档

本篇文章的分享就到这里了,如果您觉得在本文有所收获,还请留下您的三连支持哦~

头像

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2166487.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue2加载本地html文件

实现方法&#xff1a; 1、在public文件夹下创建static文件夹&#xff0c;static文件夹下放置需要展示的html文件&#xff0c;有没有static都没问题&#xff0c;需要在public文件夹下 <div style"width: 100%"><!--静态html资源--><div class"t…

C语言⾃定义类型:结构体

目录 前言 1. 结构体类型的声明 1.1 结构的声明 1.2 结构体变量的创建和初始化 1.3 结构的特殊声明 1.4 结构的⾃引⽤ 2.结构体内存对齐 2.1 对⻬规则 实例讲解 2.2 为什么存在内存对⻬&#xff1f; 2.3 修改默认对⻬数 3. 结构体传参 4. 结构体实现位段 4.1 什么…

H7-TOOL脱机烧录增加国产3PEAK混合信号单片机TPS32和富芮坤FR8008,FR8003和FR2012支持

支持单路&#xff0c;1拖4和1拖16脱机烧录 3PEAKS思瑞浦混合信号单片机TPS32M支持 1、在线烧录&#xff0c;脱机烧录均正常。 2、注意事项&#xff1a;推荐使用整片擦除。 在线烧录&#xff1a; 脱机烧录&#xff1a; 接线效果&#xff1a; 富芮坤FR8008x支持&#xff0c;支…

3-2 RTE对Runnable的作用

返回总目录->返回总目录<- 一、前言 通过RTE给runnable提供触发事件。 runnable是可以被触发的,但是需要通过RTE来实现这个触发和调用runnable通过RTE给runnable提供所需资源。 RTE将runnable需要的一些资源通过接口传输给它(Port的实现)将BSW和SWC做隔绝。 因此OS和r…

基于标签相关性的多标签学习

本文所涉及所有资源均在 传知代码平台可获取。 目录 论文概述 什么是多标签学习 论文贡献 算法流程 挖掘“主题“——提取标签相关性 训练 &#x1d440; &#x1d447; M T 模型——拟合{特征集, 主题集合} 用标记相关性扩增数据集 再次训练拟合 &#x1d440; M模型——对真…

[Unity Demo]从零开始制作空洞骑士Hollow Knight第十一集:制作法术系统的回血机制和火球机制

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、制作法术系统的回血机制 1.制作动画以及使用UNITY编辑器编辑2.使用代码和PlaymakerFSM制作回血机制二、制作法术系统的火球机制 1.制作动画以及使用UNITY编…

LiveNVR监控流媒体Onvif/RTSP功能-支持电子放大拉框放大直播视频拉框放大录像视频流拉框放大电子放大

LiveNVR监控流媒体Onvif/RTSP功能-支持电子放大拉框放大直播视频拉框放大录像视频流拉框放大电子放大 1、视频广场2、录像回看3、RTSP/HLS/FLV/RTMP拉流Onvif流媒体服务 1、视频广场 视频广场 -》播放 &#xff0c;左键单击可以拉取矩形框&#xff0c;放大选中的范围&#xff…

23小时续航创造历史!华硕灵耀14 Air+酷睿Ultra 200V系列处理器首发评测

一、前言&#xff1a;能效为王的酷睿Ultra 200V系列处理器 ARM平台的功耗远低于X86平台&#xff0c;ARM处理器笔记本(比如MacBook Air)的续航远高于X86&#xff0b;Windows笔记本&#xff01; 在我们看来&#xff0c;这些似乎就是理所当然、天经地义的事情&#xff0c;毕竟几十…

Git 撤销一个已经push到远端仓库的commit

在 Git 中&#xff0c;撤销一个已经推送到远程仓库的改动有几种不同的方法&#xff0c;具体取决于你是否想要完全删除改动&#xff0c;还是只是恢复文件的某个状态。以下是常见的几种方法&#xff1a; git revert 撤销特定的commit git revert 是最安全的方法&#xff0c;因为…

【MySQL 05】表的约束

目录 1.约束的概念 2 空属性约束 3.默认值约束 4. 列描述&#xff08;comment&#xff09; 5.补零&#xff08;zerofill&#xff09; 6.主键约束 &#xff08;primary key&#xff09; 基本案例 主键的删除与添加 复合主键 复合主键的删除与添加 7. 自增长约束&#xf…

vue3【实战】响应式主题(实时获取页面比例,指定尺寸内按比例缩放,超过指定尺寸保持高度不变的图片)

实时获取页面比例 移动端设计稿通常为 750px当前窗口的宽为 window.innerWidth通过 useResizeObserver 可实时监听窗口大小的变化 src/stores/theme.ts export const useThemeStroe defineStore(theme, () > {const rate ref(0)function setRate(newRate: number) {rate…

系统分析师13:软件工程

文章目录 1 内容概要2 信息系统的生命周期2.1 单个系统开发周期 3 软件开发方法4 软件开发模型4.1 概述4.2 其他经典模型4.3 瀑布模型4.4 V模型4.5 喷泉模型4.6 W模型4.7 迭代与增量4.8 增量模型与螺旋模型4.9 构建组装模型4.10 快速应用开发模型&#xff08;RAD&#xff09;4.…

SQL Server的关系代数(选择投影连接除)

目录 1.博客素材来源 2.传统的关系运算 3.专门的关系运算 3.1选择&#xff1a; 3.2投影&#xff1a; 3.3自然连接&#xff1a; 3.4等值链接&#xff1a; 3.5自然连接&#xff1a; 3.6除法&#xff1a; 1.博客素材来源 这个是某个大学老师在新冠时候的这个线上课程&am…

Redisson分布式锁的概念和使用

Redisson分布式锁的概念和使用 一 简介1.1 什么是分布式锁&#xff1f;1.2 Redisson分布式锁的原理1.3 Redisson分布式锁的优势1.4 Redisson分布式锁的应用场景 二 案例2.1 锁竞争案例2.2 看门狗案例2.3 参考文章 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff…

maven报错:Unresolved plugin ‘org.apache.maven.pluginsmaven-resources-plugin‘

maven报错&#xff1a;Unresolved plugin: ‘org.apache.maven.plugins:maven-resources-plugin‘ 最近初学java&#xff0c;这里记录一下报错出现的原因以及解决办法 问题示例 如图所示&#xff0c;就是在创建一个项目之后对应插件的部分有爆红 问题出现的原因 简单来说就…

Pygame中Sprite实现逃亡游戏3

在《Pygame中Sprite实现逃亡游戏2》中实现了飞龙和飞火的显示。接下来实现玩家跳跃效果&#xff0c;如图1所示。 图1 玩家跳跃效果 1 按键响应 当玩家按下键盘中空格按键后&#xff0c;游戏中的玩家就会跳跃&#xff0c;用于躲避飞火。在while True循环判断按键的代码中&…

开放原子开源基金会网站上的开源项目EasyBaaS存在内存泄露缺陷

今天我仍然发布一个开放原子开源基金会网站上的开源项目EasyBaaS&#xff0c;这个开源项目的捐赠主体是招商银行股份有限公司。该项目的是一个基于Linux环境的区块链节点管理工具&#xff0c;提供一键部署节点、实时监控及管理运维等功能&#xff0c;从搭建节点、启停节点、节点…

Python | Leetcode Python题解之第436题寻找右区间

题目&#xff1a; 题解&#xff1a; class Solution:def findRightInterval(self, intervals: List[List[int]]) -> List[int]:n len(intervals)starts, ends list(zip(*intervals))starts sorted(zip(starts, range(n)))ends sorted(zip(ends, range(n)))ans, j [-1]…

Qt网络编程——QTcpServer和QTcpSocket

文章目录 核心APITCP回显服务器TCP回显客户端 核心API QTcpServer用于监听端口和获取客户端连接 名称类型说明对标原生APIlisten(const QHostAddress&, quint16 port)方法绑定指定的地址和端口号&#xff0c;并开始监听bind和listennextPendingConnection()方法从系统中获…

【2024/9/25更新】最新版植物大战僵尸V2.5.1发布啦

下载链接⬇️⬇️ 最新版V2.5.1下载 点击下载 历史版本下载 点击下载 更新公告 2.5.1版本更新公告: 关卡阅整 两面夹击关卡系列关卡降低出怪倍率 两面夹击关卡出怪种类调整 两面夹击部分关卡初始阳光调整 两面夹击关卡中可使用投手类植物- 两面夹击关卡中的脑子血量…