~~~~
- 前言
- 命令行解释器 -- 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
我们使用
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在对返回的结果进行解释转换,最后显示到命令行窗口中反馈给用户;
其实,
shell
本身并不直接进行上述操作过程,即shell本身不直接对用户命令进行解释转换执行,shell
会派生出多个shell子进程
,由shell子进程
实际执行用户命令;
这是因为shell
对于Linux
操作系统和用户来说十分重要,是二者沟通的媒介,所以shell本身
也就十分重要;我们为了确保shell
不会意外的崩溃,导致用户无法通过shell
访问操作系统,所以shell
本身不会亲自执行用户命令;
命令行解释器的意义
shell外壳程序很好的帮助我们解决了用户直接访问操作系统所带来的繁琐操作与不便等问题;
操作系统对于一台机器是十分重要的,shell则避免一些由于用户非法操作而导致的操作系统崩溃,shell可以对用户输入的指令和合法性进行判断,如果是非法指令shell就直接反馈到命令行,而不会访问操作系统,这样shell便一定程度上保护了操作系统,提高了操作系统运行的稳定性和安全性;
shell分类
命令行解释器 CLI Shell
shell是命令行解释器的统称,shell包括许多分类:
bash/sh/ksh/csh
Unix/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
[weihe@VM-4-17-centos dir]$ su
Password:
[root@VM-4-17-centos dir]#
sudo
基本语法
sudo
功能
暂时提权,使当前用户具有root的权限
首次提权时需要输入root用户密码;
当前普通用户提权成功后的一段时间内再次提权不需要再输入root用户密码,只需要输入已提权成功的普通用户密码即可,比较方便
普通用户weihe提权创建新用户 newuser1
//首次提权
[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
文件
[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
在## Allow root to run any commands anywhere
下方增加一行
格式为
待信任用户名 ALL=(ALL) ALL
配置完成后,新信任的用户就可以执行**sudo**
命令并且不需要输入root用户密码,只需要输入自己的密码即可,因为自己已经是受信任的用户了;
[weihe@VM-4-17-centos dir]$ sudo whoami
[sudo] password for weihe:
权限管理
权限是什么
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
文件类型
对文件类型的说明
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
权限相关操作
文件权限表示方法
字符表示
有权限用相应字符
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
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
加上多个读写执行权限
[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
减去单个读权限
[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
减去多个读写执行权限
[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
递归修改目录文件的属性
[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
通过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
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
通过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
文件权限生成过程分析
以权限掩码为0111为例
进行分析
[weihe@VM-4-17-centos newdir]$ umask 0111
[weihe@VM-4-17-centos newdir]$ umask
0111
默认普通文件权限为0666
默认目录文件权限为0777
创建一个普通文件file.txt
,其权限为0666
[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
[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
加上粘滞位后,以用户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
加上粘滞位后,以用户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
权限到底讲了啥
权限是约束某一类角色的,Linux
操作系统通过权限对用户进行管理;
权限 = 角色+文件属性;
普通文件和目录的权限对用户的约束方式也有差异;
r/-
对于普通文件:能否进入文件;
对于目录:能否浏览查看目录内容;
w/-
对于普通文件:能否修改普通文件;
对于目录表示:在目录内创建、移动、删除目录内的文件;
x/-
对于普通文件:能否执行该文件;
对于目录:能否进入目录;
结语
本节主要介绍了Linux操作系统权限
的概念,特别是有关权限管理相关的内容:如权限修改指令,权限生成规则,权限掩码等。
下次再见!
E N D END END