权限管理之文件权限
# 文件详细信息
[root@localhost opt]# ll 1.txt
-rw-r--r-- 1 root root 4 7月 19 18:56 1.txt
2
Ps: root用户可不受权限压制, 并没有说root组不受权限压制!
# 基本权限
# 权限的类型
字符 | 含义 | 关联数字 |
---|---|---|
r | 可读 | 4 |
w | 可写 | 2 |
x | 可执行 | 1 |
权限是与ugo相对应的,即权限要与ugo相关联才有意义
以 -rw-r--r--. 为例
第一位对应文件的类型,接下来9位3位为一组分别对应u、g、o.
若最后还有个点,表示此文件是在SElinux已加载状态下(非disabled)创建,此文件受SElinux的管制
文件类型:
-: 文本文档
d: 目录
b: 设备block
c: 字符设备
s: 套接字文件
l: 软链接
2
3
4
5
6
7
8
9
10
11
12
# 权限的归属
字符 | 含义 |
---|---|
u | 属主 |
g | 属组 |
o | 其它人 |
# 设置权限
chmod 设置权限的类型
chown 设置权限的归属 即用户和组
# chmod
有三种方式修改文件权限的类型: eg: r-- rw- r-- 变为 rwx r-x rw-
1> 加减法 在原来的基础上增增减减
chmod u+wx,g-w+x,o+w 1.txt
2> 赋值 不管原来是什么,直接覆盖
chmod u=rwx,g=rx,o=rw 1.txt
若相同可简写 eg: chmod ug=rx,o=rw 1.txt
3> 数字 必须是3位数
chmod 756 1.txt
4+2+1,4+1,4+2
chmod a=- test/a.txt
a代表ugo ---------
-R选项 意味着递归修改,主要针对目录文件(文件夹)的 并不会影响后续新建的
[root@localhost opt]# mkdir -p a/b/c
[root@localhost opt]# touch a/b/c/d.txt
[root@localhost opt]# ll -d a
drwxr-xr-x 3 root root 15 7月 28 10:41 a
[root@localhost opt]# ll -d a/b
drwxr-xr-x 3 root root 15 7月 28 10:41 a/b
[root@localhost opt]# ll -d a/b/c
drwxr-xr-x 2 root root 19 7月 28 10:42 a/b/c
[root@localhost opt]# ll a/b/c/d.txt
-rw-r--r-- 1 root root 0 7月 28 10:42 a/b/c/d.txt
[root@localhost opt]# chmod -R 777 a
[root@localhost opt]# chmod -R 777 a
[root@localhost opt]# ll -d a
drwxrwxrwx 3 root root 15 7月 28 10:41 a
[root@localhost opt]# ll -d a/b
drwxrwxrwx 3 root root 15 7月 28 10:41 a/b
[root@localhost opt]# ll -d a/b/c
drwxrwxrwx 2 root root 19 7月 28 10:42 a/b/c
[root@localhost opt]# ll a/b/c/d.txt
-rwxrwxrwx 1 root root 0 7月 28 10:42 a/b/c/d.txt
"""
通常啥时候用呢?下载某一软件部署在主机上,批量修改软件下所有文件的权限.
"""
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Ps: 将文件权限置空. chmod000file.txt
; chmod u=-,g=-,o=- a/b/c/d.txt
(chmod ugo=rwx a/b/c/d.txt)
# chown
chown dc.devops a.txt
-- 修改属主,属组
chown dc a.txt
-- 只修改属主
chown .devops a.txt
-- 只修改属组
chown dc. a.txt
-- 属主和属组会一样, 等同于chown dc.dc a.txt
-R选项 意味着递归修改,主要针对目录文件(文件夹)的 并不会影响后续新建的
[root@localhost opt]# chown -R dc.dc a
[root@localhost opt]# ll -d a
drwxrwxrwx 3 dc dc 15 7月 28 10:41 a
[root@localhost opt]# ll -d a/b/
drwxrwxrwx 3 dc dc 15 7月 28 10:41 a/b/
[root@localhost opt]# ll -d a/b/c
drwxrwxrwx 2 dc dc 19 7月 28 10:42 a/b/c
[root@localhost opt]# ll -d a/b/c/d.txt
-rwxrwxrwx 1 dc dc 0 7月 28 10:42 a/b/c/d.txt
2
3
4
5
6
7
8
9
# 权限的作用/意义!!!
针对文件(操作文件内容)
r: 读取文件内容 `cat`
w: 修改文件内容 `vim` `echo >> > 追加,覆盖`
x: 可以把文件当作一个命令/程序来运行 (前提是此文件得是个代码文件)
若该文件的代码是编译好的结果,那么只有x权限即可执行;
若该文件的代码是一个解释型的脚本程序,则还需要配合r权限才可执行 rx
针对目录(操作某一目录下的子文件夹或子文件 创建删除移动)
r: 可以浏览该目录下的子目录名和子文件名字,意味着能`ls` `ll`罗列目录文件下的有哪些东西
w: 可在该目录下创建`touch`、删除`rm`、移动子文件或子文件夹`mv`
x: 可以进入该目录,意味着能`cd`到此路径下
即我们需要操作(增删改)目录下的内容,就得先能进入该目录,得先拥有该目录的x执行权限
具体来说:
可以正常切换到目录下,若涉及到多层目录如/a/b/c,需要对每一级都有x权限才可以正常走到下一级
▼ 文件不管是否有r,都可以ls;目录没有r,不能ls
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 操作文件内容
☆ 操作文件夹下的文件内容
查看某一个文件内容需要具备的权限: 对所有文件夹的x权限以及对目标文件的r权限
解析: /a/b/c.txt 该用户要能cd一层层的切到路径/a/b路径下,即需要对/a/b
目录文件以及沿途的/
/a
目录文件有x权限; 要能读取文件的内容,需要对 c.txt 有r权限.
# 操作文件夹
☆ 操作文件夹下的子文件与子文件夹(注意不是文件内容)
在目录下创建、删除、移动文件需要的权限: 对沿途所有文件夹的x权限以及对目标文件夹的w权限
解析: 在/a/b目录下创建c.txt文件,得先能cd到/a/b路径下; 需要对b文件夹有w写权限,才能touch创建c.txt文件.
# 总结
第一步: 用户必须要对沿途的文件夹都有一个x执行权限;
第二步: 用户看具体要求
1> 对文件夹的操作(不操作文件内容), r代表可以浏览,w代表可以创建删除移动子文件和子目录.
2> 对文件的操作(操作文件内容), r代表可以读文件内容,w代表可以修改文件内容.
vim 写入内容 wq!强制覆盖,需要的权限:(二选一)
沿途的文件夹都有一个x执行权限, 目标文件 -w-
目标文件所在文件夹 --x
沿途的文件夹都有一个x执行权限, 目标文件 ---
目标文件所在文件夹 -wx
▲ 1> 若用户对沿途所有文件夹只有x权限,对目标文件没有r读权限,有w写权限
[root@localhost opt]# cat a.txt
111
!!!注意!!!vim
简单来说,vim的原理是将文件内容一下子从硬盘全部读到内存中,在内存中改完后,再一次性全部覆盖硬盘的原文件..
没有r读权限 -- vim打开文件时,虽然不会报错,但是空的,啥内容也没有..
有w写权限 -- 写后可以wq!强制保存.. 写的内容是在内存里,wq!后直接覆盖了硬盘中原来的内容...
在操作过程中会提示 "警告:正在修改一个只读文件";"请加!强制执行"
Ps: 吐槽,明明针对当前用户而言,对该文件只有写权限,还提示正在修改一个只读文件Hhhh.
也许是开发者在提醒你没看到源内容最好别修改.站的角度不同.
补充:echo 因为有写权限,`echo 222 >> a.txt`; `echo 3333 > a.txt`;都会成功.
▲ 2> 当前用户lili对沿途所有文件夹都有x权限并且当前用户对c文件夹有w权限,但是lili对d.txt文件没有权限
/a/b/c/d.txt
## -wx
[root@localhost opt]# ll -d a/b/c
drwxr-x-wx 1 root root 22 7月 28 18:42 a/b/c
## ---
[root@localhost opt]# ll a/b/c/d.txt
-rw-r------ 1 root root 21 7月 28 18:42 a/b/c/d.txt
lili对c文件夹有w权限,那么lili可以删除d.txt,再touch创建一个新的d.txt,曲线救国.
但不需要一步步的操作,vim可以一步到位.
lili可以vim编辑文件内容,并且可以wq!强制保存退出完成文件修改.底层原理就是将源文件删掉了.
(这一过程是不是跟上面的第一点相似,对的,他们实现的最终效果是一样的)可以通过查看前后操作的文件inode号来确定.
## 文件的属主和属组变啦.也就侧面验证了源文件删除啦,新文件是lili创建的.
[root@localhost opt]# ll a/b/c/d.txt
-rw-r------ 1 lili lili 15 7月 28 18:42 a/b/c/d.txt
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 文件执行
☆ 对文件的执行权限
对文件拥有执行权限意味着可以把文件当成命令运行
"""
linux一切皆文件
可以观测到 ugo对/usr/bin/cat文件都有x可执行权限
"""
[root@localhost opt]# which echo
/usr/bin/echo
[root@localhost opt]# ll /usr/bin/echo
-rwxr-xr-x. 1 root root 33088 11月 17 2020 /usr/bin/echo
"""
将echo命令所在的文件拷贝到/opt/t1/t2目录下,并赋予最基本的文件可执行权限
"""
[root@localhost opt]# mkdir -p /opt/t1/t2
[root@localhost opt]# cp /usr/bin/echo /opt/t1/t2
[root@localhost opt]# chmod o=x /opt/t1/t2/echo
[root@localhost opt]# head -3 /opt/t1/t2/echo
ELF>J@@?y@8 @@@@@@?88@8@@@?^?^ ?m?m`?m`??nn`?TT@T@DDP?td?Q?Q@?Q@<<Q?tdR?td?m?m`?m`XX/lib64/ld-linux-x86-64.so.2GNU GNU???IDk?????#?DT?vX!C??z?8??q? ?H??X0?@??\>
"""
.sh表明此文件要被shell解释器解锁执行,赋予了a.sh最基本的可执行权限
"""
[root@localhost opt]# touch /opt/t1/t2/a.sh
[root@localhost opt]# vim /opt/t1/t2/a.sh
[root@localhost opt]# cat /opt/t1/t2/a.sh
echo "hello"
echo "world"
echo "hahah"
[root@localhost opt]# chmod o=x /opt/t1/t2/a.sh
"""
查看权限
"""
[root@localhost opt]# ll /opt/t1/t2
总用量 40
-rw-r----x 1 root root 39 7月 30 17:10 a.sh
-rwxr-x--x 1 root root 33088 7月 30 17:18 echo
"""
登录普通用户dc
执行/opt/t1/t2/echo和/opt/t1/t2/a.sh两个可执行文件
!!!!!!前者可执行成功,后者失败 why?
因为echo文件是编译好的结果,不需要shell解释器解释啦,只需要x权限即可执行;
但a.sh文件的代码是一个解释型的脚本程序,即需要shell解释器读出来翻译成二进制再运行,则需要配合r权限才可执行
"""
[dc@localhost opt]$ /opt/t1/t2/echo wawo
wawo
[dc@localhost opt]$ /opt/t1/t2/a.sh
bash: /opt/t1/t2/a.sh: 权限不够
"""
root用户修改a.sh的权限为rx
dc用户重新执行a.sh文件 成功!!!
"""
[root@localhost opt]# chmod o=rx /opt/t1/t2/a.sh
[dc@localhost opt]$ /opt/t1/t2/a.sh
hello
world
hahah
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# SUID
# 抛出问题
普通用户dc可以用passwd
命令修改自己的账号密码,我们清楚的知道修改密码则是在修改/etc/shadow
文件..
但dc普通用户对于/etc/shadow
文件而言, 不是root也不属于root组,属于其它人
,其权限为 ---
即没有任何权限.
逻辑上冲突了啊!? 是怎么一回事呢? 悄悄告诉你,是 SUID 从中作祟.
[root@localhost opt]# ll /etc/shadow
---------- 1 root root 1388 7月 4 16:53 /etc/shadow
[dc@localhost opt]$ passwd
更改用户 dc 的密码 。
为 dc 更改 STRESS 密码。
(当前)UNIX 密码:
新的 密码:
... ... ...
2
3
4
5
6
7
8
在UNIX系列的操作系统里面, 确定用户的身份是通过UID号确定的,跟用户名没有关系..
默认以登录用户的uid和gid为准..
但除了UID
与GID
还有euid
与egid
,它两代表执行程序时,真正采用的用户id与组id.
ps:e是effective有效的意思
登录dc用户,使用命令启用相应的进程..进程的权限就是当前登录用户dc的权限.
即进程的uid和gid都是dc. unix在进程真正运行的时候会进行转换的,将uid关联euid,gid关联egid.
默认情况下,uid==euid;gid==egid 是相等的! 但是可以改变!
# SUID特点及使用过程
suid作用于可执行的命令,意味着无论哪个用户来运行此命令,它的身份都会转换成此命令的主人来运行.
即进程运行的时候,euid是该命令主人的uid..不是当前登录用户的uid..
[root@localhost opt]# ll /etc/shadow
---------- 1 root root 1388 7月 4 16:53 /etc/shadow
[root@localhost ~]# ll `which passwd`
-rwsr-xr-x. 1 root root 27856 4月 1 2020 /usr/bin/passwd
[root@localhost opt]# ll `which su`
-rwsr-xr-x. 1 root root 32128 2月 3 2021 /usr/bin/su
2
3
4
5
6
这个s就代表着二进制文件具有SUID权限
这里显示的小s是因为属主本身具有x执行权限; 若属主没有x执行权限,那么显示的是大S.
[特点]
二进制可执行文件 当前登录用户/使用者对其拥有x可执行权限 在执行该命令的过程中
○ SUID权限仅对二进制可执行文件有效 bin目录下的文件,那些命令!
○ 如果执行者对于该二进制可执行文件具有 x 的权限, 执行者将具有该执行文件的属主的权限
即当前登录用户在使用二进制可执行文件时身份临时转换成该执行文件的属主
○ 本权限 仅在执行该二进制可执行文件的过程中 有效 即仅限于执行命令的操作..
[使用过程]
普通用户dc利用 SUID 权限完成密码修改的过程如下:
1> dc用户对于 /usr/bin/passwd 这个程序具有执行权限, 因此可以执行passwd命令/程序
2> passwd 程序的所有者为 root; dc用户执行 passwd 程序的过程中会暂时获得root权限
3> root不受权限的压制,因此dc用户在 执行passwd程序的过程中 可以修改 /etc/shadow 文件
# 实验证明
"""
可以看到,root用户不受权限压制可以看到a.txt的内容
但是普通用户dc不能,权限不够..
"""
[root@localhost opt]# mkdir test
[root@localhost opt]# chmod 777 test
[root@localhost opt]# echo 123456 > test/a.txt
[root@localhost opt]# chmod 000 test/a.txt
[root@localhost opt]# ll test/a.txt
---------- 1 root root 7 8月 1 09:40 test/a.txt
[root@localhost opt]# cat test/a.txt
123456
[dc@localhost ~]$ cat /opt/test/a.txt
cat: /opt/test/a.txt: 权限不够
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Q: 如何在不改变 文件a.txt的权限情况下,让所有人都可以看到文件的内容?
"""
因为特殊权限suid的缘故,意味着只要执行cat命令,用户的身份就变成了root
"""
[root@localhost opt]# ll `which cat`
-rwxr-xr-x. 1 root root 54080 11月 17 2020 /usr/bin/cat
## chmod 4755 `which cat`
[root@localhost opt]# chmod u+s /usr/bin/cat
[root@localhost opt]# ll `which cat`
-rwsr-xr-x. 1 root root 54080 11月 17 2020 /usr/bin/cat
[root@localhost opt]# su - dc -c "cat /opt/test/a.txt"
123456
"""
验证,登录用户必须具备对执行文件(命令对应的文件)有x执行权限..不然哪怕有suid也不好使用.
逻辑上也说得过去,你连执行命令的权限都没有,如何在执行的过程中转换身份呢?
"""
[root@localhost opt]# ll `which cat`
-rwsr-xr-x. 1 root root 54080 11月 17 2020 /usr/bin/cat
[root@localhost opt]# chmod o-x /usr/bin/cat
[root@localhost opt]# ll `which cat`
-rwsr-xr--. 1 root root 54080 11月 17 2020 /usr/bin/cat
[root@localhost opt]# su - dc -c "cat /opt/test/a.txt"
-bash: /bin/cat: 权限不够
"""
这样做非常不安全,记得恢复操作!!
"""
## chmod u-s,o+x /usr/bin/cat
[root@localhost opt]# chmod u=rwx,o=rx /usr/bin/cat
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# SGID
用户运行命令时使用的是命令文件所属组的身份...
# 普通文件
Q: 如何在仅 改变文件1.txt的属组的权限的情况下,让所有人都可以看到文件的内容?
"""
cat命令有SGID权限后,dc用户在使用cat命令访问1.txt文件时,所拥有的权限是root组的权限
相当于dc临时切到root组里..
因为命令文件与普通文件的属组是一样的..所以改变普通文件属组root组的权限即可..(不需要考虑普通文件的属主)
这里相当于将普通文件属组的优先级提到了属主之前..
"""
[root@localhost opt]# ll /usr/bin/cat
-rwxr-xr-x. 1 root root 54080 11月 17 2020 /usr/bin/cat
[root@localhost opt]# chmod g+s /usr/bin/cat
[root@localhost opt]# ll /usr/bin/cat
-rwxr-sr-x. 1 root root 54080 11月 17 2020 /usr/bin/cat
[root@localhost opt]# touch /opt/test/1.txt
[root@localhost opt]# chmod 000 /opt/test/1.txt
[root@localhost opt]# ll /opt/test/1.txt
---------- 1 root root 4 8月 1 17:36 /opt/test/1.txt
[root@localhost opt]# echo 123 > /opt/test/1.txt
[root@localhost opt]# su - dc -c "cat /opt/test/1.txt"
cat: /opt/test/1.txt: 权限不够
[root@localhost opt]# su - onepiece -c "cat /opt/test/1.txt"
cat: /opt/test/1.txt: 权限不够
[root@localhost opt]# chmod g+r /opt/test/1.txt
[root@localhost opt]# su - dc -c "cat /opt/test/1.txt"
123
[root@localhost opt]# su - onepiece -c "cat /opt/test/1.txt"
123
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 目录文件
当一个用户对某一目录有写和执行权限时,该用户就可以在该目录下建立文件;
如果该目录同时用SGID修饰,则该用户在这个目录下建立的文件的属组与这个目录的属组一致!!!
"""
目录文件和普通文件是谁创建的,其属主和属组就是谁!
"""
[root@localhost opt]# mkdir /opt/aaa
[root@localhost opt]# mkdir /opt/aaa/bbb
[root@localhost opt]# touch /opt/aaa/b.txt
[root@localhost opt]# chmod o+w /opt/aaa
[root@localhost opt]# ll -d /opt/aaa
drwxr-xrwx 3 root root 30 8月 2 17:53 /opt/aaa
[root@localhost opt]# su - dc
上一次登录:二 8月 2 17:53:33 CST 2022pts/0 上
[dc@localhost ~]$ mkdir /opt/aaa/ccc
[dc@localhost ~]$ touch /opt/aaa/c.txt
[dc@localhost ~]$ ll /opt/aaa
总用量 0
drwxr-xr-x 2 root root 6 8月 2 17:52 bbb
-rw-r--r-- 1 root root 0 8月 2 17:53 b.txt
drwxrwxr-x 2 dc dc 6 8月 2 17:55 ccc
-rw-rw-r-- 1 dc dc 0 8月 2 17:55 c.txt
"""
给目录文件/opt/aaa添加特殊权限SGID,并改变其属组为group1(不用root组,结果更具标志性,更容易观察)
普通用户dc在/opt/aaa下创建目录文件dir2和普通文件2.txt,其属组会与/opt/aaa的属组保持一致
"""
[root@localhost opt]# groupadd group1
[root@localhost opt]# chown .group1 /opt/aaa
[root@localhost opt]# chmod g+s /opt/aaa
[root@localhost opt]# ll -d /opt/aaa
drwxr-srwx 4 root group1 54 8月 2 17:55 /opt/aaa
[root@localhost opt]# mkdir /opt/aaa/dir1
[root@localhost opt]# touch /opt/aaa/1.txt
[root@localhost opt]# su - dc
上一次登录:二 8月 2 17:55:30 CST 2022pts/0 上
[dc@localhost ~]$ mkdir /opt/aaa/dir2
[dc@localhost ~]$ touch /opt/aaa/2.txt
[dc@localhost ~]$ ll /opt/aaa
总用量 0
-rw-r--r-- 1 root group1 0 8月 2 18:03 1.txt ●
-rw-rw-r-- 1 dc group1 0 8月 2 18:04 2.txt ●
drwxr-xr-x 2 root root 6 8月 2 17:52 bbb
-rw-r--r-- 1 root root 0 8月 2 17:53 b.txt
drwxrwxr-x 2 dc dc 6 8月 2 17:55 ccc
-rw-rw-r-- 1 dc dc 0 8月 2 17:55 c.txt
drwxr-sr-x 2 root group1 6 8月 2 18:03 dir1 ●
drwxrwsr-x 2 dc group1 6 8月 2 18:04 dir2 ●
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# SBIT/Sticky
SBIT是 the restricted deletion flag or sticky bit 的简称,有时也称为Sticky 粘滞位
SBIT 目前只对目录有效,用来阻止非文件的属主删除文件.
"""
创建一个共享文件夹share
root账号依次切换到user01,user02,user03用户下,分别在共享文件夹下创建文件1.txt、2.txt、3.txt
"""
[root@localhost opt]# mkdir /opt/share
[root@localhost opt]# chmod 777 /opt/share/
[root@localhost opt]# useradd user01
[root@localhost opt]# useradd user02
[root@localhost opt]# useradd user03
[root@localhost opt]# su - user01
[user01@localhost ~]$ touch /opt/share/1.txt
[user01@localhost ~]$ exit
登出
[root@localhost opt]# su - user02
[user02@localhost ~]$ touch /opt/share/2.txt
[user02@localhost ~]$ exit
登出
[root@localhost opt]# su - user03
[user03@localhost ~]$ touch /opt/share/3.txt
[user03@localhost ~]$ exit
登出
[root@localhost opt]# ll /opt/share/
总用量 0
-rw-rw-r-- 1 user01 user01 0 8月 2 18:16 1.txt
-rw-rw-r-- 1 user02 user02 0 8月 2 18:17 2.txt
-rw-rw-r-- 1 user03 user03 0 8月 2 18:17 3.txt
"""
问题来啦,user01-03三个用户不仅能删除自己创建的文件,还能删除其余两个用户创建的文件
按照逻辑,本着共享的原则,user02只能删除自己上传的2.txt文件,不能删除1.txt与3.txt文件..
"""
[root@localhost opt]# su - user02
上一次登录:二 8月 2 18:17:04 CST 2022pts/0 上
[user02@localhost ~]$ rm -rf /opt/share/2.txt
[user02@localhost ~]$ rm -rf /opt/share/1.txt
[user02@localhost ~]$ rm -rf /opt/share/3.txt
[user02@localhost ~]$ exit
登出
[root@localhost opt]# ll /opt/share/
总用量 0
"""
要想让上传者只能删除自己上传的文件,就需要用到粘滞位SBIT
"""
[root@localhost opt]# ll -d /opt/share/
drwxrwxrwx 2 root root 6 8月 2 18:23 /opt/share/
[root@localhost opt]# chmod o+t /opt/share/
[root@localhost opt]# ll -d /opt/share/
drwxrwxrwt 2 root root 6 8月 2 18:23 /opt/share/
[root@localhost opt]# su - user01 -c "touch /opt/share/1.txt"
[root@localhost opt]# su - user02 -c "touch /opt/share/2.txt"
[root@localhost opt]# su - user03 -c "touch /opt/share/3.txt"
[root@localhost opt]# ll /opt/share/
总用量 0
-rw-rw-r-- 1 user01 user01 0 8月 2 18:38 1.txt
-rw-rw-r-- 1 user02 user02 0 8月 2 18:39 2.txt
-rw-rw-r-- 1 user03 user03 0 8月 2 18:39 3.txt
[root@localhost opt]# su - user02
上一次登录:二 8月 2 18:39:05 CST 2022pts/0 上
[user02@localhost ~]$ rm -rf /opt/share/1.txt
rm: 无法删除"/opt/share/1.txt": 不允许的操作
[user02@localhost ~]$ rm -rf /opt/share/2.txt
[user02@localhost ~]$ rm -rf /opt/share/3.txt
rm: 无法删除"/opt/share/3.txt": 不允许的操作
Ps: liunx的临时文件夹/tmp 其权限默认就是drwxrwxrwt.
用来杜绝 a用户往里放个东西,b用户过来将其删掉 的情况..
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# 特殊权限总结☆
有些实验的具体步骤写起来太繁琐了... 直接略过!!Please believe me,我是实验过得到的结论..
SUID -- 针对属主 -- u+s -- S+x=s
SGID -- 针对属组 -- g+s -- S+x=s
SBIT -- 针对其他人 -- o+s -- T+x=t实际上特殊权限和umask都不会怎么用到,但是需要知道是什么!!遇到后不慌..Hhh
# 没有特殊权限
【没有特殊权限】
"""
-rwxrw-r-- 1 egon IT 2351 7月 18 18:12 /etc/passwd
linux系统把文件权限分为了三类:属主、属组、其它人
一个用户对文件的权限扫描的优先级:
○ 先看该用户是否是文件的属主
○ 在第一步失败的情况下,再看该用户是否是文件的属组
○ 在第二步失败的情况下,该用户属于其他人权限
"""
1> 若当前登录用户时egon,egon所属的部门是IT部门.
/etc/passwd的拥有者是egon,那么egon对其拥有的权限是rwx;哪怕egon属于IT部门,文件拥有者的优先级会高一些.
2> 若当前登录用户不是文件的拥有者,是lili,lili是属于IT部门的,那么lili对/etc/passwd的权限为rw-
3> 若当前登录用户既不是文件的主人,也不是IT部门里的,那么对其拥有的权限为r--
提一嘴,默认情况下登录的普通用户对命令都有x执行权限..
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# SUID
登录用户使用命令时获得该命令属主的权限. 即以命令属主的身份去操控普通文件..
一定要注意一般情况下,该属主面对不同文件时,权限是不尽相同的!!
前置条件: 命令文件与命令操作的普通文件的属主都是用户root;属组都是root组.
现有三个普通用户 user1、dc、onepiece
【SUID】
root用户不受权限压制!随便折腾命令执行过程需要操作的普通文件..
普通文件权限是啥都不用考虑..就是如此豪恨..( ̄▽ ̄)
1>: <root>创建一个普通文件,`chmod 000 普通文件`
2>: `chmod u+s 命令文件`
3>: <普通用户>可以借助root的权限在使用该命令的过程中操作一些普通文件..
eg:对相应命令(这里以passwd和cat两命令举例)进行上述步骤后,
其它用户使用passwd命令会修改/etc/shadow文件;其它用户使用cat命令可以访问该普通文件
2
3
4
5
6
7
8
9
前置条件: 命令文件的属主与命令操作的普通文件的属主 不一样 ,且都不是是用户root...
举例说明: 现有三个普通用户 user1、dc、onepiece
【SUID】
/usr/bin/cat 信息为 -rwsr-xr-x. user1 user1
/opt/test/b.txt 信息为 ---------- dc dc
执行`cat b.txt`命令:
若当前登录用户为onepiece
1> 会以user1用户的身份运行此命令,user1用户对于b.txt而言,用户角色划分为其它人..
2●> so,只有当root用户执行`chmod a=-,o=r b.txt`命令后,`cat b.txt`才会成功..
Ps: 那如果root用户执行`gpasswd -a user1 dc`将user1用户添加到dc组;
root用户再执行`chmod a=-,g=r b.txt`命令,`cat b.txt`依旧不会成功..
证明该身份user1不是b.txt的主人dc,就会直接被归为b.txt其他人一栏;
不会检索文件的组,哪怕user1是b.txt属组dc组的成员.
若当前登录用户为dc,用户dc肯定是组dc的成员
实验结果证明运行`cat b.txt`时,相当于将b.txt文件的属主临时改为了user1..
还是会以dc用户的身份运行此命令.. (!!!!!!特别注意!!!!!!)
●也就是说,只有当root用户执行`chmod a=-,g=r b.txt`命令后,`cat b.txt`会成功..
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
前置条件: 命令文件的属主与命令操作的普通文件的属主 一样 ,但都不是用户root...
举例说明: 现有三个普通用户 dc、onepiece
【SUID】
/usr/bin/cat 信息为 -rwsr-xr-x. dc root
/opt/test/b.txt 信息为 ---------- dc dc
无论当前登录用户是dc还是onepiece,都会以dc用户的身份执行`cat b.txt`命令
●意味着只有当root用户执行`chmod a=-,u=r b.txt`命令后,不管登录用户是谁,`cat b.txt`都会成功..
2
3
4
5
6
# SGID、SBIT
【SGID针对普通文件】
前提:这里实验环境 -- 命令文件与命令操作的普通文件的属主都是用户root;属组都是root组.(其它情况没有验证)
作用于普通文件时,会以命令所属组的权限去操控普通文件..与SUID类似..
root组的权限可不等同于root用户的权限..所以要改变下root组针对目标普通文件的权限!
1>: <root>创建一个普通文件,`chmod 000 普通文件`
2>: `chmod g+s 命令文件`
3>: <普通用户>只能用该普通文件的属组root组的权限操作该普通文件..
4>: `chmod g+r 普通文件`
举例说明:
/usr/bin/cat -rwxr-sr-x. root root
/opt/test/1.txt ---------- root root
root用户改变root组针对1.txt的权限: `chmod g+r /opt/test/1.txt` ----r-----
所有用户在运行cat命令时都拥有root组权限: `cat /opt/test/1.txt` 成功.
【SGID针对目录文件】 完成属组的继承..
root用户: `chmod g+s /opt/aaa` drwxr-srwx
所有用户在目录文件/opt/aaa下创建的文件夹或文件的属组都会与/opt/aaa的属组保持一致
【SBIT】
权限信息中最后一位t表明该目录被设置了SBIT权限.
SBIT对目录的作用是:
当用户在该目录下创建新文件或目录时,仅有自己和root才有权力删除,主要作用于一个共享的文件夹
root用户: `chmod o+t /opt/share` drwxrwxrwt
其它用户在共享文件夹/opt/share里只能删除自己创建的文件
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# umask
新建的文件、目录文件的默认权限是由umask决定的
Ps: 联想一下,netmask掩码与ip地址进行与运算; umask也需要搭配使用..
"""
root用户: 创建文件默认权限644;创建文件夹默认权限755
"""
[root@localhost opt]# touch a.txt
[root@localhost opt]# mkdir aaa
[root@localhost opt]# ll
总用量 0
drwxr-xr-x 2 root root 6 8月 2 20:06 aaa
-rw-r--r-- 1 root root 0 8月 2 20:05 a.txt
2
3
4
5
6
7
8
9
# umask规则
规则如下:
1> uid>199并且属主与数组相等的用户下 --- umask: 0002;
除1之外的其他用户,比如root用户 -- umask: 0022
2> umask有四位,第一位与特殊权限有关.. 举例: 给a.txt (-rw-r--r--)文件加上suid、sgid、sticky..(-rwSr-Sr-T)
chmod u+s,g+s,o+t a.txt
chmod 7644 a.txt
u、suid -- 4 ; g、sgid -- 2 ; o、sbit -- 1.
2> linux中文件默认权限为666、目录权限默认为777, 会与umask后三位进行运算后得到最后的默认值..
△ 文件权限计算方法: 偶数位直接相减, 奇数位相减后加1
即umask位数上的值为偶数,直接被减; 若umask位数上的值为奇数,被减后加一;
eg: umask 0325; 创建文件 (6-3+1 6-2 6-5+1) = 442
△ 目录权限计算方法:直接相减即可
eg: umask 0325; 创建目录 (7-3 7-2 7-5) = 452
# 临时/永久设置
"""
临时修改umask值
"""
`umask 000`
"""
永久修改umask值 -- 即修改对应的文件
Ps: 没必要动它.. Hhh
"""
## 或者vim /etc/bashrc 内容是一样的
[root@localhost opt]# vim /etc/profile
......
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
umask 002 // uid大于等于199的默认umask值,表示一些系统用户和所有普通用户
else
umask 022 // uid小于199的默认umask值,包含root用户
fi
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17