Linux系统 (三)- 权限介绍

news2024/10/5 18:30:12


~~~~

  • 前言
  • 命令行解释器 -- Command Line Interpreter Shell
    • Linux操作系统
    • 命令行解释器
      • 对命令行解释器的初步认识
      • 命令行解释器的意义
      • shell分类
        • 命令行解释器 CLI Shell
        • 图形界面 GUI Shell
  • Linux权限
    • Linux中用户分类
    • su
      • 基本语法
    • sudo
      • 基本语法
      • 配置操作
  • 权限管理
    • 权限是什么
      • 文件分类
      • 文件属性
        • 文件类型
        • 用户权限
        • file 查看文件类型
    • 权限相关操作
      • 文件权限表示方法
      • 设置文件属性
        • chmod
      • 设置文件所属角色
        • chown 修改拥有者
        • chgrp 修改所属组
    • 为什么有权限
      • umask 权限掩码
        • 权限掩码引入
        • umask的作用
      • 对目录的默认权限是0777的分析
    • 粘滞位
      • 引入
      • 粘滞位概念
        • 格式
  • 权限到底讲了啥
  • 结语

前言

本节介绍Linux中权限的概念!


命令行解释器 – Command Line Interpreter Shell

Linux操作系统

Linux操作系统分为内核和命令行解释器shell
image.png

我们使用Linux操作系统一般并不直接与Linux内核kernel)直接打交道,而是借助一个命令行解释器,我们通过与命令行解释器打交道,命令行解释器再与Linux系统内核打交道,从而达到间接的与Linux操作系统内核打交道。

命令行解释器

命令行解释器的表现是命令行提示符,同时我们输入指令有命令行解释器执行;

[root@VM-4-17-centos dir]# 
[root@VM-4-17-centos dir]# ls
file.txt  test.c  test.txt

对命令行解释器的初步认识

命令行解释器又称作外壳程序shell

shell在用户和Linux内核之间扮演的角色是中间人的角色,建立起了用户和Linux操作系统内核沟通的桥梁;

用户不便于直接对Linux操作系统内核进行操作,因为操作系统向用户提供的是大量的系统接口,如果用户想要直接访问操作系统内核,需要调用这些接口,这十分不方便;
shell外壳程序很好的帮助我们解决了用户直接访问操作系统所带来的繁琐操作与不便等问题;
shell外壳程序为用户提供了简洁多样的命令,用户直接在shell外壳程序上输入相应的shell提供的命令,shell在对这些命令进行解释转换,然后调用相应的Linux操作系统提供的系统接口,然后Linux操作系统执行完相应操作之后返回结果,shell在对返回的结果进行解释转换,最后显示到命令行窗口中反馈给用户;
image.png

其实,shell本身并不直接进行上述操作过程,即shell本身不直接对用户命令进行解释转换执行,shell会派生出多个shell子进程,由shell子进程实际执行用户命令;
这是因为shell对于Linux操作系统和用户来说十分重要,是二者沟通的媒介,所以shell本身也就十分重要;我们为了确保shell不会意外的崩溃,导致用户无法通过shell访问操作系统,所以shell本身不会亲自执行用户命令;


命令行解释器的意义

shell外壳程序很好的帮助我们解决了用户直接访问操作系统所带来的繁琐操作与不便等问题;
操作系统对于一台机器是十分重要的,shell则避免一些由于用户非法操作而导致的操作系统崩溃,shell可以对用户输入的指令和合法性进行判断,如果是非法指令shell就直接反馈到命令行,而不会访问操作系统,这样shell便一定程度上保护了操作系统,提高了操作系统运行的稳定性和安全性;

shell分类

命令行解释器 CLI Shell

shell是命令行解释器的统称,shell包括许多分类:

bash/sh/ksh/cshUnix/Linux
cmd.exewindows

图形界面 GUI Shell

微软windows图形界面:Windows Explorer

Linux shell程序和图形界面是平行关系;
用户通过鼠标对图标进行的相关操作会有图形界面Shell进行相应的解释转换,然后调用操作系统接口执行相关操作,操作系统返回结果给图形界面Shell,然后图形界面Shell再将结果以图形化的方式反馈给用户;


Linux权限

Linux中用户分类

超级用户root:基本不受Linux系统限制,可以做任何事
普通用户:受Linux权限约束,只能做权限允许的事

超级用户的命令提示符时#

[root@VM-4-17-centos dir]#

普通用户的命令提示符是$

[weihe@VM-4-17-centos dir]$

su

基本语法

su 用户名

功能

切换用户,su后不加用户名默认切换为root用户

[root@VM-4-17-centos dir]# su weihe

image.png

[weihe@VM-4-17-centos dir]$ su
Password: 
[root@VM-4-17-centos dir]#

image.png


sudo

基本语法

sudo 

功能

