Linux的特殊权限

3.文件管理
本章同步视频:https://edu.51cto.com/sd/e4874
3.3 特殊权限
3.3.1 默认权限 umask
1.默认权限
◆ 若使用者建立为『档案』则预设『没有可执行( x )权限』,亦即只有 rw 这两
个项目,也就是最大为 666 分,预设权限如下:-rw-rw-rw-。
◆ 若用户建立为『目录』,则由于 x 与是否可以进入此目录有关,因此默认为
所有权限均开放,亦即为 777 分,预设权限如下:drwxrwxrwx。
2.创建文件的默认权限
[root@localhost tmp]# touch aaa
[root@localhost tmp]# ll aaa
-rw-r–r–. 1 root root 0 Mar 13 21:05 aaa
[root@localhost tmp]# mkdir bbb
[root@localhost tmp]# ll -d bbb/
drwxr-xr-x. 2 root root 6 Mar 13 21:07 bbb/
3.查看 umask 值
[root@localhost tmp]# umask
0022
4.修改 umask 值
[root@localhost tmp]# umask 222
[root@localhost tmp]# umask
0222
[root@localhost tmp]# touch aaa.a
[root@localhost tmp]# ll aaa.a
-r–r–r–. 1 root root 0 Mar 13 21:08 aaa.a
[root@localhost tmp]# mkdir bbb.b
[root@localhost tmp]# ll -d bbb.b/
dr-xr-xr-x. 2 root root 6 Mar 13 21:08 bbb.b/
5.伪结论
创建文件的权限=默认权限-umask
6.疑问
[root@localhost tmp]# umask 033
[root@localhost tmp]# umask
0033
[root@localhost tmp]# touch aaa.033
[root@localhost tmp]# ll aaa.033
-rw-r–r–. 1 root root 0 Mar 13 21:17 aaa.033
#疑问:666-033=633 ?
or
666-033=644 ?
7.创建文件的权限的准确计算方法
◆ 将 umask 值转换成二进制
033—–>000 011 011
◆ 将二进制取反
000 011 011—->111 100 100
◆ 将反码与默认权限的二进制数进行按位与运算
111 100 100
110 110 110
110 100 100
◆ 结果即为创建文件的权限。
110 100 100 —->644
8.不同用户的 umask 默认不同
[calf@localhost ~]$ umask
0002
[root@localhost tmp]# umask
0022
3.3.2 隐藏权限
1.查看隐藏权限
(1)隐藏权限的效果
[root@localhost tmp]# ll aaa
-rw-r–r–. 1 root root 6 Mar 13 21:33 aaa
[root@localhost tmp]# echo “bbbb”>aaa
-bash: aaa: Operation not permitted
#注:文件的拥有者且为 root,明明具有写权限,却不能向 aaa 中写入
数据。
(2)查看隐藏权限
[root@localhost tmp]# lsattr aaa
—–a———- aaa
2.设置隐藏权限
(1)设置 a 属性:不能写入,只能追加
[root@localhost tmp]# cat aaa
aaaa
[root@localhost tmp]# chattr +a aaa
[root@localhost tmp]# echo “bbbb”>aaa
-bash: aaa: Operation not permitted #写入失败
[root@localhost tmp]# cat aaa
aaaa #aaa 的内容未发生变化
[root@localhost tmp]# echo “bbbb”>>aaa #追加内容成功
[root@localhost tmp]# cat aaa
aaaa
bbbb #aaa 的内容被追加了 bbbb
(2)取消 a 属性
[root@localhost tmp]# chattr -a aaa
[root@localhost tmp]# cat aaa
aaaa
[root@localhost tmp]# echo “bbbb”>aaa
[root@localhost tmp]# cat aaa
bbbb
(3)设定 i 属性,不能写入,不能追加,不能删除
[root@localhost tmp]# chattr =i aaa
[root@localhost tmp]# cat aaa
aaaa
bbbb
[root@localhost tmp]# echo “cccc”>aaa
-bash: aaa: Permission denied
[root@localhost tmp]# echo “cccc”>>aaa
-bash: aaa: Permission denied
[root@localhost tmp]# rm -f aaa
rm: cannot remove ‘aaa’: Operation not permitted
3.3.3 SUID、SGID、SBIT
1.SUID
(1)SUID
SUID 权限仅对二进制程序(binary program)有效;
执行者对于该程序需要具有 x 的可执行权限;
本权限仅在执行该程序的过程中有效 (run-time);
执行者将具有该程序拥有者 (owner) 的权限。
(2)无 SUID 的效果
[root@localhost tmp]# ll aaa
-rw-r—–. 1 root root 10 Mar 13 21:42 aaa
[root@localhost tmp]# su – calf
Last login: Fri Mar 13 21:26:08 CST 2020 on pts/0
[calf@localhost ~]$ cd /tmp/
[calf@localhost tmp]$ cat aaa
cat: aaa: Permission denied
#注:注意账号切换
(3)设置 SUID
[root@localhost ~]# ll /bin/cat
-rwxr-xr-x. 1 root root 54048 Jan 25 2014 /bin/cat
[root@localhost ~]# chmod 4755 /bin/cat
[root@localhost ~]# ll /bin/cat
-rwsr-xr-x. 1 root root 54048 Jan 25 2014 /bin/cat
注:设置 SUID 的另外一种方法:
[root@localhost tmp]# chmod u+s /bin/cat
(4)设置 SUID 后的效果
[root@localhost ~]# su – calf
Last login: Fri Mar 13 22:01:39 CST 2020 on pts/0
[calf@localhost ~]$ cd /tmp/
[calf@localhost tmp]$ cat aaa
aaaa
bbbb
#注:注意账号切换
(5)S 与 s 的区别
[root@localhost tmp]# chmod u-x /bin/cat
[root@localhost tmp]# ll /bin/cat
-rwSr-xr-x. 1 root root 54048 Jan 25 2014 /bin/cat
#注:1.S 表示文件拥有者无 x 权限,s 表示文件拥有者有 x 权限。
2.命令执行者必须具有 x 权限,不受文件拥有者是否有 x 权限的影
响。
2.SGID
(1)SGID 对文件的效果
SGID 对二进制程序有用;
程序执行者对于该程序来说,需具备 x 的权限;
执行者在执行的过程中将会获得该程序群组的支持!
#注:效果和 SUID 一样,只是 SUID 是获得拥有者的权限,而 SGID 是
获得群组的权限。
(2)SGID 对目录的效果
用户若对于此目录具有 r 与 x 的权限时,该用户能够进入此目录;
用户在此目录下的有效群组(effective group)将会变成该目录的群组;
若用户在此目录下具有 w 的权限(可以新建档案),则使用者所建立的新
档案,该新档案的群组与此目录的群组相同。
(3)SGID 对目录效果测试
[root@localhost tmp]# mkdir dir
[root@localhost tmp]# chmod 2777 dir
#设置 SGID,同时开通满权限
[root@localhost tmp]# ll -d dir/
drwxrwsrwx. 2 root root 17 Mar 13 22:20 dir/
#注:其他用户需要有写权限
[root@localhost tmp]# touch dir/root
#root 账号创建了文件 root
[root@localhost tmp]# su – calf
Last login: Fri Mar 13 22:05:04 CST 2020 on pts/0
[calf@localhost ~]$ touch /tmp/dir/calf
#calf 账号创建了文件 calf
[root@localhost tmp]# ll dir
total 0
-rw-rw-r–. 1 calf root 0 Mar 13 22:26 calf
-rw-r–r–. 1 root root 0 Mar 13 22:20 root
#注:不同用户创建的文件都属于 root 组,即父目录 dir 所属的组。
(4)s 与 S 的含义
[root@localhost tmp]# chmod g-x dir/
[root@localhost tmp]# ll -d dir/
drwxrwSrwx. 2 root root 41 Mar 13 22:30 dir
#注:1.S 表示同组用户无 x 权限,s 表示同组用户有 x 权限。
2.文件的创建者必须对该目录有 w 权限,与同组用户是否具有 w
权限无关。
3.SBIT
(1)SBIT 的效果
当用户对于此目录具有 w, x 权限,亦即具有写入的权限时;
当用户在该目录下建立档案或目录时,仅有自己与 root 才有权力删除
该档案。
(2)设置 SBIT
[root@localhost tmp]# mkdir dir
[root@localhost tmp]# chmod 1777 dir
[root@localhost tmp]# ll -d dir
drwxrwxrwt. 2 root root 6 Mar 13 22:47 dir
#注:只加 SBIT 的命令也可以写成:chmod o+t dir
(3)准备环境
[root@localhost tmp]# su – calf #切换到 calf
Last login: Fri Mar 13 22:37:37 CST 2020 on pts/0
[calf@localhost ~]$ touch /tmp/dir/calf{1,2,3} #创建 3 个文件
[root@localhost tmp]# su – stu #切换到 stu
Last login: Thu Mar 5 10:56:32 CST 2020 on pts/2
[stu@localhost ~]$ touch /tmp/dir/stu{1,2,3} #创建 3 个文件
[root@localhost tmp]# ll dir
total 0
-rw-rw-r–. 1 calf calf 0 Mar 13 22:50 calf1
-rw-rw-r–. 1 calf calf 0 Mar 13 22:50 calf2
-rw-rw-r–. 1 calf calf 0 Mar 13 22:50 calf3
-rw-rw-r–. 1 stu stu 0 Mar 13 22:51 stu1
-rw-rw-r–. 1 stu stu 0 Mar 13 22:51 stu2
-rw-rw-r–. 1 stu stu 0 Mar 13 22:51 stu3
(4)测试删除
[calf@localhost ~]$ cd /tmp/dir/
[calf@localhost dir]$ ls
calf1 calf2 calf3 stu1 stu2 stu3
[calf@localhost dir]$ rm -f calf1 #测试删除文件
[calf@localhost dir]$ ls
calf2 calf3 stu1 stu2 stu3 #文件确实被删除
[calf@localhost dir]$ rm -f stu1
rm: cannot remove ‘stu1’: Operation not permitted
#但不能删除别人的文件
#注:用户对目录具有 w 权限,即可删除该目录下的文件。但此例中,
用户只能删除拥有者是自己的文件,不能删除拥有者是其他用户的文件。
这就是 SBIT 的效果。
(5)T 和 t 的区别
[root@localhost tmp]# chmod o-x dir/
[root@localhost tmp]# ll -d dir
drwxrwxrwT. 2 root root 63 Mar 13 22:54 dir
#注:1.T 表示其他用户不具有 x 权限,t 表示其他用户具有 x 权限。
2.操作者需要对目录具有 w 权限。

    原文作者:calflyok
    原文地址: https://blog.51cto.com/5482173/2489519
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