Linux系统上的特殊权限SUID,SGID,STICKY以及额外权限管理工具facl命令

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux系统上的特殊权限SUID,SGID,STICKY以及额外权限管理工具facl命令相关的知识,希望对你有一定的参考价值。

Linux系统上的特殊权限


特殊权限:SUID, SGID, STICKY

安全上下文:

1、进程以某用户的身份运行;进程是发起此进程用户的代理,因此以此用户的身份和权限完成所有操作;

2、权限匹配模型:

  (1) 判断进程的属主,是否为被访问的文件属主;如果是,则应用属主的权限;否则进入第2步;

  (2) 判断进程的属主,是否属于被访问的文件属组;如果是,则应用属组的权限;否则进入第3步;

  (3) 应用other的权限;

SUID:

默认情况下:用户发起的进程,进程的属主是其发起者;因此,其以发起者的身份在运行; 

SUID的功用:用户运行某程序时,如果此程序拥有SUID权限,那么程序运行为进程时,进程的属主不是发起者,而程序文件自己的属主;

管理文件的SUID权限:

     chmod u+|-s FILE...

     展示位置:属主的执行权限位

     如果属主原本有执行权限,显示为小写s; 

     否则,显示为大写S;

演示说明:

[[email protected] tmp]# \cp /bin/ls /tmp/ls
#拷贝ls命令到/tmp目录下
[[email protected] tmp]# ll /tmp/ls 
-rwxr-xr-x 1 root root 117024 Sep 27 11:06 /tmp/ls
#默认所属组是有执行权限
[[email protected] tmp]# chmod u+s /tmp/ls 
[[email protected] tmp]# ll /tmp/ls
-rwsr-xr-x 1 root root 117024 Sep 27 11:06 /tmp/ls
#有执行权限了,在所属主的执行权限位为s,没有执行权限为S
[[email protected] tmp]# su - svn
[[email protected] ~]$ ls /root/
ls: cannot open directory /root/: Permission denied
#切换到svn用户,用ls命令查看/root目录,没有权限
[[email protected] ~]$ /tmp/ls /root/  #用拥有SUID 权限的命令就有查看的权限了
anaconda-ks.cfg   Desktop
[[email protected] tmp]# chmod u-s /tmp/ls #取消文件的SUID权限
[[email protected] tmp]# su - svn
[[email protected] ~]$ /tmp/ls /root/
/tmp/ls: cannot open directory /root/: Permission denied
[[email protected] ~]$ ll /tmp/ls 
-rwxr-xr-x 1 root root 117024 Sep 27 11:06 /tmp/ls

SGID:

功用:当目录属组有写权限,且有SGID权限时,那么所有属于此目录的属组(以此目录的属组为附加组的用户),且以属组身份在此目录中新建文件或目录时,新文件的属组不是用户的基本组,而是此目录的属组;

管理文件的SGID权限:

     chmod g+|-s FILE...    

     展示位置:属组的执行权限位

     如果属组原本有执行权限,显示为小写s; 

     否则,显示为大写S;

使用演示:

[[email protected] tmp]# ls -ld SGID/
drwxr-xr-x 2 root root 4096 Sep 27 11:18 SGID/
[[email protected] tmp]# chmod g+s SGID/  #对目录添加SGID权限
[[email protected] tmp]# ls -ld SGID/
drwxr-sr-x 2 root root 4096 Sep 27 11:18 SGID/
[[email protected] tmp]# chmod g+w SGID/
[[email protected] tmp]# ls -ld SGID/
drwxrwsr-x 2 root root 4096 Sep 27 11:18 SGID/  #在所属组的执行位显示为s
[[email protected] tmp]# su - centos
-bash-4.1$ id centos
uid=495(centos) gid=491(centos) groups=491(centos),0(root)
#centos的默认属组centos
-bash-4.1$ cd /tmp/SGID/
-bash-4.1$ touch a.txt
-bash-4.1$ mkdir centos
-bash-4.1$ ll
total 4
-rw-rw-r-- 1 centos root    0 Sep 27 11:20 a.txt
drwxrwsr-x 2 centos root 4096 Sep 27 11:20 centos
#默认创建的文件的所属组是目录的所属组,而非用户本身

结论:1.对目录进行赋权SGID时,在其目录中创建文件的用户必须是其目录的属组的成员。

         2.当sgid作用在目录上时,在目录内新建的文件或目录的所属组自动继承该目录的所属组

         3.在具有SGID权限的目录中创建文件时,目录的属组一定要有写(w)权限,因为这样才能对其目录创建文件。


Sticky:

功用:对于属组或全局可写的目录,组内的所有用户或系统上的所有用户对在此目录中都能创建新文件或删除所有的已有文件;如果为此类目录设置Sticky权限,则每个用户能创建新文件,且只能删除自己的文件;