暂时提权,使当前用户具有root的权限
首次提权时需要输入root用户密码;
当前普通用户提权成功后的一段时间内再次提权不需要再输入root用户密码,只需要输入已提权成功的普通用户密码即可,比较方便

普通用户weihe提权创建新用户 newuser1

//首次提权
[weihe@VM-4-17-centos weihe.dir]$ sudo adduser newuser1
[sudo] password for weihe:

image.png
显示提权失败,当前普通用户weihe不在提权文件sudoers中,即系统当前不信任普通用户weihe,我们需要先把普通用户未禾加入到白名单sudoers中;

配置操作

把未受当前Linux操作系统信任的用户你能够执行sudo命令,我们需要使用root用户对文件sudoers进行一些配置;
sudoers文件,一般在/etc/sudoers
首先使用vim打开sudoers文件

[root@VM-4-17-centos etc]# vim /etc/sudoers

:(shift+;)进入vim底行模式,在底行中输入命令set nu设置行号

:set nu

在100行左右找到## Allow root to run any commands anywhere这一行

99 ## Allow root to run any commands anywhere 
100 root    ALL=(ALL)       ALL
101 weihe   ALL=(ALL)       ALL
102 sjh     ALL=(ALL)       ALL

image.png
## Allow root to run any commands anywhere下方增加一行
格式为

待信任用户名    ALL=(ALL)       ALL

配置完成后,新信任的用户就可以执行**sudo**命令并且不需要输入root用户密码,只需要输入自己的密码即可,因为自己已经是受信任的用户了;

[weihe@VM-4-17-centos dir]$ sudo whoami
[sudo] password for weihe: 

image.png


权限管理

权限是什么

Linux中的权限不是凭空而来的,是来源于实际生活,比如法律对人的约束,道德对人的约束,黑胶VIP对普通用户的约束等;
Linux中权限是对用户的约束;

权限对于一类用户可以分为三种:

  • 受权限约束:用户受权限限制
  • 不受权限约束:用户不受权限限制;
  • 不存在权限:本来就不具有相应权限,也就不存在受不受约束的问题了;

文件权限 = 角色 + 文件属性;

文件分类

角色是一个概括的概念具体可以分为三类
拥有者:文件和目录的拥有者,user/own,简写为u
所属组:文件和目录的拥有者所在的组的用户,group,简写为g
其他人:除了拥有者和所属组之外的用户,other,简写为o

文件属性

文件属性的概念前面我们已经接触过,一个文件是由文件内容和文件属性组成的;
文件属性包括哪些呢?

[root@VM-4-17-centos dir]# ll
total 4
drwxr-xr-x 2 root root 4096 Oct 28 12:16 dir
-rwxrwxrw- 1 root root    0 Oct 27 23:12 file.txt

image.png

文件类型

对文件类型的说明
Linux操作系统的文件类型与文件后缀无关,而是在文件属性中以第一个字符区分文件类型,这一点与windows操作系统有着明显的区别;

开头的第一个字符

虽然Linux操作系统不以文件名后缀区分文件类型,但这并不影响我们定义文件名时加上后缀,也不影响我们以文件名后缀的方式区分文件类型;

-rw-rw-rw- 1 weihe weihe   79 Oct 28 14:26 file.c
-rw-rw-r-- 1 weihe weihe    0 Oct 28 14:33 file.txt

同时,Linux中有着许多的工具,某些工具对文件名后缀有着特殊的要求,这要求我们要把文件名修改为特定的后缀名;
比如gcc编译器要求源文件后缀是.c,如果不是就报错

[weihe@VM-4-17-centos 2022_10_26]$ gcc file.txt 
file.txt: file not recognized: File format not recognized
collect2: error: ld returned 1 exit status

第一个字符表示文件类型

- 普通文件
源代码、可执行程序、库程序、压缩文件等

-rwxrwxrw- 1 root root    0 Oct 27 23:12 file.txt

d 目录文件

drwxr-xr-x 2 root root 4096 Oct 28 12:16 dir

c 字符设备文件
键盘、显示器等

[root@VM-4-17-centos dir]# ll /dev/tty
crw-rw-rw- 1 root tty     5,  0 Oct 28 11:36 /dev/tty

b 块设备文件
磁盘

[root@VM-4-17-centos dir]# ll /dev/vda1
brw-rw---- 1 root disk 253, 1 Oct 17 12:22 /dev/vda1

l 链接文件

[root@VM-4-17-centos dir]# ln -s a.out a.link
[root@VM-4-17-centos dir]# ll
lrwxrwxrwx 1 root root    5 Oct 28 13:59 a.link -> a.out
-rwxr-xr-x 1 root root 8360 Oct 28 13:58 a.out

p 管道文件

[root@VM-4-17-centos dir]# mkfifo p
[root@VM-4-17-centos dir]# ll
prw-r--r-- 1 root root    0 Oct 28 14:01 p

