Linux权限解析:用户、组和权限的协同

​​​​​​​在Linux系统中,权限决定了谁能做什么。本文将指导你如何掌握这些权限,以确保你的系统既安全又高效!

目录

1.shell命令及其运行原理

2.Linu权限的概念

(1) 用户

(2) 切换用户命令su

(3) 指令提权命令sudo 

(4) 什么是权限?

(5) 为什么要有权限? 

3.Linux权限管理

(1) 文件访问者的分类(人)

(2) 文件类型和访问权限(实物属性)

① 基本权限

② 文件的类型与权限图示: 

③ 文件类型

(3) 文件权限值的表示方法

① 字符表示方式

② 八进制表示方式

(4) 文件访问权限的相关设置方法

① chmod命令

<1> 符号类型修改文件权限 

<2> 数字类型修改文件权限

<3>重点部分★

② chown命令

③ chgrp命令

④ umask命令

(5) 问题一:目录的权限

(6) 问题2:缺省权限

① 为什么默认权限是现在这样?

② 设置umask的目的是什么?

③ 为什么要有umask?

④ 修改umask

(7) 问题3:粘滞位

① 非文件拥有者却能删除文件?

② 粘滞位 +t(权限标志位)

4.总结


1.shell命令及其运行原理

Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)”,但我们一般用户,不能直接使用kernel。而是通过kernel的外壳程序,也就是所谓的Shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?

操作系统其实是一组软件,由于这些软件在控制整个硬件与管理系统的活动检测,如果这组软件能被用户随意操作,若用户应用不当,将会使得整个系统崩溃,但我们还是需要用户去使用操作系统,所以就有了在操作系统上面发展的应用程序,也就是外壳程序。外壳程序的功能只是提供用户操作系统的一个界面,因此需要通过调用其他能够操作应用程序的软件,也就是前面学过的命令。

也就是说,只要能够操作应用程序的软件都能构成为Shell。狭义的Shell是指命令行方面的软件,广义的Shell则包括用户图形化界面模式的软件等。

综上,从技术角度,Shell的最简单定义:命令行解释器(command interpret)主要包含:

1、将使用者的命令翻译给核心(kernel)处理。

2、同时,将核心的处理结果翻译给使用者。

对比Windows GUI,我们操作Windows不是直接操作Windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符,或者运行起来一个应用程序)。

shell对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。

shell VS bash, shell是所有外壳程序的统称,具体Linux下的外壳程序是bash !还有其他的操作系统的外壳程序是sh、xsh ...。

2.Linu权限的概念

(1) 用户

Windows下有管理员(admin)和普通用户,Linux下有两种用户:超级用户(root)、普通用户。

超级用户(root):在Linux下做任何事,不受限制

普通用户:在Linux下做有限的工作

超级用户的命令提示符是#,普通用户的命令提示符是$

(2) 切换用户命令su

命令 su [ 用户名 ]
功能 :切换用户。
例如,要从 root 用户切换到普通用户名 user ,则使用 su user 。不用输密码。
要从普通用户 user 切换到 root 用户则使用 su root( root 可以省略)/ su - ,此时系统会提示输入 root 用户的密码。
->可以让用户进行身份变化,提高权限。

(3) 指令提权命令sudo 

sudo:进行指令的短暂提权,比如安装软件时,普通用户没有操作/usr/bin/目录的权限,就需要root权限。--- Linux上的指令其实只安装了一份,允许同时使用,只是权限不同。

那有了sudo命令,岂不是root用户形同虚设??

 那让我们在普通用户下执行一下sudo ls 指令,却发现无法执行!它说普通用户zyt不在sudoers文件里。sudoers文件是控制sudo命令提权的。意味着zyt用户没有权限执行需要提升权限的命令

(4) 什么是权限?

权限的本质是:能或者不能做什么事。

(5) 为什么要有权限? 

1、控制用户的行为,防止错误的发生。

2、理解:权限首先限制的是角色(人),其次权限要求目标必须具备对应的属性。

=> 权限 == 角色 + 目标权限属性

Linux下一切皆文件,所以对应的权限就是读(r)、写(w)、执行(x)!

3.Linux权限管理

(1) 文件访问者的分类(人)

• 文件和文件目录的所有者(拥有者):u---User
• 文件和文件目录的所有者所在的组的用户(所属组):g---Group
其它用户:o---Others (other不需要记录)

(2) 文件类型和访问权限(实物属性)

① 基本权限

● 读 (r): 对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限

● 写(w): 对文件而言,具有修改文件内容的权限;对目录来说,具有删除移动目录内文件的权限

● 执行(x): 对文件而言,具有执行文件内容的权限;对目录来说,具有进入该目录的权限

● “-”:表示不具有该项权限 

表述时,要加上前提角色。

② 文件的类型与权限图示: 

● 第一个字符表示这个文件是目录、文件或链接文件等。[d]开头是目录,[-]开头是文件,[l]则是链接文件,[b]表示为设备文件里的可供存储的周边设备,[c]表示设备文件里的串行端口设备。

● 接下来绿色部分以三个为一组,且均为 [rwx] 三个参数的组合。要注意这三个权限的位置不会改变,如果没有权限就会出现 [-] 而已。第一组为文件拥有者可具备的权限,第二组为所属组可具备的权限,第三组为其他用户可具备的权限。

