特殊权限
linux共12位权限,除了9位基础权限还有3个特殊权限
三种特殊的权限
SetUID(suid)
命令功能: **临时使用命令的属主权限执行该命令。**即如果文件有suid权限时,那么普通用户去执行该文件时,会以该文件的所属用户的身份去执行。
SetUID(简写suid):会在属主权限位的执行权限上写个s。 如果该属主权限位上有执行权限,则会在属主权限位的执行权限上写个s(小写); 如果该属主权限位上没有执行权限,则会在属主权限位的执行权限上写个S(大写)。
suid数字权限是4000,设置方法:
方式1:
[root@centos7 ~]# chmod u+s filename
方式2:
[root@centos7 ~]# chmod 4755 filename
查看passwd命令的权限
`[root@localhost ftl]``# ll /usr/bin/passwd ` `问题: ``passwd``文件的属组是root,表示只有root用户可以访问的文件,为什么普通用户依然可以使用该命令更改自己的密码?``答案:当普通用户[omd]使用``passwd``命令的时候,系统看到``passwd``命令文件的属性有大写s后,表示这个命令的属主权限被omd用户获得,也就是omd用户获得文件``/etc/shadow``的root的rwx权限`
由于passwd具有s权限,普通用户使用该命令的时候,就会以该命令的属主身份root执行该命令,于是能够顺利修改普通用户不具备修改权限的/etc/shadow文件。
希望普通用户user1可以删除某个自己没有权限删除的文件的操作方法:
- sudo给user1授权rm权限
- rm设置suid
- 修改被删除文件上级目录的权限
SetUID(简称suid)总结:
- 让普通用户对可执行的二进制文件,临时拥有二进制文件的属主权限;
- 如果设置的二进制文件没有执行权限,那么suid的权限显示就是S(大写字母S);
- 特殊权限suid仅对二进制可执行程序有效,其他文件或目录则无效。
- suid极其危险,如果给vim或者rm命令设置了setUID,那么任何文件都能编辑或者删除了,相当于有root权限了。
setGID(sgid)
**命令功能:**使用sgid可以使得多个用户之间共享一个目录的所有文件变得简单。当某个目录设置了sgid后,在该目录中新建的文件不在是创建该文件的默认所属组。
如果该属组权限位上有执行权限,则会在属组主权限位的执行权限上写个s(小写字母); 如果该属组权限位上没有执行权限,则会在属组主权限位的执行权限上写个S(大写字母S)。
write命令的权限:
[root@VM_0_9_centos ~]# ll /bin/write
-rwxr-sr-x 1 root tty 19544 Aug 9 11:10 /bin/write
sgid数字权限是2000,设置方法:
方式1:
[root@VM_0_9_centos ~]# chmod 2755 test/
方式2:
[root@VM_0_9_centos ~]# chmod g+s test/
[root@VM_0_9_centos ~]# ll -d test/
drwxr-sr-x 2 root root 4096 Nov 22 21:02 test/
在设置SetGID的文件夹创建文件的属组是父目录的属组:
[root@VM_0_9_centos ~]# cd test/
[root@VM_0_9_centos test]# su aaa
[aaa@VM_0_9_centos test]$ touch bbb
[aaa@VM_0_9_centos test]$ ll
-rw-rw-r-- 1 aaa root 0 Nov 22 21:14 bbb
sticky(sbit)粘滞位
**命令功能:**粘滞位,只对目录有效,对某目录设置粘滞位后,普通用户就算有w权限也只能删除该目录下自己建立的文件,而不能删除其他用户建立的文件。
如果该其他用户权限位上有执行权限,则会在其他用户权限位的执行权限上写个t(小写); 如果该其它用户权限位上没有执行权限,则会在其他用户权限位的执行权限上写个T(大写)。
系统中存在的/tmp目录是经典的粘滞位目录,谁都有写权限,因此安全成问题,常常是木马第一手跳板。
[aaa@VM_0_9_centos ~]$ ll -d /tmp/
drwxrwxrwt. 9 root root 4096 Nov 22 21:15 /tmp/
sbit数字权限是1000,设置方法:
方法1:
[root@VM_0_9_centos ~]# chmod 1755 test/
方法2:
[root@VM_0_9_centos ~]# chmod o+t test/
查看权限:
[root@VM_0_9_centos ~]# ll -d test/
drwxr-xr-t 2 root root 4096 Nov 22 21:15 test/
chattr权限
chattr概述:凌驾于r、w、x、suid、sgid之上的权限。
lsattr:查看特殊权限
[root@VM_0_9_centos ~]# lsattr /etc/passwd
-------------e-- /etc/passwd
chattr:设置特殊权限
| 权限说明 | |
|---|---|
| -i | 锁定文件,不能编辑,不能修改,不能删除,不能移动,可以执行 |
| -a | 仅可以追加文件,不能编辑,不能删除,不能移动,可以执行 |
防止系统中某个关键文件被修改:
[root@VM_0_9_centos ~]# chattr +i /etc/fstab
[root@VM_0_9_centos ~]# lsattr /etc/fstab
----i--------e-- /etc/fstab
让某个文件只能往里面追加内容,不能删除,一些日志文件适用于这种操作:
[root@VM_0_9_centos ~]# chattr +a user_act.log
[root@VM_0_9_centos ~]# lsattr user_act.log
-----a-------e-- user_act.log
掩码 umask
umask的作用
umask值用于设置用户在创建文件时的默认权限,当我们在系统中创建目录或文件时,目录或文件所具有的默认权限就是由umask值决定的。
对于root用户,系统默认的umask值是0022;对于普通用户,系统默认的umask值是0002。执行umask命令可以查看当前用户的umask值。
[root@VM_0_9_centos ~]# umask
0022
umask是如何改变新文件的权限
umask值一共有4组数字,其中第1组数字用于定义特殊权限,一般不予考虑,与一般权限有关的是后3组数字。
默认情况下,对于目录,用户所能拥有的最大权限是777;对于文件,用户所能拥有的最大权限是目录的最大权限去掉执行权限,即666。因为x执行权限对于目录是必须的,没有执行权限就无法进入目录,而对于文件则不必默认赋予x执行权限。
对于root用户,他的umask值是022。当root用户创建目录时,默认的权限就是用最大权限777去掉相应位置的umask值权限,即对于所有者不必去掉任何权限,对于所属组要去掉w权限,对于其他用户也要去掉w权限,所以目录的默认权限就是755;当root用户创建文件时,默认的权限则是用最大权限666去掉相应位置的umask值,即文件的默认权限是644。
通过umask命令可以修改umask值,比如将umask值设为0077。
[root@VM_0_9_centos ~]# umask 0077
[root@VM_0_9_centos ~]# umask
0077
永久修改umask
umask命令只能临时修改umask值,系统重启之后umask将还原成默认值。如果要永久修改umask值,可修改/etc/bashrc或/etc/profile文件。
例如要将默认umask值设置为027,那么可以在文件中增加一行umask 027。