s socket文件


用户权限

用户可以分为3类:拥有者、所属组、其他人
每一类用户都对应者三个权限

read/r/4
对于普通文件:能读取文件内容
对于目录:能浏览目录信息,查看目录包含的文件

write/w/2
对于普通文件:能修改文件内容
对于目录:能在目录中创建、移动、删除文件

execute/x/1
对于普通文件:能执行该文件,前提是改文件本身是可执行程序
对于目录:能进入目录内部

我们以拥有者user/owner视角为例对这三个权限进行举例说明
read/r
普通文件有r权限

-rw-rw-r-- 1 weihe weihe   14 Oct 28 14:36 file.txt
[weihe@VM-4-17-centos 2022_10_26]$ cat file.txt 
hello,world\n

普通文件没有r权限,打不带普通文件

--w-rw-r-- 1 weihe weihe   14 Oct 28 14:36 file.txt
[weihe@VM-4-17-centos 2022_10_26]$ cat file.txt 
cat: file.txt: Permission denied

目录文件有r权限

[weihe@VM-4-17-centos 2022_10_26]$ cd dir
[weihe@VM-4-17-centos dir]$ ls
test1.txt  test2.txt

目录文件没有r权限,看不到目录的内容

[weihe@VM-4-17-centos 2022_10_26]$ cd dir
[weihe@VM-4-17-centos dir]$ ls
ls: cannot open directory .: Permission denied

write/w
普通文件有w权限

-rwxrwxrwx 1 weihe weihe   14 Oct 28 14:36 file.txt
[weihe@VM-4-17-centos 2022_10_26]$ cat file.txt 
hello,world\n
[weihe@VM-4-17-centos 2022_10_26]$ echo "weihe" >>file.txt 
[weihe@VM-4-17-centos 2022_10_26]$ cat file.txt 
hello,world\n
weihe

普通文件没有w权限,写入操作不被允许

-r-xrwxrwx 1 weihe weihe   12 Oct 28 14:52 file.txt
[weihe@VM-4-17-centos 2022_10_26]$ echo "weihe" >> file.txt 
-bash: file.txt: Permission denied

目录文件有w权限

drwxrwxrwx 2 weihe weihe 4096 Oct 28 14:42 dir
[weihe@VM-4-17-centos 2022_10_26]$ cd dir
[weihe@VM-4-17-centos dir]$ ls
test1.txt  test2.txt
[weihe@VM-4-17-centos dir]$ touch newtest.txt
[weihe@VM-4-17-centos dir]$ ls
newtest.txt  test1.txt  test2.txt

目录文件没有w权限,不能在该目录创建、移动、删除文件

dr-xrwxrwx 2 weihe weihe 4096 Oct 28 14:54 dir
[weihe@VM-4-17-centos 2022_10_26]$ cd dir
[weihe@VM-4-17-centos dir]$ ls
test1.txt  test2.txt
[weihe@VM-4-17-centos dir]$ touch newtest.txt
touch: cannot touch ‘newtest.txt’: Permission denied

[weihe@VM-4-17-centos dir]$ mv test1.txt ..
mv: cannot move ‘test1.txt’ to ‘../test1.txt’: Permission denied

[weihe@VM-4-17-centos dir]$ rm -rf test1.txt 
rm: cannot remove ‘test1.txt’: Permission denied

execute/x
普通文件有x权限,同时本身能够执行时才执行

[weihe@VM-4-17-centos 2022_10_26]$ cat file.c 
#include <stdio.h>

int main(){
    printf("hello,world\n");
    return 0;
}
-rwxrwxrwx 1 weihe weihe   77 Oct 28 15:00 file.c
-rwxrwxr-x 1 weihe weihe 8360 Oct 28 15:00 a.out
[weihe@VM-4-17-centos 2022_10_26]$ ./a.out
hello,world

普通文件没有x权限,即使是可执行程序程序也不允许执行

-rw-rwxr-x 1 weihe weihe 8360 Oct 28 15:00 a.out
-rwxrwxrwx 1 weihe weihe   77 Oct 28 15:00 file.c
[weihe@VM-4-17-centos 2022_10_26]$ ./a.out
-bash: ./a.out: Permission denied

目录有x权限

drwxrwxrwx 2 weihe weihe 4096 Oct 28 14:54 dir
[weihe@VM-4-17-centos 2022_10_26]$ cd dir
[weihe@VM-4-17-centos dir]$ ls
test1.txt  test2.txt

目录没有x权限,目录不能进入

drw-rwxrwx 2 weihe weihe 4096 Oct 28 14:54 dir
[weihe@VM-4-17-centos 2022_10_26]$ cd dir
-bash: cd: dir: Permission denied

file 查看文件类型

基本语法

