文件的特殊权限,SUIDSGIDSTICKY

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件的特殊权限,SUIDSGIDSTICKY相关的知识,希望对你有一定的参考价值。


安全上下文

    当一个进程访问一个文件的匹配权限机制如下

        进程访问文件时,首先检查进程的属主是否对该文件有访问权限,如果有则以属主的身份访问,否则使用属组的身份,如果还是没有权限则应用其它用户权限。


SUID:一般用于可执行文件

    任何用户执行拥有SUID的可执行文件,不再以自己的身份来当作进程的属主,而是以文件的属主当作进程的属主。

    suid表现为文件属主执行权限位上的s或S
           文件属主权限位执行权限则表现为s       rws --- ---

           文件属主权限位没有执行权限则表现为S     rwS --- ---

    如何设定一个文件有SUID权限

            chmod u+s  FILE ....

            或

            chmod 4775 FILE ..  \\ 这种方法,需要加上原来的权限才可以。


SGID:一般用于目录

    拥有SGID权限的目录,用户在此目录下创建的文件将不再是用户的属所属的基本组,而是目录所属的基本组。

      sgid表现为文件属组执行权限位上的s或S
            文件属组权限位执行权限则表现为s  --- rws ---
            文件属组权限位没有执行权限则表现为S  --- rwS ---

    如何设定一个目录有SGID权限

            chmod g+s  DirName ...

            或

            chmod 2775  DirName ... \\ 这种方法,需要加上原来的权限才可以。


粘滞位:sticky

    对于公共可写的目录,用户可创建文件,可以删除自己的文件,但无法删除别的用户的文件

    sticky表示为文件其它用户执行权限位上的t或T:
            其它用户权限位有执行权限则表现为t  --- --- rwt   
            其它用户权限位有执行权限则表现为T  --- --- rwT

    如何设定一个目录有sticky

            chmod o+t DirName ...

            或

            chmod 1775  DirName ... \\ 这种方法,需要加上原来的权限才可以。


练习:

1、复制cat命令至/tmp目录,普通用户使用/tmp/cat命令能查看root用户有权限查看的所有文件;

# cp `which cat` /tmp
# chmod u+s /tmp/cat 
# ls -l
-rwsr-xr-x 1 root root 48568 Apr  2 19:53 cat

用普通份,运行/tmp/cat来查看/etc/passwd文件(该文件只有root用户才能访问)

$ /tmp/cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin


2、新建/tmp/test目录:
          要求openstack和docker用户对其有写权限,且在目录创建的文件的属组都为cloud组;
          要求每个用户不能删除别人的文件,但可以编辑;

创建所需用户

# groupadd cloud
# useradd -G cloud openstack
# useradd -G cloud docke
# id docker
uid=1006(docker) gid=1007(docker) groups=1007(docker),1005(cloud)
# id openstack
uid=1007(openstack) gid=1008(openstack) groups=1008(openstack),1005(cloud)


创建所需目录

# mkdir /tmp/test
# chmod 775 /tmp/test

更改相应权限

# chown :cloud /tmp/test/
# chmod g+s /tmp/test
# chmod o+t /tmp/test
# ls -ld /tmp/test
drwxrwsr-t 2 root cloud 4096 Apr  2 20:02 /tmp/test


以openstack的身份在/tmp/test创建一个文件

$ whoami openstack
$ touch /tmp/test/openstack.txt
$ ls -l  /tmp/test/openstack.txt
-rw-rw-r-- 1 openstack cloud 0 Apr  2 20:18 openstack.txt

以docker的身份在/tmp/test创建一个文件

$ whoamidocker
$ touch /tmp/test/docker.txt
$ ls -l /tmp/test
-rw-rw-r-- 1 docker    cloud 0 Apr  2 20:20 docker.txt
-rw-rw-r-- 1 openstack cloud 0 Apr  2 20:18 openstack.txt

测试权限

$ rm /tmp/test/openstack.txt 
rm: cannot remove `/tmp/test/openstack.txt‘: Operation not permitted
$ echo "test" >> /tmp/test/openstack.txt
$ cat /tmp/test/openstack.txt
test

测试结果可以看出,只能修改对方的文件却不能删除











本文出自 “菜鸟日志” 博客,请务必保留此出处http://zkxfoo.blog.51cto.com/1605971/1751943

以上是关于文件的特殊权限,SUIDSGIDSTICKY的主要内容,如果未能解决你的问题,请参考以下文章

linux 文件都有哪些特殊权限

特殊权限set_uid /特殊权限set_gid/特殊权限stick_bit/软链接文件/硬连接文件

特殊权限set_uid, 特殊权限set_gid,特殊权限stick_bit,软链接文件, 硬连接文件

linux文件的特殊权限及隐藏权限

Linux:文件特殊权限

文件权限二(特殊权限隐藏属性文件访问控制列表切换用户方式)