Linux文件系统上的特殊权限
进程的安全上下文:
前提:进程有属主(进程以哪个用户的身份运行);文件有属主和属组;
(1) 用户是否能够把某个可执行程序文件启动为进程,取决于用户对程序文件是否拥有执行权限;
(2) 程序启动为进程后,此进程的属主为当前用户,也即进程的发起者;进程所属的组,为发起者的基本组;
(3) 进程拥的访问权限,取决其属主的访问权限:
(a) 进程的属主,同文件属主,则应用文件属主权限;
(b) 进程的属主,属于文件的属组,则应用文件属组权限;
(c) 则应用其它权限;
SUID:
(1) 任何一个可执行程序文件能不能启动为进程:取决于发起者对程序文件是否有执行权限;
(2) 启动为进程之后,其属主不是发起者,而程序文件自己的属主;这种机制即为SUID;
权限设定:
chmod u+s FILE...
chmod u-s FILE...
注意:
s: 属主原本拥有x权限;
S: 属主原本无x权限;
SGID:
默认情况下,用户创建文件时,其属组为此用户所属的基本组;
一旦某目录被设定了SGID权限,则对此目录拥有写权限的用户在此目录中创建的文件所属的组为目录的属组,而非用户的基本组;
权限设定:
chmod g+s FILE...
chmod g-s FILE...
Sticky:
对于一个多人可写的目录,此权限用于限制每个仅能删除自己的文件;
权限设定
chmod o+t FILE...
chmod o-t FILE...
SUID, SGID, STICKY
SUID为4
SGID为2
STICKY为1
这个和r,w,x一模一样
chmod 4777 FILE
详细解释:对FILE文件加了SUID并且属主属组其他用户都有读写执行权限
chmod 3755 DIR
详细解释:对DIR目录加了SGID和STICKY属主拥有读写执行,属组和其他用户拥有读和执行权限
chattr和lsattr
chattr:改变文件属性
常用选项:
+在原有参数基础上,增加参数
-在原有参数基础上,减少参数
=直接设置为该参数
i:设定文件不能被改名,删除,设定链接关系。同时不能增加和修改内容(这项对root用户也生效)
a:只允许文件被追加,不能删除。多用于服务器日志安全(这项对root用户也生效)
lsattr:查看文件属性
实战
1.让普通用户能使用/tmp/cat去查看/etc/shadow文件
解答:
- cp /bin/cat /tmp/cat
- chmod u+s /tmp/cat
- su - hadoop
- /tmp/cat /etc/shadow
2.创建目录/test/data,让某组内普通用户对其有写权限,且创建的所有文件的属组为目录所属的组;此外,每个用户仅能删除自己的文件;
解答:
- mkdir -p /test/data
- setfacl -m g:hadoop:rwx /test/data
- chmod g+s,o+t /test/data