file 文件名
[weihe@VM-4-17-centos newdir]$ ll
-rw-rw-rw- 1 weihe weihe    0 Oct 28 18:18 file.txt
drw-rw-rw- 2 weihe weihe 4096 Oct 28 18:18 newdir
[weihe@VM-4-17-centos newdir]$ file file.txt 
file.txt: empty
[weihe@VM-4-17-centos newdir]$ file newdir/
newdir/: directory

image.png


权限相关操作

文件权限表示方法

字符表示

有权限用相应字符r/w/x表示,没有权限用-表示

8进制表示

有权限用1表示,没有权限用0表示

字符表示二进制表示八进制表示含义
- - -0000不可读不可写不可执行
- - x0011只可执行
- w -0102只可写
- wx0113可写可执行
r - -1004只可读
r - x1015可读可执行
rw -1106可读可写
rwx1117可读可写可执行

设置文件属性

文件属性是可以被修改的,并且只有文件拥有者和root用户才能够修改文件属性

chmod

chmod [参数]权限 文件名

功能

为拥有者user/owner设置文件属性

修改方式也有两种:字符方式和8进制方式
字符方式

加上单个读权限

[weihe@VM-4-17-centos 2022_10_26]$ ll
----rwxrwx 1 weihe weihe   77 Oct 28 15:00 file.c
[weihe@VM-4-17-centos 2022_10_26]$ chmod u+r file.c 
[weihe@VM-4-17-centos 2022_10_26]$ ll
-r--rwxrwx 1 weihe weihe   77 Oct 28 15:00 file.c

加上多个读写执行权限

[weihe@VM-4-17-centos 2022_10_26]$ ll
----rwxrwx 1 weihe weihe   77 Oct 28 15:00 file.c
[weihe@VM-4-17-centos 2022_10_26]$ chmod u+rwx file.c 
[weihe@VM-4-17-centos 2022_10_26]$ ll
-rwxrwxrwx 1 weihe weihe   77 Oct 28 15:00 file.

减去单个读权限

[weihe@VM-4-17-centos 2022_10_26]$ ll
-rwxrwxrwx 1 weihe weihe   77 Oct 28 15:00 file.c
[weihe@VM-4-17-centos 2022_10_26]$ chmod u-r file.c 
[weihe@VM-4-17-centos 2022_10_26]$ ll
--wxrwxrwx 1 weihe weihe   77 Oct 28 15:00 file.c

减去多个读写执行权限

[weihe@VM-4-17-centos 2022_10_26]$ ll
-rwxrwxrwx 1 weihe weihe   77 Oct 28 15:00 file.c
[weihe@VM-4-17-centos 2022_10_26]$ chmod u-rwx file.c
[weihe@VM-4-17-centos 2022_10_26]$ ll
----rwxrwx 1 weihe weihe   77 Oct 28 15:00 file.c

八进制方式
chmod指令后跟的时一个三位的八进制数,每一位分别对应拥有者/所属组/其他人的权限信息

加上单个读权限

[weihe@VM-4-17-centos 2022_10_26]$ ll
----rwxrwx 1 weihe weihe   77 Oct 28 15:00 file.c
[weihe@VM-4-17-centos 2022_10_26]$ chmod 477 file.c
[weihe@VM-4-17-centos 2022_10_26]$ ll
-r--rwxrwx 1 weihe weihe   77 Oct 28 15:00 file.c

image.png

加上多个读写执行权限

[weihe@VM-4-17-centos 2022_10_26]$ ll
----rwxrwx 1 weihe weihe   77 Oct 28 15:00 file.c
[weihe@VM-4-17-centos 2022_10_26]$ chmod 777 file.c
[weihe@VM-4-17-centos 2022_10_26]$ ll
-rwxrwxrwx 1 weihe weihe   77 Oct 28 15:00 file.c

image.png

减去单个读权限

[weihe@VM-4-17-centos 2022_10_26]$ ll
-rwxrwxrwx 1 weihe weihe   77 Oct 28 15:00 file.c
[weihe@VM-4-17-centos 2022_10_26]$ chmod 377 file.c 
[weihe@VM-4-17-centos 2022_10_26]$ ll
--wxrwxrwx 1 weihe weihe   77 Oct 28 15:00 file.c

image.png

减去多个读写执行权限

[weihe@VM-4-17-centos 2022_10_26]$ ll
-rwxrwxrwx 1 weihe weihe   77 Oct 28 15:00 file.c
[weihe@VM-4-17-centos 2022_10_26]$ chmod 077 file.c
[weihe@VM-4-17-centos 2022_10_26]$ ll
----rwxrwx 1 weihe weihe   77 Oct 28 15:00 file.c

image.png
选项 -R

递归修改目录文件的属性

[weihe@VM-4-17-centos 2022_10_26]$ ll -R
.:
total 4
drwxrwxrwx 2 weihe weihe 4096 Oct 28 14:54 dir

