特殊权限suid,sgid,sticky和acl(访问控制列表)参数详解

特殊权限的设置

基本文件权限见上文:http://blog.csdn.net/gui951753/article/details/79078682

特殊权限:SUID:当对一个可执行的二进制文件作用了suid权限之后,任何人在执行该文件时临时拥有其所属人的权限。
                 SGID:当对一个可执行的二进制文件作用了sgid权限之后,任何人在执行该文件时临时拥有其所属组的权限。
                          当对于一个目录作用了sgid权限之后,任何人在该目录下创建的文件的所属组与该目录的所属组相同。
                Sticky:当对于一个目录作用了sticky权限之后,该目录下的文件仅其文件的所属人,或目录的所属人及root才能删除。
举例,当我们使用普通用户执行 liubei,passwd 这条命令是能够成功执行的,我们知道passwd的实质是修改了/etc/shadow文件,进而修改了密码,但是当我们查询这个文件的权限的时候会发现这个问题,这个文件普通用户是没有任何权限的。那么普通用户liubei是如何做到了修改密码这个事情的呢,我们通过查询/bin/passwd命令发现了秘密。

                                                      图一

                                                       图二

在图二中我们能清晰看到 passwd这条二进制文件命令的权限中,多出了一个东西,-s,这就是上文中所提到的suid,执行这条命令的普通用户,可以暂时拥有其所属组的权限。

    如何实现设置这些权限:

设置suid/取消suid
    chmod u+s file
    chmod u-s file
设置sgid/取消sgid        
    chmod g+s dir
    chmod g-s dir
设置sticky        
    chmod o+t dir
    chmod o-t dir

上篇博客中提出文件权限有三位,那么在知道特殊权限之后,我们应该知道,当权限用数字表示的时候,实际上有四位:

chmod u+s 4xxx
chmod g+s 2xxx
chmod o+t 1xxx
即有suid又有sgid  6xxx
即有suid又有sticky 5xxx
即有sgid又有Sticky 3xxx

    ACL:

   一旦开始设置acl,那么原有的权限属性不可更改,只有取消acl才能更改所属人,所属组和其他人的权限信息。在acl和原有的权限属性之间就有那么一种优先级: owner > acl user > group 与 acl group 谁的权限多,谁优先  > other

设置acl,利用setfacl命令来设置facl,下面对setfacl的命令格式进行解释

例:setfacl -m u:wang:rwx file|directory

  • -m 表示修改ACL。你可以增加新的,或修改存在的ACL
  • u: 表示用户。你可以使用 g 来设置组权限
  • :rwx 需要设置的权限。
  • 最后是文件或者说目录
设置默认acl : setfacl -d -m u/g:username/groupname file |directory, 并且这个默认的acl指影响未来的文件,当我们要设置当前和未来的文件都有acl时,先要先设置默认的,再设置当前的acl
mask 阈值的设定 

setfacl -m m:r-x file |directory  设置上限阀值 ,所有超过mask显示的阈值的权限都会被屏蔽,mask掩码是动态更新的,

设置acl后,ll显示的组信息其实是mask信息,原有的组信息不可改变,也不会显示(可用getfacl显示完整的组权限)
每增加一条acl,mask就会更新,并且取所有的权限的并集,保证所有acl都有效 (所以一般情况下往往为了临时性的目的进行设置阈值)

取消acl:

setfacl -x u:wang file |directory     删除特定的某条acl

setfacm -b file |directory   清除acl属性,即清楚所有acl

 setfacl -k file |directory    清除默认权限

查看acl:

getfacl    file|directory      查看某个文件或者某个目录的acl值

acl权限的备份与还原

acl权限的备份及还原
    getfacl file |directory > acl.txt
    setfacl --restore acl.txt

 

你可能感兴趣的:(linux运维)