前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux系统 (三)- 权限介绍

Linux系统 (三)- 权限介绍

作者头像
怠惰的未禾
发布2023-04-27 21:55:07
1.8K0
发布2023-04-27 21:55:07
举报
文章被收录于专栏:Linux之越战越勇

前言

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


命令行解释器 – Command Line Interpreter Shell

Linux操作系统

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

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

命令行解释器

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

代码语言:javascript
复制
[root@VM-4-17-centos dir]# 
代码语言:javascript
复制
[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在对返回的结果进行解释转换,最后显示到命令行窗口中反馈给用户;

其实,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权限约束,只能做权限允许的事

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

代码语言:javascript
复制
[root@VM-4-17-centos dir]#

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

代码语言:javascript
复制
[weihe@VM-4-17-centos dir]$

su

基本语法

代码语言:javascript
复制
su 用户名

功能

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

代码语言:javascript
复制
[root@VM-4-17-centos dir]# su weihe
代码语言:javascript
复制
[weihe@VM-4-17-centos dir]$ su
Password: 
[root@VM-4-17-centos dir]#

sudo

基本语法

代码语言:javascript
复制
sudo 

功能

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

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

代码语言:javascript
复制
//首次提权
[weihe@VM-4-17-centos weihe.dir]$ sudo adduser newuser1
[sudo] password for weihe:

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

配置操作

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

代码语言:javascript
复制
[root@VM-4-17-centos etc]# vim /etc/sudoers

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

代码语言:javascript
复制
:set nu

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

代码语言:javascript
复制
99 ## Allow root to run any commands anywhere 
100 root    ALL=(ALL)       ALL
101 weihe   ALL=(ALL)       ALL
102 sjh     ALL=(ALL)       ALL

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

代码语言:javascript
复制
待信任用户名    ALL=(ALL)       ALL

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

代码语言:javascript
复制
[weihe@VM-4-17-centos dir]$ sudo whoami
[sudo] password for weihe: 

权限管理

权限是什么

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

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

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

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

文件分类

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

文件属性

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

代码语言:javascript
复制
[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
文件类型

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

开头的第一个字符

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

代码语言:javascript
复制
-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,如果不是就报错

代码语言:javascript
复制
[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

第一个字符表示文件类型

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

代码语言:javascript
复制
-rwxrwxrw- 1 root root    0 Oct 27 23:12 file.txt

d 目录文件

代码语言:javascript
复制
drwxr-xr-x 2 root root 4096 Oct 28 12:16 dir

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

代码语言:javascript
复制
[root@VM-4-17-centos dir]# ll /dev/tty
crw-rw-rw- 1 root tty     5,  0 Oct 28 11:36 /dev/tty

b 块设备文件 磁盘

代码语言:javascript
复制
[root@VM-4-17-centos dir]# ll /dev/vda1
brw-rw---- 1 root disk 253, 1 Oct 17 12:22 /dev/vda1

l 链接文件

代码语言:javascript
复制
[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 管道文件

代码语言:javascript
复制
[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权限

代码语言:javascript
复制
-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权限,打不带普通文件

代码语言:javascript
复制
--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权限

代码语言:javascript
复制
[weihe@VM-4-17-centos 2022_10_26]$ cd dir
[weihe@VM-4-17-centos dir]$ ls
test1.txt  test2.txt

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

代码语言:javascript
复制
[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权限

代码语言:javascript
复制
-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权限,写入操作不被允许

代码语言:javascript
复制
-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权限

代码语言:javascript
复制
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权限,不能在该目录创建、移动、删除文件

代码语言:javascript
复制
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权限,同时本身能够执行时才执行

代码语言:javascript
复制
[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权限,即使是可执行程序程序也不允许执行

代码语言:javascript
复制
-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权限

代码语言:javascript
复制
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权限,目录不能进入

代码语言:javascript
复制
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 查看文件类型

基本语法

代码语言:javascript
复制
file 文件名
代码语言:javascript
复制
[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
代码语言:javascript
复制
[weihe@VM-4-17-centos newdir]$ file file.txt 
file.txt: empty
[weihe@VM-4-17-centos newdir]$ file newdir/
newdir/: directory

权限相关操作

文件权限表示方法

字符表示

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

8进制表示

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

字符表示

二进制表示

八进制表示

含义

- - -

000

0

不可读不可写不可执行

- - x

001

1

只可执行

- w -

010

2

只可写

- wx

011

3

可写可执行

r - -

100

4

只可读

r - x

101

5

可读可执行

rw -

110

6

可读可写

rwx

111

7

可读可写可执行


设置文件属性

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

chmod
代码语言:javascript
复制
chmod [参数]权限 文件名

功能

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

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

加上单个读权限

代码语言:javascript
复制
[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

加上多个读写执行权限

代码语言:javascript
复制
[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.

减去单个读权限

代码语言:javascript
复制
[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

减去多个读写执行权限

代码语言:javascript
复制
[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指令后跟的时一个三位的八进制数,每一位分别对应拥有者/所属组/其他人的权限信息

加上单个读权限

代码语言:javascript
复制
[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

加上多个读写执行权限

代码语言:javascript
复制
[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

减去单个读权限

代码语言:javascript
复制
[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

减去多个读写执行权限

代码语言:javascript
复制
[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

选项 -R

递归修改目录文件的属性

代码语言:javascript
复制
[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
代码语言:javascript
复制
[weihe@VM-4-17-centos 2022_10_26]$ chmod -R 555 dir
代码语言:javascript
复制
[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 修改拥有者
代码语言:javascript
复制
chown [参数] 新用户名 文件名
代码语言:javascript
复制
[weihe@VM-4-17-centos 2022_10_26]$ chown root file.c 
chown: changing ownership of ‘file.c’: Operation not permitted

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

代码语言:javascript
复制
[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

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

代码语言:javascript
复制
[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

chgrp 修改所属组
代码语言:javascript
复制
chgrp [参数] 新用户组名 文件名
代码语言:javascript
复制
[weihe@VM-4-17-centos 2022_10_26]$ chgrp root file.c 
chgrp: changing group of ‘file.c’: Operation not permitted

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

代码语言:javascript
复制
[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

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


为什么有权限

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

umask 权限掩码

权限掩码引入

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

代码语言:javascript
复制
[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

代码语言:javascript
复制
[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和普通用户的默认权限掩码

代码语言:javascript
复制
[root@VM-4-17-centos dir]# umask
0022
代码语言:javascript
复制
[weihe@VM-4-17-centos 2022_10_26]$ umask
0002

修改权限掩码

代码语言:javascript
复制
[weihe@VM-4-17-centos newdir]$ umask 0077 
[weihe@VM-4-17-centos newdir]$ umask
0077

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

代码语言:javascript
复制
[weihe@VM-4-17-centos newdir]$ umask 0111
[weihe@VM-4-17-centos newdir]$ umask
0111

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

代码语言:javascript
复制
[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

代码语言:javascript
复制
[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具有相应的约束作用; 例子

代码语言:javascript
复制
drwxrwxrwx 2 root root 4096 Oct 28 20:57 mytmp

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

代码语言:javascript
复制
[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用户的文件

代码语言:javascript
复制
[root@VM-4-17-centos /]# chmod +t mytmp
代码语言:javascript
复制
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

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

代码语言:javascript
复制
[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

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

代码语言:javascript
复制
[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

权限到底讲了啥

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

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

w/-

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

x/-

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


结语

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


本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-04-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 命令行解释器 – Command Line Interpreter Shell
    • Linux操作系统
      • 命令行解释器
        • 对命令行解释器的初步认识
        • 命令行解释器的意义
        • shell分类
    • Linux权限
      • Linux中用户分类
        • su
          • 基本语法
        • sudo
          • 基本语法
          • 配置操作
      • 权限管理
        • 权限是什么
          • 文件分类
          • 文件属性
        • 权限相关操作
          • 文件权限表示方法
          • 设置文件属性
          • 设置文件所属角色
        • 为什么有权限
          • umask 权限掩码
          • 对目录的默认权限是0777的分析
        • 粘滞位
          • 引入
          • 粘滞位概念
      • 权限到底讲了啥
      • 结语
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档