安全上下文
当一个进程访问一个文件的匹配权限机制如下
进程访问文件时,首先检查进程的属主是否对该文件有访问权限,如果有则以属主的身份访问,否则使用属组的身份,如果还是没有权限则应用其它用户权限。
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
测试结果可以看出,只能修改对方的文件却不能删除