day 12 特殊权限

特殊权限的概述

前面我们已经学过r(读)w(写)x(执行)这三种普通权限,但是在查询文件权限时会发现一些其他权限字母,比如:

[root@oldboy ~]# ll /usr/bin/passwd 
-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd

特殊权限SUID

在Linux系统中,每个普通用户都可以更改自己的密码,这是个合理的设置。但是普通用户的信息保存在/etc/passwd 文件中,密码设置保存在/etc/shadow文件中加密密码,在文件权限显示,普通用户对这两个文件其实都是没有写权限,为什么普通用户可以修改自己的权限那?
其实普通用户修改自己的密码在于passwd命令,因为该命令拥有特殊权限 SetUID ,在属主的权限位的执行权限上是S。 当一个具有执行权限得到文件设置SetUID权限后,用户在执行这个文件时将以文件所有者的身份来执行


image.png

示例演示:

#当普通用户passwd 命令拥有SetUID 命令时:
[root@oldboy ~]# ll /usr/bin/passwd 
-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd

root       8902  0.0  0.0 112708   976 pts/0    S+   14:57   0:00 grep

临时调用 root身份 修改/etc/shadow 文件
#当普通用户passwd 命令没有SetUID 命令时:
[root@oldboy ~]# chmod u-s /usr/bin/passwd 
[root@oldboy ~]# ps aux  | grep passwd 
oldgirl    8939  0.0  0.0 170712  1996 pts/1    S+   14:58   0:00 pass
切换回自己的身份

suid 的作用:
1.让普通用户对可执行的二进制文件,临时拥有二进制文件的所属主权限
2.如果设置的二进制文件没有执行权限,那suid的权限显示就是S
3.特殊权限suid仅对二进制可执行程序有效,其他文件或目录则无效

特殊权限SGID

将目录设置为sgid后,如果在该目录下创建文件,都将与该目录的所属组保持一致,示例如下:

创建目录
[root@oldboy ~]# cd /tmp/ && mkdir dtest
给目录赋予SetGID权限
[root@oldboy tmp]# chmod g+s dtest/ 

检查SetGID是否生效
[root@oldboy tmp]# ll -d dtest/
drwxr-sr-x. 2 root root 6 Aug  8 15:21 dtest/
给测试目录赋予777权限,让普通用户可以写
[root@oldboy tmp]# chmod 777 dtest/
切换普通用户,并进入该目录
[oldgirl@oldboy ~]$ cd /tmp/dtest/
检查文件信息
[oldgirl@oldboy dtest]$ touch lamp 
[oldgirl@oldboy dtest]$ ll
total 0
-rw-rw-r--. 1 oldgirl root 0 Aug  8 15:34 lamp

sgid 作用
1.针对用户组权限位修改,用户创建的目录的所属组一致
2.当某个目录设置了sgid ,在该目录中新建的文件不再是创建该文件的默认所属组
3.使用sgin可以使得多个用户之间共享一个目录的所有文件变得简单

特殊权限SBIT

粘滞位 目前只对目录有效,作用如下:

普通用户对该目录拥有w和x权限,即普通用户可以在此目录中拥有写入权限。如果没有粘滞位,那么普通用户拥有w权限,就可以删除所有此目录下的所有文件,包括其他用户建立的文件,但是一旦被赋予了粘滞位,除了root可以删除所有文件你,普通用户就算拥有w 权限,也只能删除自己建立的文件,而不能删除其他用户建立的文件。

查看tmp 目录的权限
[root@oldboy tmp]# ll -d /tmp/
drwxrwxrwt. 20 root root 4096 Aug  8 15:57 /tmp/
授权给 /tmp 目录,位置在其他用户位的x位上设置
[root@oldboy tmp]# chmod o+t /tmp/

sticky作用:
1.让多个用户都具有写权限的目录,并让每个用户只能删自己的文件
2.特殊sticky目录表现在others的x位,用小t表示,如果没有执行权限是T
3.一个目录即使它的权限位“777”如果是设置了粘滞位,除了目录的属主和"root"用户权限删除,除此之外其他用户都不允许删除目录

权限属性chattr

chattr 只有root用户可以使用,用来修改文件系统的权限属性,建立与rwx基础权限之上的授权。
chatrr 命令格式:[root@bgx~]# chattr[+_=][选项] 文件或目录名
选项:

a :让文件或目录仅可追加内容

i : 不得任意更改文件或目录

image.png
创建文件并设置属性
[root@oldboy ~]# touch file_a file_i
[root@oldboy ~]# lsattr file_a file_i
---------------- file_a
---------------- file_i

使用chattr设置属性,lsattr查看权限限制
[root@oldboy ~]# chattr +a file_a
[root@oldboy ~]# chattr +i file_i
[root@oldboy ~]# lsattr file_a file_i
-----a---------- file_a
----i----------- file_i
a权限,无法写入和删除文件,但是可以追加数据,适合/etc/passwd这样的文件

[root@oldboy ~]# echo "aa" > file_a
-bash: file_a: Operation not permitted
[root@oldboy ~]# rm -f file_a
rm: cannot remove ‘file_a’: Operation not permitted
[root@oldboy ~]# echo "aa" >>file_a
i权限,无法谢瑞,无法删除,设个不需要更改的重要文件加锁
[root@oldboy ~]# echo "i" >file_i
-bash: file_i: Permission denied
[root@oldboy ~]# echo "i" >>file_i
-bash: file_i: Permission denied
[root@oldboy ~]# rm -f file_i
rm: cannot remove ‘file_i’: Operation not permitted
解除限制
[root@oldboy ~]# chattr -a file_a
[root@oldboy ~]# chattr -i file_i

进程掩码UMASK

1.umask 是什么?
当我们登录系统之后创建一个文件总是有一个默认权限。这个权限就是由umaks创建的
2.umask 是如何改变创建文件的权限
系统默认umask为022,当我们创建一个目录时,正常情况下目录的权限应该是777,但是umask表示要减去的值,所以新目录的权限是777-022=755 ,文件的权限666-022=644
umask 设定为奇数 偶数 对文件和目录有什么影响?
文件: 如果umask出现了奇数, 要在奇数位+1
目录: 对目录毫无影响
ps:umask 知道就行,不要调整,默认就是安全的权限

你可能感兴趣的:(day 12 特殊权限)