./dir:
total 0
-rwxrwxrwx 1 weihe weihe 0 Oct 28 14:42 test1.txt
-rwxrwxrwx 1 weihe weihe 0 Oct 28 14:42 test2.txt
[weihe@VM-4-17-centos 2022_10_26]$ chmod -R 555 dir
[weihe@VM-4-17-centos 2022_10_26]$ ll -R
.:
total 4
dr-xr-xr-x 2 weihe weihe 4096 Oct 28 14:54 dir

./dir:
total 0
-r-xr-xr-x 1 weihe weihe 0 Oct 28 14:42 test1.txt
-r-xr-xr-x 1 weihe weihe 0 Oct 28 14:42 test2.txt

设置文件所属角色

文件所属也可以被修改,但是只能有文件的拥有者或root进行修改

修改文件所属角色时,文件的拥有者不能直接对所属角色进行更改,而是要经过要将要修改为的那个角色的同意,然后才能继续进行修改;

为什么呢?因为文件所属角色往往与文件有直接关系,而文件到底是什么情况待接收角色可能不清楚,如果文件拥有者可以直接把文件所属进行随意更改,对待接收角色来说不一定是一件好事情;
现实中我们进行文件所属设置时并不能与待接收角色实时沟通,一般我们需要转换为root用户或sudo暂时提权来对文件所属进行更改,而不需要经过待接收角色的同意;


chown 修改拥有者

chown [参数] 新用户名 文件名
[weihe@VM-4-17-centos 2022_10_26]$ chown root file.c 
chown: changing ownership of ‘file.c’: Operation not permitted

普通用户作为文件拥有者不能修改拥有者

[root@VM-4-17-centos 2022_10_26]# ll
-rw-rw-rw- 1 weihe weihe   77 Oct 28 15:00 file.c
[root@VM-4-17-centos 2022_10_26]# chown root file.c 
[root@VM-4-17-centos 2022_10_26]# ll
-rw-rw-rw- 1 root  weihe   77 Oct 28 15:00 file.c

image.png
通过root用户进行文件拥有者的修改
chown可以对文件的拥有者和所属组同时进行修改,二者以冒号:分隔

[root@VM-4-17-centos 2022_10_26]# ll
-rw-rw-rw- 1 weihe weihe   77 Oct 28 15:00 file.c
[root@VM-4-17-centos 2022_10_26]# chown root:sym file.c 
[root@VM-4-17-centos 2022_10_26]# ll
-rw-rw-rw- 1 root  sym     77 Oct 28 15:00 file.c

image.png


chgrp 修改所属组

chgrp [参数] 新用户组名 文件名
[weihe@VM-4-17-centos 2022_10_26]$ chgrp root file.c 
chgrp: changing group of ‘file.c’: Operation not permitted

普通用户作为文件拥有者不能修改该文件所属组

[root@VM-4-17-centos 2022_10_26]# ll
-rw-rw-rw- 1 root  weihe   77 Oct 28 15:00 file.c
[root@VM-4-17-centos 2022_10_26]# chgrp root file.c
[root@VM-4-17-centos 2022_10_26]# ll
-rw-rw-rw- 1 root  root    77 Oct 28 15:00 file.c

image.png
通过root用户进行文件所属组的修改
other会随着拥有者和所属组的变化而自动变化,不需要我们修改;


为什么有权限

权限对某一类角色进行了约束限制,便于Linux操作系统对用户进行管理;

umask 权限掩码

权限掩码引入

我们在创建一个普通文件或目录时,普通文件和目录都会有初始文件属性信息,其中就包括了权限的信息;

[root@VM-4-17-centos 2022_10_26]# mkdir newdir
[root@VM-4-17-centos 2022_10_26]# ll
drwxr-xr-x 2 root  root  4096 Oct 28 16:32 newdir

字符表示:rwxr-xr-x
二进制:111101101
八进制:755

[root@VM-4-17-centos 2022_10_26]# touch test.txt
[root@VM-4-17-centos 2022_10_26]# ll
-rw-r--r-- 1 root  root     0 Oct 28 16:32 test.txt

字符表示:rw-r--r--
二进制:110100100
八进制:644

为什么初始普通文件和目录文件的权限是我们看到的这样呢?
首先,普通文件和目录文件系统规定了默认权限
默认权限以8进制表示,开头的0表示8进制

普通文件:0666

目录文件:0777

而文件初始权限由默认权限和~umask经过按位与之后得到
初始权限 = 默认权限&(~umask)

umask的作用

根据权限掩码umask的不同,对普通文件或目录进行相应权限的去除

查看root和普通用户的默认权限掩码

[root@VM-4-17-centos dir]# umask
0022
[weihe@VM-4-17-centos 2022_10_26]$ umask
0002

修改权限掩码

[weihe@VM-4-17-centos newdir]$ umask 0077 
[weihe@VM-4-17-centos newdir]$ umask
0077