管理文件的Sticky权限:

     chmod o+|-t FILE...

     展示位置:其它用户的执行权限位

     如果其它用户原本有执行权限,显示为小写t; 

     否则,显示为大写T;

    

     系统上的/tmp和/var/tmp目录默认均有sticky权限;

管理特殊权限的另一方式:

suid sgid sticy     八进制权限

0 0 0   0

0 0 1   1

0 1 0   2

0 1 1   3

1 0 0   4

1 0 1   5

1 1 0   6

1 1 1   7

基于八进制方式赋权时,可于默认的三位八进制数字左侧再加一位八进制数字;

例如:chmod 1777 filename 给有所有权限并且给予sticky权限

使用演示:

[[email protected] tmp]# mkdir STICKY        #创建目录
[[email protected] tmp]# chmod 1777 STICKY/  #给予目录所有的权限并且赋予sticky权限
[[email protected] tmp]# ls -ld STICKY       
drwxrwxrwt 2 root root 4096 Sep 27 14:12 STICKY #目录拥有1777权限

[[email protected] tmp]# su - centos
-bash-4.1$ cd /tmp/STICKY/
-bash-4.1$ touch centos
-bash-4.1$ mkdir centos.d
-bash-4.1$ ll
total 4
-rw-rw-r-- 1 centos centos    0 Sep 27 14:14 centos
drwxrwxr-x 2 centos centos 4096 Sep 27 14:14 centos.d
-bash-4.1$ exit
logout
[[email protected] tmp]# cd STICKY/
[[email protected] STICKY]# touch root
[[email protected] STICKY]# mkdir root.d
[[email protected] STICKY]# ll
total 8
-rw-rw-r-- 1 centos centos    0 Sep 27 14:14 centos
drwxrwxr-x 2 centos centos 4096 Sep 27 14:14 centos.d
-rw-r--r-- 1 root   root      0 Sep 27 14:15 root
drwxr-xr-x 2 root   root   4096 Sep 27 14:15 root.d
#分别用root用户和centos用户创建文件

[[email protected] tmp]# su - centos
-bash-4.1$ cd /tmp/STICKY/
-bash-4.1$ rm -f root
rm: cannot remove `root‘: Operation not permitted
-bash-4.1$ rm -rf root.d/
rm: cannot remove `root.d‘: Operation not permitted
-bash-4.1$ rm -rf centos.d
#切换到centos目录下,可以删除自己创建的文件,但是不能删除其他用户创建文件


facl:file access control lists

文件的额外赋权机制:

在原来的u,g,o之外,另一层让普通用户能控制赋权给另外的用户或组的赋权机制;

getfacl命令:

     getfacl FILE...

     user:USERNAME:MODE

     group:GROUPNAME:MODE

setfacl命令:

赋权给用户:

    setfacl  -m  u:USERNAME:MODE  FILE...

[[email protected] tmp]# mkdir FACL                    #创建目录 
[[email protected] tmp]# ls -ld FACL                   #查看权限
drwxr-xr-x 2 root root 4096 Sep 27 14:34 FACL   
[[email protected] tmp]# setfacl -m u:dts:7 FACL/      #赋予额外的权限  
[[email protected] tmp]# su - dts
[email protected]:~$ cd /tmp/facl/                      #验证可以创建文件,有写权限 
-bash: cd: /tmp/facl/: Permission denied
[email protected]:~$ cd /tmp/FACL/
[email protected]:/tmp/FACL$ cat << EOF > a.txt
> time flies
> EOF
[email protected]:/tmp/FACL$ cat a.txt 
time flies
[email protected]:/tmp/FACL$ ls -ld                     #查看实际的权限,只有r-x权限
drwxrwxr-x+ 2 root root 4096 Sep 27 14:40 ./

赋权级组:

    setfacl  -m  g:GROUPNAME:MODE FILE...

撤销赋权:

     setfacl  -x u:USERNAME  FILE...

[[email protected] tmp]# setfacl -x u:dts FACL/

     setfacl  -x  g:GROUPNAME  FILE...

    

本文出自 “汪立明” 博客,请务必保留此出处http://afterdawn.blog.51cto.com/7503144/1856968

以上是关于Linux系统上的特殊权限SUID,SGID,STICKY以及额外权限管理工具facl命令的主要内容,如果未能解决你的问题,请参考以下文章

(转)Linux 文件目录特殊权限设定(SUID,SGID,SBIT)

Linux学习总结:特殊权限SUID,SGID,SBIT

Linux特殊权限 SUID、SGID、Sticky

linux文件系统上的特殊权限

Linux之特殊权限(SUID/SGID/SBIT)

Linux文件权限三:特殊权限SUID SGID SBIT