Linux 学习笔记(四): 特殊权限

72 阅读6分钟

特殊权限

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