image.png


文件权限生成过程分析
以权限掩码为0111为例进行分析

[weihe@VM-4-17-centos newdir]$ umask 0111
[weihe@VM-4-17-centos newdir]$ umask
0111

默认普通文件权限为0666
默认目录文件权限为0777
创建一个普通文件file.txt,其权限为0666
image.png

[weihe@VM-4-17-centos newdir]$ touch file.txt
[weihe@VM-4-17-centos newdir]$ ll
-rw-rw-rw- 1 weihe weihe    0 Oct 28 18:18 file.txt

创建一个目录newdir,其权限为0666
image.png

[weihe@VM-4-17-centos newdir]$ mkdir newdir
[weihe@VM-4-17-centos newdir]$ ll
drw-rw-rw- 2 weihe weihe 4096 Oct 28 18:18 newdir

对目录的默认权限是0777的分析

Linux系统规定目录的默认权限是0777,普通文件的默认权限是0666
为什么目录的默认权限要规定为0777?即rwxrwxrwx?而不是其他形式?

r对于目录是能看到目录的内容;
w对于目录是能创建/修改/删除目录内的内容;
x对于目录是能进入目录;

一般我们新创建一个目录时希望这个目录是能见r、可修改w和可进入的x
这样我们创建的新目录对权限如果没有特殊要求就不需要更改目录的权限,考虑到多数情况目录默认权限0777的设置是方便用户的;
像普通文件也是类似的道理:普通文件多数不具有可执行属性x,即使有了执行权限也是不能执行的,可能还需要用户手动去掉执行权限;而对于需要少数执行的普通文件由用户手动添加执行权限即可,考虑多数情况,没有执行权限更方便,所以普通文件的默认权限是0666;


粘滞位

引入

Linux支持多个用户共同使用,可能出现的一个情况是多个用户在同一个公共目录里进行开发工作,每个用户都会在公共目录创建自己的文件,并且可以为自己的文件设置不同用户的访问权限;
为了便于多个用户在公共目录(一般由root用户创建)创建文件等操作,公共目录文件对这多个用户的权限设置为可读可写可执行rwx
这样是为了方便用户在公共目录正常工作,可是这里有一个问题:

目录的w权限给予了者多个用户创建/移动/删除文件的权限,这里的删除权限导致了公共目录下,普通B用户具有了删除普通A用户拥有的文件的权利;即B用户未经A用户同意就可以删除A用户所有的文件,这是不合理的;

并且这个问题与公共目录下的用户所有的文件本身没有关系,文件本身的权限直到被删除前都还在对没有权限的用户起到正常的约束作用;即在A用户拥有的文件被B删除之前仍然对其他用户这可能包括B具有相应的约束作用;
例子

drwxrwxrwx 2 root root 4096 Oct 28 20:57 mytmp

目录other的权限为rwx
公共目录mytmp中有两个用户的文件;
以一个用户的身份sjh删除另一个用户weih的文件
结果显示删除成功;

[sjh@VM-4-17-centos mytmp]$ ll
total 0
-rw-rw-r-- 1 sjh   sjh   0 Oct 28 20:46 sjh1.txt
-rw-rw-r-- 1 sjh   sjh   0 Oct 28 20:46 sjh2.txt
-rw-rw-r-- 1 weihe weihe 0 Oct 28 20:46 weihe1.txt
-rw-rw-r-- 1 weihe weihe 0 Oct 28 20:46 weihe2.txt
[sjh@VM-4-17-centos mytmp]$ rm -rf weihe*
[sjh@VM-4-17-centos mytmp]$ ll
total 0
-rw-rw-r-- 1 sjh sjh 0 Oct 28 20:46 sjh1.txt
-rw-rw-r-- 1 sjh sjh 0 Oct 28 20:46 sjh2.txt

正常的设想是多个用户在公共目录下各自进行自己的工作而不受其他用户影响root用户除外,目录的w权限对用户限制太小了,应该进一步对用户做出限制,即只允许用户创建删除移动自己拥有的文件,而不能删除其他用户的文件
这就引入了粘滞位的概念。


粘滞位概念

格式

加上/去掉粘滞位
chmod +t 目录或文件名chmod -t 目录或文件名
粘滞位是为了防止在同一个目录下一个用户对另一个用户的文件进行删除/移动操作
粘滞位是目录权限的特殊情况,并不会限制以下用户:

root用户
文件所有者
目录所有者

加上粘滞位后,以用户sjh身份不能删除weihe用户的文件

[root@VM-4-17-centos /]# chmod +t mytmp
drwxrwxrwt    2 root root  4096 Oct 28 21:16 mytmp
[sjh@VM-4-17-centos mytmp]$ ll
-rw-rw-r-- 1 weihe weihe 0 Oct 28 21:17 weihe1.txt
-rw-rw-r-- 1 weihe weihe 0 Oct 28 21:09 weihe2.txt
[sjh@VM-4-17-centos mytmp]$ rm -f weihe1.txt
rm: cannot remove ‘weihe1.txt’: Operation not permitted

