除了读写执行权限以外,ext3文件系统还支持强制位(setuid 和setgid)与冒险位(sticky)的特别权限针对u,g,o,分别有set uid,set gid,及sticky。 强制位与冒险位添加在执行权限的位置上,如果该位置上原已有执行权限,则强制位与冒险位以小写字母的方式表示,否则,以大写字母表示。 强制位set uid与set gid在u和g的x位置上各采用一个s,冒险位(sticky)使用一个t。 在可执行文件上,用户可以添加set uid和set gid,默认情况下,用户执行一个指令,会以该用户的身份来运行进程,因为指令文件上的强制位,可以让用户执行的指令,以指令文件的拥有者或所属组的身份运行进程。 Umask 冒险位和强制位,网上也有说成粘着位的 所谓的强制位和冒险位都是最最前面那个0的位置来表示,当前面那个位,2和4权限就叫强制位,1的权限就是冒险位,2代表的是GID,4代表的是uid,1代表的是sticky。 gid,uid,sticky的作用: GID的作用:默认情况下,用户建立的文件属于用户当前所在的组,但是设置了GID以后,表示在此目录中,任何人建立的文件,都会属于目录所属的组。注意:GID只能对目录设置. 这个在文件权限和团队使用文件目录很有用处 chmod g+s 文件名 用这个命令也可以给他设置GID UID的作用:当一个文件设置了UID,那么所有用户执行这个文件的时候,都是以这个用户的所有者的权限来执行。 Sticky:一旦目录上设置了冒险位,则表示在此目录中,只有文件的拥有者、目录的拥有者与系统管理员可以删除文件。这个也是对目录进行设置,我们给目录一个冒险位,最后一个X变成了t. 一个例子是/bin/passwd ,要读写/etc/passwd文件需要超级用户权限,但一般用户也需要随时可以改变自己的密码,所以/bin/passwd就设置了suid,当用户改自己密码的时侯就拥有了超级用户权限。 要删除一个文件,你不一定要有这个文件的写权限,但你一定要有这个文件的上级目录的写权限。也就是说,你即使没有一个文件的写权限,但你有这个文件的上级目录的写权限,你也可以把这个文件给删除,而如果没有一个目录的写权限,也就不能在这个目录下创建文件。 如何才能使一个目录既可以让任何用户写入文件,又不让用户删除这个目录下他人的文件,sticky就是能起到这个作用。stciky一般只用在目录上,用在文件上起不到什么作用。 在一个目录上设了sticky位后,(如/home,权限为1777)所有的用户都可以在这个目录下创建文件,但只能删除自己创建的文件(root除外),这就对所有用户能写的目录下的用户文件启到了保护的作用。 默认情况下,如果一个目录上有w和x权限,则任何人可以在此目录中建立与删除文件。 如果目录上设置了冒险位,则表示在此目录中,只有文件的拥有者、目录的拥有者与系统管理员可以删除文件。
用户可以用chmod指令来为文件设置强制位与冒险位。
– set uid:chmod u+s 文件名
– set gid:chmod g+s 文件名
– sticky:chmod o+t 文件名
强制位与冒险位也可以通过一个数字加和,放在读写执行的三位数字前来指定。
– 4(set uid)
– 2(set gid)
– 1(sticky)
设置suid / guid
命令 结果 含义
chmod 4755 -rwsr-xr-x suid、文件属主具有读、写和执行的权限,所有其他用户具有读和执行的权限
chmod 6711 -rws--s--x suid、sgid、文件属主具有读、写和执行的权限,所有其他用户具有执行的权限
chmod 4511 -rwS--x—x suid、文件属主具有读、写的权限,所有其他用户具有执行的权限
上面的表中有具有这样权限的文件:rwS --x -- x,其中S为大写。它表示相应的执行权限位并未被设置,这是一种没有什么用处的suid设置可以忽略它的存在。 ------------------------------------------------------------------------------------------------- ACL 可以对某个文件设置该文件具体的某些用户的权限,意思就是通过ACL可以对一个文件权限做扩展,可以不同的用户对某个文件有不同的权限。 现在我们把redhat用户加上一个RWX的权限:setfacl -m u:redhat:rwx file 现在我们取消redhat用户的权限:setfacl -x redhat file 现在我们也取消redhat组的权限:setfacl -x g:redhat file 用ll看,权限后面有个+就可能是设置了文件权限,所以没必要没个文件都用gefacl 去看 getfacl <文件名>
获取文件的访问控制信息 setfacl设置文件的acl
-m 修改文件的acl
-x 取消对文件的设置 setfacl –m u:用户名:权限 文件名 #加用户权限
setfacl –m g:组名:权限 文件名 #加组权限
setfacl –x 用户名 文件名 #-用户权限
setfacl –x g:组名 文件名 #-组权限 注意,撤消ACL操作:
对用户直接加用户名字就可以了
对组,在前面加g:组名 -----------------------------------------------------------------------------------------------------
例: [root@redhat root]# ls -l test1.txt -rw-r--r-- 1 root root 0 10月 24 20:23 test1.txt [root@redhat root]# id root 显示root用户的详细信息 uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) [root@redhat root]# mkdir test 创建test目录 [root@redhat root]# touch test/test.txt 在目录test下建立一个test.txt文件 [root@redhat root]# chown root:luowei test w修改目录test的所属组 [root@redhat root]# ls -l test 这样是显示目录test的文件属性 总用量 0 -rw-r--r-- 1 root root 0 10月 24 20:25 test.txt [root@redhat root]# ls -ld test 显示目录test的目录属性,拥有者是root,所属组是luowei drwxr-xr-x 2 root luowei 4096 10月 24 20:25 test [root@redhat root]# chmod 745 test 修改目录test的权限 [root@redhat root]# ls -ld test drwxr--r-x 2 root luowei 4096 10月 24 20:25 test [root@redhat root]# chmod g+s test 在test目录所属组上设置强制位 [root@redhat root]# ls -ld test drwxr-Sr-x 2 root luowei 4096 10月 24 20:25 test [root@redhat root]# cd test [root@redhat test]# ls -l 总用量 0 -rw-r--r-- 1 root root 0 10月 24 20:25 test.txt [root@redhat test]# touch test1.txt [root@redhat test]# chown root:luowei test1.txt 修改test1.txt的所属组 [root@redhat test]# cd /home/luowei [root@redhat luowei]# chmod 776 test 修改test权限 [root@redhat luowei]# ls -ld test drwxrwxrw- 2 luowei luowei 4096 10月 24 19:54 test [root@redhat luowei]# chown root:luowei test [root@redhat luowei]# ls -ld test drwxrwxrw- 2 root luowei 4096 10月 24 19:54 test [root@redhat luowei]# chmod g+s test 在test目录所属组上设置强制位 [root@redhat luowei]# ls -ld test drwxrwsrw- 2 root luowei 4096 10月 24 19:54 test [root@redhat luowei]# cd test [root@redhat test]# ls [root@redhat test]# touch test.txt [root@redhat test]# ls -l test.txt -rw-r--r-- 1 root luowei 0 10月 24 21:05 test.txt [root@redhat test]# [root@redhat root]# cd /home/luowei [root@redhat luowei]# mkdir sticky_test [root@redhat luowei]# chown luowei:luowei sticky_test/ [root@redhat luowei]# chmod 777 sticky_test/ [root@redhat luowei]# chmod o+t sticky_test/ 添加冒险位 [root@redhat luowei]# cd sticky_test/ [root@redhat sticky_test]# touch test.txt [root@redhat sticky_test]# chown root:luowei test.txt [root@redhat sticky_test]# ls -l test.txt -rw-r--r-- 1 root luowei 0 10月 24 22:44 test.txt [root@redhat sticky_test]# su - luowei [luowei@redhat luowei]$ cd sticky_test/ [luowei@redhat sticky_test]$ touch test2.txt [luowei@redhat sticky_test]$ ls -l 总用量 0 -rw-rw-r-- 1 luowei luowei 0 10月 24 22:46 test2.txt -rw-r--r-- 1 root luowei 0 10月 24 22:44 test.txt [luowei@redhat sticky_test]$ rm test.txt rm:是否删除有写保护的一般空文件'test.txt'? y [luowei@redhat sticky_test]$ cd .. [luowei@redhat luowei]$ ls -l 总用量 8 -rwxrwxrw- 1 luowei luowei 0 10月 24 19:45 aa [luowei@redhat luowei]$ su - root Password: [root@redhat root]# groupadd test 建立一个test用户组 [root@redhat root]# useradd -g test test1 在test用户组下建立一个名为test1的用户 [root@redhat root]# id test1 显示test1的用户信息 uid=501(test1) gid=501(test) groups=501(test) [root@redhat root]# cd /home/luowei [root@redhat luowei]# passwd test1 修改test1的密码 Changing password for user test1. New password: BAD PASSWORD: it is based on a dictionary word Retype new password: passwd: all authentication tokens updated successfully. [root@redhat luowei]# su - luowei [luowei@redhat luowei]$ su - test1 Password: [test1@redhat test1]$ cd /home/luowei -bash: cd: /home/luowei: 权限不够
|