码迷,mamicode.com
首页 > 其他好文 > 详细

文件的特殊权限,SUID、SGID、STICKY

时间:2016-03-17 02:10:38      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:suid sgid sticky linux文件特殊权限


安全上下文

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

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


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

文件的特殊权限,SUID、SGID、STICKY

标签:suid sgid sticky linux文件特殊权限

原文地址:http://zkxfoo.blog.51cto.com/1605971/1751943

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!