image.png
加上粘滞位后,以用户sjh身份不能对weihe用户的文件重命名

[sjh@VM-4-17-centos mytmp]$ ll
-rw-rw-r-- 1 weihe weihe 0 Oct 28 21:17 weihe1.txt
-rw-rw-r-- 1 weihe weihe 0 Oct 28 21:09 weihe2.txt
[sjh@VM-4-17-centos mytmp]$ mv weihe1.txt sjh.txt
mv: cannot move ‘weihe1.txt’ to ‘sjh.txt’: Operation not permitte

image.png
加上粘滞位后,以用户sjh身份不能对weihe用户的文件进行移动

[sjh@VM-4-17-centos mytmp]$ ll
-rw-rw-r-- 1 weihe weihe 0 Oct 28 21:17 weihe1.txt
-rw-rw-r-- 1 weihe weihe 0 Oct 28 21:09 weihe2.txt
[sjh@VM-4-17-centos mytmp]$ mv weihe1.txt /
mv: cannot move ‘weihe1.txt’ to ‘/weihe1.txt’: Operation not permitted

image.png


权限到底讲了啥

权限是约束某一类角色的,Linux操作系统通过权限对用户进行管理;
权限 = 角色+文件属性;
普通文件和目录的权限对用户的约束方式也有差异;
r/-

对于普通文件:能否进入文件;
对于目录:能否浏览查看目录内容;

w/-

对于普通文件:能否修改普通文件;
对于目录表示:在目录内创建、移动、删除目录内的文件;

x/-

对于普通文件:能否执行该文件;
对于目录:能否进入目录;


结语

本节主要介绍了Linux操作系统权限的概念,特别是有关权限管理相关的内容:如权限修改指令,权限生成规则,权限掩码等。
下次再见!


E N D END END

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

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

相关文章

【一起学数据结构与算法】计数排序、基数排序、桶排序(含菜鸟教程代码)

目录前言一、计数排序1.1 排序思想1.2 代码1.3 菜鸟教程官方代码(搬运)二、基数排序2.1 排序思想2.2 代码2.3 菜鸟教程官方代码(搬运)三、桶排序3.1 排序思想3.2 代码3.3 菜鸟教程官方代码(搬运)前言 之前我们学过了几种常见的排序&#xff0c;都是基于比较的排序&#xff0c;…

ES6中扩展对象的功能性

对象是JavaScript编程的核心&#xff0c;ECMAScript6为对象提供了许多简单易用且更加灵活的新特性。 ECMAScript 6在对象字面量的基础上做出了以下几个变更&#xff1a; 简化属性定义语法&#xff0c;使将当前作用域中的同名变量赋值给对象的语法更加简洁 function createPe…

【MySQL】MySQL基本操作详解

系列文章目录 第1篇&#xff1a;【MySQL】MySQL介绍及安装 第2篇&#xff1a;【MySQL】MySQL基本操作详解 文章目录 ✍1&#xff0c;数据库操作     &#x1f50d;1.1,查看数据库     &#x1f50d;1.2,创建数据库     &#x1f50d;1.3,选择数据库     &…

Kubernetes基础_02_Pod全解析

系列文章目录 文章目录系列文章目录前言一、Pod的生命周期Lifecycle二、Pod的重启策略RestartPolicy三、静态Pod四、Pod的健康检查总结前言 Pod是Kubernetes最小单位&#xff0c;当然一个Pod可以有多个Container&#xff0c;但是container是docker的元素&#xff0c;不是Kuber…

CTFHub | 布尔盲注

0x00 前言 CTFHub 专注网络安全、信息安全、白帽子技术的在线学习&#xff0c;实训平台。提供优质的赛事及学习服务&#xff0c;拥有完善的题目环境及配套 writeup &#xff0c;降低 CTF 学习入门门槛&#xff0c;快速帮助选手成长&#xff0c;跟随主流比赛潮流。 0x01 题目描述…

无限题库公众号系统搭建

无限题库公众号系统搭建 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;…

《设计模式:可复用面向对象软件的基础》——行为模式(笔记)

文章目录五、行为模式5.1 CHAIN OF RESPONSIBILITY(职责链)1.意图2.动机3.适用性4.结构5.参与者6.协作7.效果8.实现9.代码示例10.相关模式5.2 COMMAND&#xff08;命令&#xff09;1.意图2.别名3.动机4.适用性5.结构6.参与者.7.协作8.效果9.实现10.代码示例11.相关模式5.3 INTE…

CSDN独家 | 全网首发 | Pytorch深度学习·理论篇(2023版)目录

