一、SetUID与SGID

只能用于二进制程序,脚本不能设置
  • 执行者需要有该二进制程序的x权限
  • 执行具有SUID权限的二进制程序,那么执行者将具有该二进制程序所有者的权限。

举例来说,/etc/passwd文件的权限是 -rw-r--r--,用户更改密码时需要对passwd文件进行写操作,root可以读写不用说,那普通用户为什么也能进行修改呢?这里就需要SUID来解决。
修改密码时是用/usr/bin/passwd工具进行修改的。setuid的作用是让执行该命令的用户以该命令拥有者的权限去执行,就是普通用户执行passwd时会拥有root的权限,这样就可以修改/etc/passwd这个文件了。

下面权限中的x就标志着SUID

[root@centos7 aubin]# ls -al /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd

sgid的意思和它是一样的,即让执行文件的用户以该文件所属组的权限去执行。

二、sticky(粘滞位)

以/tmp为例,tmp为存放临时文件的文件夹。所有用户都可以对他进行读写执行。那如果A用户创建了一个文件再tmp中,B用户把给删除了。这种情况是不允许出现的。如果设置了sticky(粘滞位),那目录下的文件就只有root和创建者有权限区读写执行,其他人是无法更改的。这就是粘滞位的作用
  • Sticky(粘滞位)只能针对目录设置
  • SGID与SUUID可以设置目录跟文件

三、特殊权限得具体设置

  • SUID
    sud一般情况下都设置在二进制文件上,设置在目录上没有意义
    启动为进程之后,其进程的属主为原程序文件的属主
  • 用法:chmod  u+|-s FILE
  • SUID: user,占据属主的执行权限位
    s:属主拥有x权限
    S:属主没有x权限

[root@centos7data]#echo {1..5} >> f2    当前的文件权限是642
[root@centos7data]#ll /bin/cat
-rwxr-xr-. 1 root root 54160 Oct 31  2018 /bin/cat
[root@centos7data]#chmod u+s /bin/cat    将二进制程序的所有者加上s权限
[liu@centos7data]#ll    对于普通用户来看,属于other,只有写权限,没有查看权限。
total 4
-rw-r---w- 1 root root 3 Nov  3 12:17 f2
[root@centos7data]#su liu
[root@centos7data]#ll /bin/cat   此时/bin/cat属主由读写权限,所以,就可以看f2内容
-rwsr-xr-. 1 root root 54160 Oct 31 2018 /bin/cat
[liu@centos7data]$cat f2  此时普通用户继承root身份,就可以访问当前文件内容,
1 2 3 4 5
  • 文件设置SGID
    启动为进程之后,其进程的属主为原程序文件的属组
  • 用法:chmod g+|-s FILE
[root@centos7data]#ll
total 4
-rw-r----- 1 root root 10 Nov  3 13:15 f2  可以看到当前用户的other没有读权限
[root@centos7data]#chmod g+s /bin/cat   我们将其加上属组权限
[root@centos7data]#ll /bin/cat
-rwxr-sr-x. 1 root root 54160 Oct 31  2018 /bin/cat
[root@centos7data]#su liu  此时切换到liu用户,应该属于other组,但是给cat加了sgid权限,所以liu用户继承root的身份,有读权限,因此就可以访问f2里边的内容。
[liu@centos7data]$cat f2
1 2 3 4 5
[liu@centos7data]$exit
  • 目录设置SGID
    目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组
  • SGID: group,占据属组的执行权限位
    s: group拥有x权限
    S:group没有x权限

[root@centos7data]#chgrp bin bak  将bak目录的所属组改为bin
[root@centos7bak]#chmod g+s bak
[root@centos7data]#ll
total 4
drwxrws-w- 2 root bin  43 Nov  3 14:03 bak  给bak所属组加上sgid权限
[root@centos7bak]#touch f1 f2 f3  此时在bak目录下新建的文件所属组就是bin
[root@centos7bak]#ll
total 0
-rw-r---w- 1 root bin 0 Nov  3 14:04 f1
-rw-r---w- 1 root bin 0 Nov  3 14:04 f2
-rw-r---w- 1 root bin 0 Nov  3 14:04 f3
  • STICKY
    在目录上设置Sticky,则在目录下创建的文件只有root与创建者有修改和删除权限
    Sticky设置在文件上也毫无意义
  • 用法:chmod   o+|-t FILE
  • Sticky: other,占据other的执行权限位
    t:other拥有x权限
    T:other没有x权限

[root@centos7 app]# chmod o+t dir/
[root@centos7 app]# chmod o-t dir/ 

特殊权限数字法
SUID SGID STICKY
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7
例如:

[root@centos7data]#chmod 7770 f2 将suid  sgid sticky三者权限都加入到f2里
[root@centos7data]#ll
total 4
-rwsrws--T 1 root root 10 Nov  3 13:15 f2   显示结果

设定文件特定属性:避免root账户误操作。

  • chattr +|-i 不能删除,改名,更改
  • chattr +|-a 只能追加内容
  • lsattr 显示特定属性

例如:

加入chattr +i权限的文件效果:

[root@centos7data]#chattr +i f2  将f2加上权限
[root@centos7data]#ll
total 4
drwxrws-w- 2 root bin  36 Nov  3 14:04 bak
-rwsrws--T 1 root root 10 Nov  3 13:15 f2
[root@centos7data]#rm -rf f2    删除此f2就没有权限
rm: cannot remove ‘f2’: Operation not permitted
[root@centos7data]#lsattr
----i----------- ./f2
[root@centos7data]#chattr -i f2  去除此文件的权限,去除后就可以删除了
[root@centos7data]#lsattr

 加入chattr  +a 权限的文件效果:

[root@centos7data]#chattr +a f2  加上权限
[root@centos7data]#rm -rf f2  不能删除
rm: cannot remove ‘f2’: Operation not permitted
[root@centos7data]#echo aa >>f2 可以追加
[root@centos7data]#cat f2
1 2 3 4 5
aa
[root@centos7data]#mv f2 f3 不能移动改名
mv: cannot move ‘f2’ to ‘f3’: Operation not permitted

  

 未完待续!

01-07 23:09