- Linux系统特殊权限
- set_uid
- set_gid
- sticky粘滞位
- 权限属性chattr
- 进程掩码umask
- 特殊权限练习题
一、Linux系统特殊权限
1、suid以文件的所属用户身份执行命令, 而不是以当前用户的身份执行命令
-rwsr-xr-x. 1 root root 54080 Nov 5 2016 /usr/bin/cat
suid
root用户执行,最终运行的身份是root
bgx用户执行,最终运行的身份是root
2、目录设置为sgid后续如果在该目录下创建文件, 都将与该目录的所属组保持一致drwxr-srwx. 2 root devops 29 Jun 14 21:01 /opt/
- bgx用户登陆后, 在/opt/目录创建文件或者目录属主和属组是
- 最终属主和属组 bgx devops
- xlw用户登陆后, 在/opt/目录创建文件或者目录属主和属组是
2. 最终属主和属组 xlw devops - root用户登陆后, 在/opt/目录创建文件或者目录属主和属组是
3. 最终属主和属组 root devops
3、sticky任何人都可以在该目录下创建文件以及目录, 但只能删除自己创建的文件和目录
drwxrwxrwt. 7 root root 93 Jun 14 21:47 /tmp/
4、如何设置特殊权限
- 用符号表示: setuid=u+s; setgid=g+s; sticky=o+t
- 用数值表示: setuid=4; setgid=2; sticky=1
1.set_uid
文件的执行有效身份为文件的拥有者,而不是执行者的身份
演示:
检查passwd文件权限,匿名用户没有权限查看
[root@liza ~]# chmod 640 /etc/passwd [root@liza ~]# ll /etc/passwd -rw-r-----. 1 root root 2059 Jan 3 22:59 /etc/passwd
使用普通用户无法查看
[root@liza ~]# su - liza Last login: Tue Jan 12 13:40:43 CST 2021 on pts/1 /usr/bin/id: cannot find name for user ID 1000 /usr/bin/id: cannot find name for user ID 1000 [I have no name!@liza ~]$ cat /etc/passwd cat: /etc/passwd: Permission denied [I have no name!@liza ~]$
给cat命令赋予suid
[root@liza ~]# chmod 4755 /bin/cat [root@liza ~]# ll /bin/cat -rwsr-xr-x. 1 root root 54080 Jun 30 2016 /bin/cat [I have no name!@liza ~]$ cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin ---此处省略
suid授权方法
suid 4000 权限字符s(S),用户位置上的x位上设置
授权方法:
chmod 4755 passwd
chmod u+s passwd
suid的作用
- 让普通用户拥有二进制文件的所属主权限,二进制文件需要有执行权限。
- 如果设置的二进制文件没有执行权限,那么suid的权限显示就是大S。
- 特殊权限suid仅对二进制可执行程序有效,其他文件或目录则无效。
- 如果普通用户需要操作没有权限的文件,为对应的命令赋予Suid权限。
注意: suid双刃剑, 是一个比较危险的功能, 对系统安全有一定的威胁。
2.set_gid
演示
[root@liza /]# chmod 777 /opt/ [root@liza /]# chmod g+s /opt/ [root@liza /]# su - liza [liza@liza ~]$ mkdir /opt/sgid_test [liza@liza ~]$ ll -d /opt/sgid_test/ drwxrwsr-x. 2 liza root 6 Jan 12 13:46 /opt/sgid_test/
sgid授权方法
suid 2000 权限字符s(S),取决于属组位置上的x
授权方法:
chmod 2755 directory
chmod g+s directory
sgid作用
- 针对用户组权限位修改,用户创建的目录或文件所属组和该目录的所属组一致。
- 当某个目录设置了sgid后,在该目录中新建的文件不在是创建该文件的默认所属组
- 使用sgid可以使得多个用户之间共享一个目录的所有文件变得简单。
3.sticky粘滞位
sticky对目录有写权限的用户仅仅可以删除目录里属于自己的文件,不能删除其他用户的文件系统中存在的/tmp目录是经典的粘滞位目录,谁都有写权限,因此安全成问题,常常是木马第一手跳板。
sticky授权方法
粘滞位 1000 权限字符t(T),其他用户位的x位上设置。
授权方法:
chmod 1755 /tmp
chmod o+t /tmp
sticky作用
- 让多个用户都具有写权限的目录,并让每个用户只能删自己的文件。
- 特殊sticky目录表现在others的x位,用小t表示,如果没有执行权限是T
- 一个目录即使它的权限为”777”如果是设置了粘滞位,除了目录的属主和”root”用户有权限删除,除此之外其他用户都不允许删除该目录。
二、权限属性chattr
设置文件属性(权限),针对所有用户,包括 root
a:让文件或目录仅可追加内容
i:不得任意更动文件或目录
演示:创建文件并设置属性
[root@liza ~]# touch file_a file_i [root@liza ~]# lsattr file_a file_i ---------------- file_a ---------------- file_i
设置属性
[root@liza ~]# chattr +a file_a [root@liza ~]# chattr +i file_i [root@liza ~]# lsattr file_a file_i -----a---------- file_a ----i----------- file_i
a权限, 无法覆盖写入和删除文件
[root@liza ~]# echo "aa" > file_a -bash: file_a: Operation not permitted [root@liza ~]# rm -f file_a rm: cannot remove ‘file_a’: Operation not permitted
a权限, 只能追加, 适用于日志文件
[root@liza ~]# echo "aa" >> file_a
i权限, 无法写入, 无法删除
[root@liza ~]# echo "i" >> file_i -bash: file_i: Permission denied [root@liza ~]# echo "i" > file_i -bash: file_i: Permission denied [root@liza ~]# rm -f file_i rm: cannot remove ‘file_i’: Operation not permitted
解除限制
[root@liza ~]# chattr -a file_a [root@liza ~]# chattr -i file_i
三、进程掩码umask
umask用于控制系统权限, 默认系统权限较大, 需要靠Umask来变更权限
默认新建文件,系统默认最大权限为666
默认新建目录,系统默认最大权限是777我们在新建文件和目录的默认权限会受到umask的影响, umask表示要减掉的权限。
创建目录权限值为777-umask
创建普通文件权限值为644-umask
umask涉及到的相关文件/etc/bashrc
/etc/profile
~/.bashrc
~/.bash_profile
注意umask影响的范围
shell (vim,touch) –umask–> 新文件或目录权限
vsftpd –umask–> 新文件或目录权限
samba –umask–> 新文件或目录权限
useradd –umask–> 用户 HOME
1.假设umask值为:022(所有位为偶数)
//文件的起始权限值
6 6 6 - 0 2 2 = 6 4 4
2.假设umask值为:045(其他用户组位为奇数)
//计算出来的权限。由于umask的最后一位数字是5,所以,在其他用户组位再加1。
6 6 6 - 0 4 5 = 6 2 1
3.默认目录权限计算方法
7 7 7 - 0 2 2 = 7 5 5
示例1: 在shell进程中创建文件
查看当前用户的umask权限
[root@liza ~]# umask 0022 [root@liza ~]# touch file001 [root@liza ~]# mkdir dir001 [root@liza ~]# ll -d file001 dir001/ drwxr-xr-x. 2 root root 6 Jan 12 14:04 dir001/ -rw-r--r--. 1 root root 0 Jan 12 14:04 file001
示例2: 修改shell umask值(临时生效)
[root@liza ~]# umask 000 [root@liza ~]# mkdir dir000 [root@liza ~]# touch file000 [root@liza ~]# ll -d dir000 file000 drwxrwxrwx. 2 root root 6 Jan 12 14:05 dir000 -rw-rw-rw-. 1 root root 0 Jan 12 14:05 file000
示例3: 修改shell umask值(永久生效, 强烈不建议修改)
[root@liza ~]# vim /etc/profile if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then umask 002 else umask 022 fi //立即在当前 shell 中生效 [root@liyanzhao ~]# source /etc/profile
示例4: 通过umask决定新建用户HOME目录的权限
[root@liza ~]# vim /etc/login.defs UMASK 077 [root@liza ~]# useradd dba [root@liza ~]# ll -d /home/dba/ drwx------. 3 dba dba 78 Jan 12 14:08 /home/dba/ [root@liza ~]# vim /etc/login.defs UMASK 000 [root@liza ~]# useradd sa [root@liza ~]# ll -d /home/sa/ drwx------. 3 sa sa 78 Jan 12 14:09 /home/sa/
示例 5:例如vsftpd进程/etc/vsftpd/vsftpd.conf
[root@liza ~]# yum -y install vsftpd [root@liza ~]# man vsftpd.conf
四、特殊权限练习题
lab permissions setup
考试必考:
创建三个用户, 分别为curly、larry、moe这些用户都是stooges组的成员。这些用户帐号密码都为password
- 要求以上用户和组可以在/home/stooges目录里访问,创建,删除文件
- 其他用户一律不允许访问该目录
- 在该目录下新建的文件会自动属于stooges组拥有
//创建用户,组 groupadd stooges useradd -G stooges curly useradd -G stooges larry useradd -G stooges moe //创建密码 echo "password" | passwd --stdin moe echo "password" | passwd --stdin larry echo "password" | passwd --stdin curry //创建目录并配置权限 mkdir /home/stooges chmod 770 /home/stooges chown .stooges /home/stooges chmod g+s /home/stooges