● 第三栏表示有多少文件名链接到此节点。每个文件都会将他的权限与属性记录到文件系统的节点里,不过我们使用的目录树却是用文件名来记录,因此每一个文件名就会链接到一个节点,这个属性记录的就是有多少文件连接到这个节点号码。

③ 文件类型

是用文件属性的第一个字符作区分:

d:文件夹

-:普通文件(常用)

l:软连接(类似Windows的快捷方式)

b:块设备文件(例如硬盘,光驱等)

p:管道文件

c:字符设备文件(例如屏幕等串口设备)

s:套接口文件

注意:在Linux下,系统不关心文件后缀(文本,可执行,库,图片...),但不代表禁止使用后缀。也不代表工具(gcc,g++)不关心后缀,比如 .txt 的文件就无法通过编译。

(3) 文件权限值的表示方法

① 字符表示方式

② 八进制表示方式

(4) 文件访问权限的相关设置方法

① chmod命令

功能: 设置文件的访问权限
格式: chmod [ 参数 ] 权限 文件名
常用选项:
        R -> 递归修改目录文件的权限
        说明:只有文件的拥有者和root才可以改变文件的权限
<1> 符号类型修改文件权限 

Linux基本的九个权限分别是(1) user (2) group (3) others 三种身份,那么我们可以借由u,g,o来表示三种身份的权限。此外a表示all即全部身份。

实践:设置一个文件权限为【-rwxr-xr-x】:

# go->g/o
[root@iZ2vcf9wvlgcetfeub9f11Z mydir]# chmod u=rwx,go=rx a.c
[root@iZ2vcf9wvlgcetfeub9f11Z mydir]# ll
total 0
-rwxr-xr-x 1 root root 0 Nov  4 08:02 a.c
-r--r--r-- 1 root root 0 Nov  4 08:02 b.c

假如不知道先前文件的属性,但想增加 b.c 这个文件每个人都能写入的权限:

[root@iZ2vcf9wvlgcetfeub9f11Z mydir]# chmod a+w b.c
[root@iZ2vcf9wvlgcetfeub9f11Z mydir]# ll
total 0
-rwxr-xr-x 1 root root 0 Nov  4 08:02 a.c
-rw-rw-rw- 1 root root 0 Nov  4 08:02 b.c

要拿掉所有人的可执行权限:

[root@iZ2vcf9wvlgcetfeub9f11Z mydir]# chmod a-x a.c
[root@iZ2vcf9wvlgcetfeub9f11Z mydir]# ll
total 0
-rw-r--r-- 1 root root 0 Nov  4 08:02 a.c

+、-、= 的不同点:+ 与 - 的状态下,只要是没有指定到的项目,该权限就不会被变动,例如上面的例子,由于仅以-拿掉x则其他两个保持当时的值不变。

<2> 数字类型修改文件权限

八进制数字代替各个权限:r:4,w:2,x:1,每种身份各自的权限是需要累加的。 