很高兴和大家在这里分享我的最新专栏 Pytorch深度学习理论篇(2023版)&#xff0c;恭喜本博客浏览量达到两百万&#xff0c;CSDN内容合伙人&#xff0c;CSDN人工智能领域实力新星~ 0 Pytorch深度学习理论篇实战篇(2023版)大纲 1 Pytorch深度学习理论篇实战篇(2023版)专栏地址&…

嵌入式应用-详解移植并使用freetype显示文字

目录 前言 1. freetype和相关概念简介 2.freetype显示文字流程和主要函数 2.1 包含头文件及API头文件&#xff1a;ft2build.h 2.2 初始化&#xff1a; FT_InitFreetype 2.3 加载&#xff08;打开&#xff09;字体Face&#xff1a; FT_New_Face 2.4 设置字体大小&#x…

sqrt函数模拟实现的两种方法

起因:在leetcode刷题时&#xff0c;有一道题目考察了有关sqrt的原理的题目&#xff0c;当时就去查了网上的文章&#xff0c;结果发现&#xff0c;一开始的时候看的很懵&#xff0c;最后也是搞定了两种方法&#xff0c;今天我就以最简单的方式写下这两种方式的思路讲解&#xff…

Python批量获取高校基本信息

文章目录前言一、需求二、分析三、处理四、运行效果前言 为了更好的掌握数据处理的能力&#xff0c;因而开启Python网络爬虫系列小项目文章。 小项目小需求驱动&#xff0c;每篇文章会使用两种以上的方式&#xff08;Xpath、Bs4、PyQuery、正则等&#xff09;获取想要的数据。…

T31快启图像效果优化

T31快启图像效果优化 liwen01 20220821 (一)基础方法及概念 参考文档 《Ingenic_Zeratul_T31_快起效果调试说明_20200927_CN》 (1)起始EV参数 IPC 每次启动都是冷启动&#xff0c;画面有一个暗变亮的过程&#xff0c;称作为AE收敛过程(自动曝光收敛过程)。 为了加快AE收…

LeetCode50天刷题计划第二季(Day 23 — 重排链表(16.20- 17.00)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、题目重排链表示例提示二、思路三、代码前言 链表基础题加一 一、题目 重排链表 给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff…

基于粒子群优化算法的时间调制非线性频偏FDA(Matlab代码实现)

&#x1f389;&#x1f389;&#x1f389;&#x1f389;欢迎您的到来&#x1f60a;&#x1f60a;&#x1f60a; &#x1f96c;博客主页&#xff1a;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 &#x1f4dd;床头铭&#xff1a;将来的我一定会感谢…

ARM64下构建 UEFI 模块

构建Application工程目录 mkdir edk2/ShellPkg/Application/ShellHello 目录内容如下: 编写 ShellHello.c /* edk2/ShellPkg/Application/ShellHello/ShellHello.c*/ #include <Uefi.h> #include <Library/UefiLib.h> #include <Library/DebugLib.h> #i…

上手之Python之异常

什么是异常 当检测到一个错误时&#xff0c;Python解释器就无法继续执行了&#xff0c;反而出现了一些错误的提示&#xff0c;这就是所谓的“异常”, 也就是我们常说的BUG bug单词的诞生 早期计算机采用大量继电器工作&#xff0c;马克二型计算机就是这样的。 1945年9月9日&…

【JVM技术专题】 深入学习JIT编译器实现机制「 原理篇」

前提概要 解释器 Java程序最初是通过解释器(Interpreter)进行解释执行的&#xff0c;当虚拟机发现某个方法或代码块的运行特别频繁的时候&#xff0c;就会把这些代码认定为“热点代码”&#xff08;hotspot code&#xff09;。正因为如此&#xff0c;我们的hotspot的虚拟机就是…

将matlab数据导入到Python中使用

相信不少小伙伴都遇到过和我一样的问题&#xff0c;就是在尝试使用scipy.io.loadmat将matlab类型的数据导入python中的时候遇到如下错误提示。 import scipy as sc# 设定需要导入的matlab数据目录 path_TE00 r"D:\Window自带文件夹\桌面\PIC Design\Lumerical\Tutorials…

Apollo GraphQL

一、Apollo GraphQL介绍 Apollo 是一个开源的 GraphQL 开发平台&#xff0c; 提供了符合 GraphQL 规范的服务端和客户端实现。使用 Apollo 可以帮助我们更方便快捷的开发使用 GraphQL。 ● 官网&#xff1a;https://www.apollographql.com/ ● GitHub 相关开源仓库&#xff1a…

Vite+Vue+Electron环境搭建

因为electron可以直接加载html文件&#xff0c;也可以直接加载url链接&#xff0c;所以&#xff0c;我们可以在调试过程中使用url地址&#xff0c;来动态显示我们的改变过程。 electron简单来说就是对html的一种封装&#xff0c;所以我们先来搭建vue的开发环境&#xff0c;这里…