强制位与冒险位描述
• 在Linux系统中文件除了有读写执行权限外,ext2文件系统还支持强制位 (setuid 、setgid)与冒险位(sticky)的特别权限
• 针对文件创建者可以添加强制位(setuid),文件属组也可以添加强制位 (setgid),针对其它用户又可以添加冒险位(sticky)
• 强制位与冒险位添加在执行权限(x)的位置上。如果该位置上原已有执行权限,则强制位与冒险位以小写字母(s或t)的方式表示,否则,以大写字母(S或T)表示
• 例:如果文件的权限为”rwx r-- r-x”,那么如果设置了强制位与冒险位则新的权限为“rwsr-Sr-t”
对创建者设置强制位
• 对创建者设置强制位setuid,一般针对的是一个系统中的指令或可执行文件
• 在默认情况下,用户执行一个指令,会以该用户的身份来运行
• 当对一个指令对应的可执行文件设置了(setuid),那么任何一个用户在执行这个文件的时候,都会以指令对应的可执行文件的创建者身份来执行这个文件
• 语法:chmod u±s <文件名>
• 例:chmod u+s /bin/ls
可以查看到/bin/ls的所有者和所有组都是root。假如现在有一个文件夹是属于root用户root组,权限为-rwx--x--x,也就是除了root用户,所属组和其他用户对这个文件夹除了cd没有任何权限。这时随便切换一个other用户,发现在这个文件夹里敲ls会被拒绝。用ll /bin/ls 查看发现权限是-rwxr-xr-x,即除了root用户其他所有用户有读和执行的权限(即使将该文件的权限改成777,other用户仍然无法在该文件夹里敲ls)。用chmod u+s /bin/ls命令后,再用ll /bin/ls 查看发现权限变成了-rwsr-xr-x,说明我使/bin/ls这个命令在被执行的时候是按照这个可执行文件的创建者,即root来执行的,这时敲ls就不会被拒绝了。
bin文件夹和sbin文件夹里都是系统文件,所以即使是root用户把自己的权限(文件属主和属组)给其他普通用户,他也不能进行u±s操作。但是其他普通文件夹就可以
root用户赋予普通用户,普通用户权限随root
如果之后普通用户权限赋予root,root用户也会随这个普通用户的权限
对组设置强制位
• 对组设置强制位setgid,一般针对的是一个目录
• 在默认情况下,用户在某目录中创建的文件或子目录的属组是该用户的主属组
• 如果对一个目录设置了属组的强制位,则任何用户在此目录中创建的文件或子目录都会继承此目录的属组(前提:用户有权限在目录中创建文件或子目录)
• 语法:chmod g±s <目录>
• 例:chmod g+s /dir
即使是root用户在chmod g+s <目录>下它的所属组也会变成该文件所属的组
比如现在有一个文件夹的所属组为user1组,通过chmod g+s <文件夹>进行设置强制位以后,所有在这个文件夹里新创建的文件或文件夹都会为user1组,旧的文件不会被更改。
同样,在chmod g-s <文件夹>以后再新建的文件夹没有s,但是之前继承的有s的不会被更改。注意,比如有文件夹E,在E文件夹上设置g+s后,在E文件家里新建了文件夹F,那么F会继承E的g+s。之后在E文件夹上设置g-s后,还要在F文件夹上设置g-s才能把这个s去掉,否则在F文件夹里新建的文件夹还是会继承
实验:
groupadd caiwubu #新建组caiwubu
useradd -g caiwubu kuaiji #新建用户kuaiji,主属组为caiwubu
mkdir /caiwubu
umask 0027 #新建文件权限为640,即-rw-r------
touch /caiwubu/zhangben1 #以上操作都用root完成,这时建的文件的权限为-rw-r-----.即other不能查看文件
ll /caiwubu #用kuaiji用户查看,发现zhangben1无法被caiwubu组成员查看(即cat不了这个文件)
#因为这时该文件属于root用户root组,除了root以外的用户都属于other
chown :caiwubu /caiwubu #将caiwubu文件夹的所属组改成caiwubu
chmod g+s /caiwubu
touch /caiwubu/zhangben2
ll /caiwubu #用kuaiji用户查看,zhangben2自动继承文件夹组权限,可被caiwubu组查看
对其他用户设置冒险位
• 对其它用户设置冒险位sticky ,一般针对的是一个目录 ,chmod o+t <目录>
• 在默认情况下,如果一个目录对用户有r、w和x权限,则这个用户可以在此目录中建立与删除任何文件
• 一旦在目录上设置了冒险位,则表示在此目录中,只有文件的拥有者、目录的拥有者与root用户才可以在目录中删除此文件
实验:
useradd xiaoshou1
useradd xiaoshou2
mkdir /public
chmod o+rwx /public
su - xiaoshou1
touch /public/xiaoshou1
su - xiaoshou2
rm /public/xiaoshou1 #可以删除
chmod o+t /public
su - xiaoshou1
touch /public/xiaoshou1
su - xiaoshou2
rm /public/xiaoshou1 #不可以删除
通过数字来设置权限
• 用户可以用chmod指令来为文件设置强制位与冒险位
• setuid:chmod u+s 文件名
• setgid:chmod g+s 目录名
• sticky:chmod o+t 目录名
• 强制位与冒险位也可以通过一个数字加和,放在读写执行的三位数字前来指定
• 4(setuid)
• 2(setgid)
• 1(sticky)
• 例:要为某文件设置为”rws r-x r-x”的权限则可以使用下面的指令:chmod 4755 <文件名>
stat <文件名或者目录名> 即可查看四位权限
四位权限位的第一位表示特殊权限位,即u+s=4,g+s=2,o+t=1
例如一个文件夹权限为:1777,表示设置了o+t,并且所有用户都有读写执行权限
❀一个文件能不能删要看这个文件所在的文件夹有没有w权限,和它所在的文件夹的上一层文件夹有没有w权限没有关系。除非用g+s让文件夹继承父文件夹权限
u+s 在文件夹上设置一点儿意义没有
g+s 在文件上设置一点儿意义没有
o+t 在文件上设置一点儿意义没有
网友评论