[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ chmod 770 test.c
[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ ll
total 40
-r--rw-rw- 1 root root    13 Nov  5 09:50 a.c
-rw-rw-rw- 1 root root     0 Nov  4 08:02 b.c
-rwxrw-rw- 1 zyt  zyt     48 Nov  5 10:52 file.txt
-rwxrwxr-x 1 zyt  zyt  25184 Nov  5 11:09 mytest
-rwxrwx--- 1 zyt  zyt     81 Nov  5 11:09 test.c
[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ chmod 666 test.c
[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ ll
total 40
-r--rw-rw- 1 root root    13 Nov  5 09:50 a.c
-rw-rw-rw- 1 root root     0 Nov  4 08:02 b.c
-rwxrw-rw- 1 zyt  zyt     48 Nov  5 10:52 file.txt
-rwxrwxr-x 1 zyt  zyt  25184 Nov  5 11:09 mytest
-rw-rw-rw- 1 zyt  zyt     81 Nov  5 11:09 test.c

       在实际的系统运行中最常发生的一个问题就是,尝尝我们用vim编译一个shell的脚本文件后,他的权限通常是【-rw-rw-r--】,也就是664,如果,要将该文件变成可执行文件,并且步要让其他人修改此文件的话,就需要【-rwxr-xr-x】这一权限,此时,执行【chmod 755 test.sh】命令。

        另外,如果有些文件你不希望被其他人看到,那么将文件权限设置为:【-rwx------】,那就执行【chmod 740 filename】.

<3>重点部分

A、 能修改任何人文件权限吗?

-> 用户只能修改自己的文件权限,除非指令提权成root

B、没有权限怎么办?

-> 系统会拒绝让我们访问

# 创建普通用户的文件,拥有者/所属组都是zyt
[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ touch file.txt
[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ ll
total 4
-r--rw-rw- 1 root root 13 Nov  5 09:50 a.c
-rw-rw-rw- 1 root root  0 Nov  4 08:02 b.c
-rw-rw-r-- 1 zyt  zyt   0 Nov  5 09:59 file.txt# 将“”内容重定向到file.txt
[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ echo "hello Linux!" > file.txt
[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ cat file.txt
hello Linux!# 去掉文件所有身份的写(w)权限
[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ chmod u-w file.txt
[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ ll
total 8
-r--rw-rw- 1 root root 13 Nov  5 09:50 a.c
-rw-rw-rw- 1 root root  0 Nov  4 08:02 b.c
-r--rw-r-- 1 zyt  zyt  13 Nov  5 10:00 file.txt# 追加重定向时,无法写入
[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ echo "hello" >> file.txt 
bash: file.txt: Permission denied# 去掉文件拥有者的读(r)权限,也就没法打印了
[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ chmod u-r file.txt
[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ cat file.txt
cat: file.txt: Permission denied

C、 在确定权限信息的时候,系统会先确定用户是谁?拥有者/所属组、/others?

-> 在Centos下,如果用户角色确定,只匹配一次,顺序是:拥有者/所属组/others(三个角色与当前用户相匹配)成功后就只看匹配成功的角色的权限。

● 当前用户与拥有者·匹配

# 这里在root用户权限下将file.txt的拥有者改为root(稍后会细讲,现在认识就行)
[root@iZ2vcf9wvlgcetfeub9f11Z mydir]# chown root file.txt
[root@iZ2vcf9wvlgcetfeub9f11Z mydir]# ll
total 8
-r--rw-rw- 1 root root 13 Nov  5 09:50 a.c
-rw-rw-rw- 1 root root  0 Nov  4 08:02 b.c
----rw-rw- 1 root zyt  13 Nov  5 10:00 file.txt# 将用户切换回zyt普通用户
[root@iZ2vcf9wvlgcetfeub9f11Z mydir]# su zyt
[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ whoami
zyt# 我们发现此时文件file.txt依旧能读能写,因为系统按顺序进行角色确定时
# 当前用户zyt和文件的拥有者root不匹配,会继续向后匹配,拥有者的权限就跳过不看了
# 这里文件所属组zyt与当前用户相匹配,所以是所属组位置的权限决定整个文件的权限
[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ echo "hello world!" >> file.txt
[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ cat file.txt
hello Linux!
hello world!

● 当前用户与所属组匹配 

# 再次在root权限下,将所属组权限的读写去掉
[root@iZ2vcf9wvlgcetfeub9f11Z mydir]# chmod g-rw file.txt
[root@iZ2vcf9wvlgcetfeub9f11Z mydir]# ll
total 8
-r--rw-rw- 1 root root 13 Nov  5 09:50 a.c
-rw-rw-rw- 1 root root  0 Nov  4 08:02 b.c
-------rw- 1 root zyt  26 Nov  5 10:22 file.txt# 退回普通用户zyt后,文件就无法读和写了
[root@iZ2vcf9wvlgcetfeub9f11Z mydir]# su zyt
[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ cat file.txt
cat: file.txt: Permission denied
[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ echo "hello zyt!" >> file.txt
bash: file.txt: Permission denied

● 当前用户与others匹配 

# 在root权限下,将file.txt文件的所属组也改成root
[root@iZ2vcf9wvlgcetfeub9f11Z mydir]# chgrp root file.txt
[root@iZ2vcf9wvlgcetfeub9f11Z mydir]# su zyt
[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ ll
total 8
-r--rw-rw- 1 root root 13 Nov  5 09:50 a.c
-rw-rw-rw- 1 root root  0 Nov  4 08:02 b.c
-------rw- 1 root root 26 Nov  5 10:22 file.txt# 此时我们当前用户仍然是zyt,系统匹配时会匹配到others
# 所以当前用户对文件的权限是others位置对应的权限,可读可写
[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ echo "hello zyt!" >> file.txt
[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ cat file.txt
hello Linux!
hello world!
hello zyt!

<4> root用户的权限?

-> 不受权限约束!!

# 先把拥有者所属组都改成zyt(后面会细讲的)
[root@iZ2vcf9wvlgcetfeub9f11Z mydir]# chown zyt:zyt file.txt# 将当前用户切换成另一个普通用户dbg
[root@iZ2vcf9wvlgcetfeub9f11Z mydir]# ls /home
admin  dbg  zyt
[root@iZ2vcf9wvlgcetfeub9f11Z mydir]# su dbg
[dbg@iZ2vcf9wvlgcetfeub9f11Z mydir]$ whoami
dbg# 此时匹配的角色是others,file.txtx文件的others角色没有任何权限
[dbg@iZ2vcf9wvlgcetfeub9f11Z mydir]$ ll
total 8
-r--rw-rw- 1 root root 13 Nov  5 09:50 a.c
-rw-rw-rw- 1 root root  0 Nov  4 08:02 b.c
-rw-rw---- 1 zyt  zyt  37 Nov  5 10:38 file.txt# 不能读不能写
[dbg@iZ2vcf9wvlgcetfeub9f11Z mydir]$ cat file.txt
cat: file.txt: Permission denied
[dbg@iZ2vcf9wvlgcetfeub9f11Z mydir]$ echo "dbg" >> file.txt
bash: file.txt: Permission denied# 当前用户身份切换到root -> Ctrl+d
[dbg@iZ2vcf9wvlgcetfeub9f11Z mydir]$ exit 
[root@iZ2vcf9wvlgcetfeub9f11Z mydir]# whoami
root# 仍然可以读
[root@iZ2vcf9wvlgcetfeub9f11Z mydir]# cat file.txt
hello Linux!
hello world!
hello zyt!# 甚至去掉所有角色的权限后照样能读能写
[root@iZ2vcf9wvlgcetfeub9f11Z mydir]# chmod a-rwx file.txt
[root@iZ2vcf9wvlgcetfeub9f11Z mydir]# ll
total 8
-r--rw-rw- 1 root root 13 Nov  5 09:50 a.c
-rw-rw-rw- 1 root root  0 Nov  4 08:02 b.c
---------- 1 zyt  zyt  37 Nov  5 10:38 file.txt
[root@iZ2vcf9wvlgcetfeub9f11Z mydir]# echo "hello dbg!" >> file.txt
[root@iZ2vcf9wvlgcetfeub9f11Z mydir]# cat file.txt
hello Linux!
hello world!
hello zyt!
hello dbg!

<5> 如何理解可执行?

可执行权限 != 文件可执行(具体能不能执行还要看文件是不是二进制的可执行文件)

# 此时的file.txt就是个空文件,就算有执行的权限也无法执行
[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ chmod u+x file.txt
[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ ll
total 8
-r--rw-rw- 1 root root 13 Nov  5 09:50 a.c
-rw-rw-rw- 1 root root  0 Nov  4 08:02 b.c
-rwxrw-rw- 1 zyt  zyt  48 Nov  5 10:52 file.txt
[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ ./file.txt
./file.txt: line 1: hello: command not found
./file.txt: line 2: hello: command not found
./file.txt: line 3: hello: command not found
./file.txt: line 4: hello: command not found
[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ touch test.c
# 此时test.c是我们写的C语言程序,文件有x权限,gcc编译后就可执行
[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ nano test.c
[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ gcc test.c -o mytest
[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ ll
total 40
-r--rw-rw- 1 root root    13 Nov  5 09:50 a.c
-rw-rw-rw- 1 root root     0 Nov  4 08:02 b.c
-rwxrw-rw- 1 zyt  zyt     48 Nov  5 10:52 file.txt
-rwxrwxr-x 1 zyt  zyt  25184 Nov  5 11:09 mytest
-rw-rw-r-- 1 zyt  zyt     81 Nov  5 11:09 test.c
[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ ./mytest
hello test!
[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ chmod u-x mytest
[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ ll
total 40
-r--rw-rw- 1 root root    13 Nov  5 09:50 a.c
-rw-rw-rw- 1 root root     0 Nov  4 08:02 b.c
-rwxrw-rw- 1 zyt  zyt     48 Nov  5 10:52 file.txt
-rw-rwxr-x 1 zyt  zyt  25184 Nov  5 11:09 mytest
-rw-rw-r-- 1 zyt  zyt     81 Nov  5 11:09 test.c
[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ ./mytest
bash: ./mytest: Permission denied

② chown命令

功能 :修改文件的拥有者
格式 chown [ 参数 ] 用户名 文件名

系统默认普通用户不能把文件给别人,除非指令提权到 root。

[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ chown root test.c
chown: changing ownership of 'test.c': Operation not permitted
[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ chown dbg test.c
chown: changing ownership of 'test.c': Operation not permitted[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ sudo chown root test.c
[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ ll
total 40
-r--rw-rw- 1 root root    13 Nov  5 09:50 a.c
-rw-rw-rw- 1 root root     0 Nov  4 08:02 b.c
-rwxrw-rw- 1 zyt  zyt     48 Nov  5 10:52 file.txt
-rwxrwxr-x 1 zyt  zyt  25184 Nov  5 11:09 mytest
-rw-rw-r-- 1 root zyt     81 Nov  5 11:09 test.c
# 拥有者所属组一块修改了
[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ sudo chown zyt:zyt test.c
[sudo] password for zyt: 
[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ ll
total 40
-r--rw-rw- 1 root root    13 Nov  5 09:50 a.c
-rw-rw-rw- 1 root root     0 Nov  4 08:02 b.c
-rwxrw-rw- 1 zyt  zyt     48 Nov  5 10:52 file.txt
-rwxrwxr-x 1 zyt  zyt  25184 Nov  5 11:09 mytest
-rw-rw-r-- 1 zyt  zyt     81 Nov  5 11:09 test.c

③ chgrp命令

功能 :修改文件或目录的所属组
格式 chgrp [ 参数 ] 用户组名 文件名
常用选项 -R 递归修改文件或目录的所属组
[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ sudo chgrp root test.c
[zyt@iZ2vcf9wvlgcetfeub9f11Z mydir]$ ll
total 40
-r--rw-rw- 1 root root    13 Nov  5 09:50 a.c
-rw-rw-rw- 1 root root     0 Nov  4 08:02 b.c
-rwxrw-rw- 1 zyt  zyt     48 Nov  5 10:52 file.txt
-rwxrwxr-x 1 zyt  zyt  25184 Nov  5 11:09 mytest
-rw-rw-r-- 1 zyt  root    81 Nov  5 11:09 test.c

④ umask命令

稍后会细讲,到时返回来看!

功能
查看或修改文件掩码
新建文件夹默认权限=0666
新建目录默认权限=0777
但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到
umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask
格式:umask 权限值
说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022,普通用
户默认为0002。
示例:
# umask 755
# umask // 查看
# umask 044// 设置

(5) 问题一:目录的权限

可执行权限:如果目录没有可执行权限,则无法cd到目录中

可读权限:如果目录没有可读权限,则无法用ls等命令查看目录中的文件内容

可写权限:如果目录没有可写权限,则无法在目录中创建文件,也无法在目录中删除文件

默认情况下,新建一个目录,rwx权限都要有!

-》理解Linux下用户之间相互“隔离”?

-》在Linux系统当中,每建立一个新用户,系统都会在 /home目录下创建一个以特定用户名命名的文件夹,之后我们再登录该用户时,所有的操作都是在/home/username目录下实现的,该文件夹的拥有者、所属组都是自己,所以该文件夹的权限只对自己开放,其他用户(非root账号),无法进入该用户的家目录。

[root@iZ2vcf9wvlgcetfeub9f11Z mydir]# ll /home
total 12
drwx------ 3 admin admin 4096 Sep  1 19:29 admin
drwx------ 2 dbg   dbg   4096 Nov  5 10:50 dbg
drwx------ 2 zyt   zyt   4096 Nov  4 16:08 zyt

(6) 问题2:缺省权限

① 为什么默认权限是现在这样?

对于普通文件来讲:起始权限是 666,默认不带可执行(x)。

对于目录文件来讲:起始权限是 777,默认携带可执行(x)。

[zyt@iZ2vcf9wvlgcetfeub9f11Z default_pri]$ mkdir dir
[zyt@iZ2vcf9wvlgcetfeub9f11Z default_pri]$ touch zyt.txt
[zyt@iZ2vcf9wvlgcetfeub9f11Z default_pri]$ ll
total 4
drwxrwxr-x 2 zyt zyt 4096 Nov  5 18:57 dir
-rw-rw-r-- 1 zyt zyt    0 Nov  5 18:57 zyt.txt

但我们下面演示看到的结果并不像上面所说的一样。其实是因为权限掩码!我们来查看一下当前系统的掩码:第一个0不考虑,也就是说我们得到的系统权限掩码是002。

[zyt@iZ2vcf9wvlgcetfeub9f11Z default_pri]$ umask
0002

最终权限 = 起始权限 & (-umask) !!!

eg:777(起始权限) —> 111 111 111 (777的二进制) 

002 (umask) —> 000 000 010 (002二级制) —> 111 111 101 (按位取反) 

(111 111 111) & (111 111 101) —> 111 111 101 —> 775 (八进制)

② 设置umask的目的是什么?

希望凡是在umask中出现的权限,都不应该在最终权限中出现。未来如果不想让建立的默认文件的具有某种权限,可以直接在umask中添加。也就是用umask控制缺省权限!

③ 为什么要有umask?

a、默认权限,由OS自主决定,无法在创建前修改—系统可配置,可以灵活满足需要

b、特殊情况下,配置umask,可以控制文件的默认权限,让我们的代码都是可控的。

④ 修改umask

系统规定的umask (比如刚刚查到的是0002) 是内存级的,重登录之后会变回默认的umask。 

[zyt@iZ2vcf9wvlgcetfeub9f11Z default_pri]$ umask 0777
[zyt@iZ2vcf9wvlgcetfeub9f11Z default_pri]$ umask
0777
[zyt@iZ2vcf9wvlgcetfeub9f11Z default_pri]$ mkdir newdir
[zyt@iZ2vcf9wvlgcetfeub9f11Z default_pri]$ touch 1.txt
[zyt@iZ2vcf9wvlgcetfeub9f11Z default_pri]$ ll
total 8
---------- 1 zyt zyt    0 Nov  5 19:32 1.txt
drwxrwxr-x 2 zyt zyt 4096 Nov  5 18:57 dir
d--------- 2 zyt zyt 4096 Nov  5 19:32 newdir
-rw-rw-r-- 1 zyt zyt    0 Nov  5 18:57 zyt.txt

(7) 问题3:粘滞位

① 非文件拥有者却能删除文件?

 一个文件是否被删除,与文件本身无关!与文件所处目录是否具有w权限有关!也就是说,只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写权限。

[zyt@iZ2vcf9wvlgcetfeub9f11Z default_pri]$ touch 1.txt
[zyt@iZ2vcf9wvlgcetfeub9f11Z default_pri]$ sudo touch 2.txt
[sudo] password for zyt: 
[zyt@iZ2vcf9wvlgcetfeub9f11Z default_pri]$ ll
total 0
-rw-rw-r-- 1 zyt  zyt  0 Nov  5 19:49 1.txt
-rw-r--r-- 1 root root 0 Nov  5 19:49 2.txt# 当前用户在2.txt文件的匹配角色是others,没有写权限的
[zyt@iZ2vcf9wvlgcetfeub9f11Z default_pri]$ echo "hello" > 2.txt
bash: 2.txt: Permission denied# 但是能够删除!!
[zyt@iZ2vcf9wvlgcetfeub9f11Z default_pri]$ rm 2.txt
rm: remove write-protected regular empty file '2.txt'? y
[zyt@iZ2vcf9wvlgcetfeub9f11Z default_pri]$ ll
total 0
-rw-rw-r-- 1 zyt zyt 0 Nov  5 19:49 1.txt

情况1:我张三创建的一个文件, 凭什么被你李四可以删掉?这个问题出现不多,因为用户目录之间对others角色的权限一般是---,但也就是说李四在张三的专属文件夹里创建了李四的文件,张三是有权利对李四文件删除的啊!所以这种情况其实是科学的。

情况2:但如果两个用户要进行文件级别的协作呢?那么这个文件就不能放在任何一个私人账号里了!一般新建的共享文件会放在 /根目录下,或者用系统的 /tmp目录(/tmp目录一般是存放临时文件,临时数据的)。这个新建共享文件在 /home/username 之上,所以多个用户都可以在该共享文件里进行操作。但带来的问题也是任何用户都能删除该文件夹里的文件!这就不科学了!

# 用root权限在/目录创建一个共享文件temp-backup
[zyt@iZ2vcf9wvlgcetfeub9f11Z /]$ sudo mkdir temp-backup
[sudo] password for zyt: 
[zyt@iZ2vcf9wvlgcetfeub9f11Z /]$ ll
total 80
lrwxrwxrwx    1 root root     7 Feb  9  2022 bin -> usr/bin
dr-xr-xr-x.   5 root root  4096 Apr 13  2022 boot
drwxr-xr-x    5 root root  4096 May 29  2022 data
drwxr-xr-x   17 root root  2980 Sep  1 19:42 dev
drwxr-xr-x.  91 root root 12288 Nov  5 15:01 etc
drwxr-xr-x.   5 root root  4096 Nov  5 10:48 home
drwxr-xr-x    3 root root  4096 Nov  4 08:11 lesson
lrwxrwxrwx    1 root root     7 Feb  9  2022 lib -> usr/lib
lrwxrwxrwx    1 root root     9 Feb  9  2022 lib64 -> usr/lib64
drwx------.   2 root root 16384 Apr 13  2022 lost+found
drwxr-xr-x.   2 root root  4096 Feb  9  2022 media
drwxr-xr-x.   2 root root  4096 Feb  9  2022 mnt
drwxr-xr-x.   2 root root  4096 Feb  9  2022 opt
dr-xr-xr-x  209 root root     0 Sep  1 19:39 proc
dr-xr-x---.   9 root root  4096 Nov  3 09:50 root
drwxr-xr-x   29 root root   880 Sep  1 19:40 run
lrwxrwxrwx    1 root root     8 Feb  9  2022 sbin -> usr/sbin
drwxr-xr-x.   2 root root  4096 Feb  9  2022 srv
dr-xr-xr-x   13 root root     0 Sep  1 19:39 sys
drwxr-xr-x    2 root root  4096 Nov  6 09:17 temp-backup
drwxrwxrwt.   4 root root  4096 Nov  6 07:39 tmp
drwxr-xr-x.  12 root root  4096 Apr 13  2022 usr
drwxr-xr-x.  21 root root  4096 Apr 13  2022 var# 将共享文件所以权限改成可读可写可执行
[zyt@iZ2vcf9wvlgcetfeub9f11Z /]$ sudo chmod a+rwx temp-backup
[zyt@iZ2vcf9wvlgcetfeub9f11Z /]$ cd temp-backup# 用zyt用户创建一个普通文件
[zyt@iZ2vcf9wvlgcetfeub9f11Z temp-backup]$ touch zyt.txt
[zyt@iZ2vcf9wvlgcetfeub9f11Z temp-backup]$ ll
total 0
-rw-rw-r-- 1 zyt zyt 0 Nov  6 09:18 zyt.txt# 对others角色加上可写权限,这样其他用户也能对该文件写入
[dbg@iZ2vcf9wvlgcetfeub9f11Z temp-backup]$ exit
[zyt@iZ2vcf9wvlgcetfeub9f11Z temp-backup]$ chmod o+w zyt.txt
[zyt@iZ2vcf9wvlgcetfeub9f11Z temp-backup]$ ll
total 4
-rw-rw-rw- 1 zyt zyt 10 Nov  6 09:19 zyt.txt# 用户切换成dbg,对zyt.txt也能可读可写
[zyt@iZ2vcf9wvlgcetfeub9f11Z temp-backup]$ su dbg
Password: 
[dbg@iZ2vcf9wvlgcetfeub9f11Z temp-backup]$ echo "hello dbg" >> zyt.txt
[dbg@iZ2vcf9wvlgcetfeub9f11Z temp-backup]$ cat zyt.txt
hello zyt
hello dbg# 但也能对文件删除,甚至没有提示语句,有一定风险!
[dbg@iZ2vcf9wvlgcetfeub9f11Z temp-backup]$ rm zyt.txt
[dbg@iZ2vcf9wvlgcetfeub9f11Z temp-backup]$ ll
total 0

-》为了解决这个不科学的问题, 解决需求:我们不想让非文件拥有者删除共享类文件内的对应文件,但还想让任何用户都可以新建、读取和写入文件,也就是共享。可是删除和写入操作对应的是同一个权限w,所以Linux引入了粘滞位的概念。

② 粘滞位 +t(权限标志位)

[root@iZ2vcf9wvlgcetfeub9f11Z /]# chmod +t temp-backup/

1、介绍:直接写 +t(一般会加给others),也就是权限位约束。others角色(非文件拥有者)不能删除该文件了,即使上级的共享文件夹有w权限!但root用户不会被限制的。

2、粘滞位特征: 只能给需要共享的目录添加粘滞位。

那么当一个目录被设置为“粘滞位”(用chmod +t),则该目下的文件只能由:

 超级管理员删除、该目录的所有者删除、该文件的所有者删除。

3、示例: 

# 在共享文件夹里用dbg用户创建一个普通文件,并对其others角色添加权限
[dbg@iZ2vcf9wvlgcetfeub9f11Z temp-backup]$ touch dbg.txt
[dbg@iZ2vcf9wvlgcetfeub9f11Z temp-backup]$ chmod o+w dbg.txt
[dbg@iZ2vcf9wvlgcetfeub9f11Z temp-backup]$ ll
total 0
-rw-rw-rw- 1 dbg dbg 0 Nov  6 09:45 dbg.txt# zyt用户对dbg.txt文件能读能写但无法删除了
[dbg@iZ2vcf9wvlgcetfeub9f11Z temp-backup]$ su zyt
Password: 
[zyt@iZ2vcf9wvlgcetfeub9f11Z temp-backup]$ echo "hello zyt" > dbg.txt
[zyt@iZ2vcf9wvlgcetfeub9f11Z temp-backup]$ cat dbg.txt
hello zyt
[zyt@iZ2vcf9wvlgcetfeub9f11Z temp-backup]$ rm dbg.txt
rm: cannot remove 'dbg.txt': Operation not permitted

4.总结

● 目录的可执行权限是表示你可否在目录下执行文件

● 如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd进入;即使目录有-r权限(这里很容易错误认为:有读权限就可以进入目录读取目录下的文件)

● 而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,cd进入目录。但是由于没有读权限,所以在目录下,即使可以执行ls命令,但扔饭没哟权限读文档。

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

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

相关文章

神经网络基础--什么是神经网络?? 常用激活函数是什么???

前言 本专栏更新神经网络的一些基础知识&#xff1b;案例代码基于pytorch&#xff1b;欢迎收藏 关注&#xff0c; 本人将会持续更新。 神经网络 1、什么是神经网络 人工神经网络&#xff08; Artificial Neural Network&#xff0c; 简写为ANN&#xff09;也简称为神经网络…

猫头虎分享: AI设计利器 Recraft详解与基础使用教程

&#x1f981;猫头虎分享&#xff1a;AI设计利器 Recraft——全面解析与教程 大家好&#xff0c;我是猫头虎&#xff01;今天为大家带来一款非常炙手可热的 AI 设计工具 —— Recraft 的深度介绍与详细教程。这款工具自推出以来&#xff0c;就迅速获得了全球设计师的青睐。那么…

Python进阶之IO操作

文章目录 一、文件的读取二、文件内容的写入三、之操作文件夹四、StringIO与BytesIO 一、文件的读取 在python里面&#xff0c;可以使用open函数来打开文件&#xff0c;具体语法如下&#xff1a; open(filename, mode)filename&#xff1a;文件名&#xff0c;一般包括该文件所…

《安富莱嵌入式周报》第345期:开源蓝牙游戏手柄,USB3.0 HUB带电压电流测量,LCR电桥前端模拟,开源微型赛车,RF信号扫描仪,开源无线电收发器

周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 本周更新一期视频教程 第5期&#xff1a;RTX5/FreeRTOS全家桶源码工程综合实战模板集成CANopen组件&#xff08;2024-1…

「Mac畅玩鸿蒙与硬件20」鸿蒙UI组件篇10 - Canvas 组件自定义绘图

Canvas 组件在鸿蒙应用中用于绘制自定义图形&#xff0c;提供丰富的绘制功能和灵活的定制能力。通过 Canvas&#xff0c;可以创建矩形、圆形、路径、文本等基础图形&#xff0c;为鸿蒙应用增添个性化的视觉效果。本篇将介绍 Canvas 组件的基础操作&#xff0c;涵盖绘制矩形、圆…

用流量策略做多出口实验

一、拓扑&#xff1a; 二、配置过程&#xff1a; 1、配置 IP 地址&#xff0c;配置动态路由协议 OSPF 2、AR2 上&#xff0c;配置高级 ACL&#xff0c;允许 ospf 流量、1 到 6、2 到 8、deny 所有 3、写流分类&#xff0c;抓取流量特征 4、写流行为&#xff0c;配置流量动作 5、…

【Golang】sql.Null* 类型使用(处理空值和零值)

sql.NullString 和 sql.NullInt64 类型&#xff08;以及其他类似的 sql.Null* 类型&#xff09;在处理数据库操作时非常有用&#xff0c;尤其是在 Go 语言的 database/sql 包中。它们的主要用途包括&#xff1a; 表示 NULL 值&#xff1a; 在数据库中&#xff0c;NULL 表示“没…

【前端】如何在 JSX 中使用条件语句和循环

在 JSX 中使用条件语句和循环是常见的需求&#xff0c;尤其是在构建动态用户界面时。以下是如何在 JSX 中使用条件语句和循环的详细说明。 条件语句 1. 三元运算符 三元运算符是最简单的条件语句形式&#xff0c;适用于简单的条件判断。 const isLoggedIn true;const ele…

Rust移动开发:Rust在Android端集成使用介绍

Andorid调用Rust 目前Rust在移动端上的应用&#xff0c;一般作为应用sdk的提供&#xff0c;供各端使用&#xff0c;目前飞书底层使用Rust编写通用组件。 该篇适合对Android、Rust了解&#xff0c;想看如何做整合&#xff0c;如果想要工程源码&#xff0c;可以评论或留言有解疑…

UE hard/soft reference| DDX DDY | Unity pcg color

目录 1.虚幻引擎性能优化 &#xff08;附0跳转Unity对应机制&#xff09; hard reference and soft reference 1. 硬引用&#xff08;Hard Reference&#xff09; 2. 软引用&#xff08;Soft Reference&#xff09; 3. 使用原则 2.空间梯度转法线 DDX DDY节点 ​编辑 …

【UE5】一种老派的假反射做法,可以用于移动端,或对反射的速度、清晰度有需求的地方

没想到大家这篇文章呼声还挺高 这篇文章是对它的详细实现&#xff0c;建议在阅读本篇之前&#xff0c;先浏览一下前面的文章&#xff0c;以便更好地理解和掌握内容。 这种老派的假反射技术&#xff0c;适合用于移动端或对反射效果的速度和清晰度有较高要求的场合。该技术通过一…

前端学习Day12 CSS盒子的定位(相对定位篇“附练习”)

一、相对定位 使用相对定位的盒子会相对于自身原本的位置&#xff0c;通过偏移指定的距离&#xff0c;到达新的位置。盒子的本体仍处于文档流中。使用相对定位&#xff0c;除了要将 position 属性值设置为 relative 外&#xff0c;还需要指定一定的偏移量。其中&#xff0c;水…

基于微信小程序的移动学习平台的设计与实现+ssm(lw+演示+源码+运行)

摘 要 由于APP软件在开发以及运营上面所需成本较高&#xff0c;而用户手机需要安装各种APP软件&#xff0c;因此占用用户过多的手机存储空间&#xff0c;导致用户手机运行缓慢&#xff0c;体验度比较差&#xff0c;进而导致用户会卸载非必要的APP&#xff0c;倒逼管理者必须改…

git 工具原理

git 目录 git git的使用 了解git的三个区域 具体操作 如何下载别人上传到git的工程 -- 可以参考菜鸟教程&#xff0c;包括安装配置git Git 安装配置 | 菜鸟教程 -- Git 是一种分布式版本控制系统&#xff0c;用于管理软件项目的源代码。它是由 Linux 之父 Linus Torval…

Linux操作系统:学习进程_对进程的深入了解

目录 前言 开篇 一、进程概念 二、进程的描述与管理 1、如何描述与管理 2、Linux中的PCB-task_struct 3、对进程组织的理解 三、进程的属性 1、系统创建进程 2、查看进程 3、进程的标识符 4、退出进程 1>ctrlc 2>kill命令杀死进程 5、用户进程的创建方式…

力扣:225 用队列实现栈

栈、队列 栈&#xff1a; 弹夹&#xff0c;后进先出 队列&#xff1a; 排队&#xff0c;先进先出 描述&#xff1a; var MyStack function () {// 定义两个数组&#xff0c;模拟队列this.queue []this._queue [] };/** * param {number} x* return {void}*/ MyStack.protot…

lora训练模型 打造个人IP

准备工作 下载秋叶炼丹器整理自己的照片下载底膜 https://rentry.org/lycoris-experiments 实操步骤 解压整合包 lora-scripts,先点击“更新” 训练图片收集 比如要训练一个自己头像的模型&#xff0c;就可以拍一些自己的照片&#xff08;20-50张&#xff0c;最少15张&…

IO 多路复用技术:原理、类型及 Go 实现

文章目录 1. 引言IO 多路复用的应用场景与重要性高并发下的 IO 处理挑战 2. IO 多路复用概述什么是 IO 多路复用IO 多路复用的优点与适用场景 3. IO 多路复用的三种主要实现3.1 select3.2 poll3.3 epoll三者对比 4. 深入理解 epoll4.1 epoll 的三大操作4.2 epoll 的核心数据结构…

大数据新视界 -- 大数据大厂之 Impala 性能优化:从数据压缩到分析加速(下)(8/30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

信息学奥赛一本通 1395:烦人的幻灯片(slides)

【题目链接】 ybt 1395&#xff1a;烦人的幻灯片(slides) 【题目考点】 1. 图论&#xff1a;拓扑排序 【解题思路】 先理解题意&#xff1a; 如图&#xff0c;每张幻灯片是一个矩形&#xff0c;在该矩形范围内有一个位置写了这张幻灯片的编号。但实际情况是幻灯片是透明…