Linux文件系统的权限


属主(u)、属组(g)、其它用户(o)


rwx,     rwx,     rwx


-rwxr-xr-x. 1 root root   44680 Jun 25 2011 paps


lrwxrwxrwx. 1 root root     5 Aug 26 03:42 parec -> pacat


lrwxrwxrwx. 1 root root     5 Aug 26 03:42 parecord -> pacat


-rwsr-xr-x. 1 root root   30768 Feb 22 2012 passwd


-rwxr-xr-x. 1 root root   29136 Oct 15 2014 paste


 421 4 1 4  1


    7     5     5


 

权限管理:chmod


所属关系管理: chown, chgrp


文件遮罩码:umask


 

修改文件权限:chmod


  chmod [OPTION]... MODE[,MODE]... FILE...


  chmod [OPTION]... OCTAL-MODE FILE...


  chmod [OPTION]... --reference=RFILE FILE..


 

  三类:


  u: owner


  g: group


  o: other


  a: all


 

  两种用法:


  =mode


  =rx, =r, =


  ug=rx, go=


  [+|-]mode


  u+r,


  +w


  +x


 

  -R: recursive 修改文件夹及其子文件和文件夹


 

 修改文件属主:chown


   chown [OPTION]... [OWNER][:[GROUP]] FILE...


  chown [OPTION]... --reference=RFILE FILE...


  -R: recursive


        user 只变更文件属主


        :group  只变更文件属组


        user:group  变更文件的属主和属组


 

修改文件属组:chgrp


 

[root@gxd ~]# ll


total 72


-rw-------. 1 root root  1676 Aug 26 03:57 anaconda-ks.cfg


-rw-r--r--. 1 root root 50433 Aug 26 03:57 install.log


-rw-r--r--. 1 root root 10033 Aug 26 03:52 install.log.syslog


-rw-r--r--. 1 root root     0 Aug 28 14:18 test.file


[root@gxd ~]# chgrp centos test.file


[root@gxd ~]# ll


total 72


-rw-------. 1 root root    1676 Aug 26 03:57 anaconda-ks.cfg


-rw-r--r--. 1 root root   50433 Aug 26 03:57 install.log


-rw-r--r--. 1 root root   10033 Aug 26 03:52 install.log.syslog


-rw-r--r--. 1 root centos     0 Aug 28 14:18 test.file


 

umask:遮罩码


设置用户创建文件的默认权限,它与chmod的效果刚好相反,umask设置的是权限"补码",而chmod设置的是文件权限码


 

       目录:777-umask


       文件:666-umask


    如果某一类用户的权限减得的结果有执行权限,此时会自动让其权限位加1


 

       umask UMASK


           设定:仅对当前shell进程有效;


   对所有用户设置umask需修改/etc/profile文件


   对当前用户修改umask需修改~/.profile


 

Linux文件系统上的特殊权限


 

    进程的安全上下文:


       前提:进程有属主(进程以哪个用户的身份运行);文件有属主和属组;


       (1) 用户是否能够把某个可执行程序文件启动为进程,取决于用户对程序文件是否拥有执行权限;


       (2) 程序启动为进程后,此进程的属主为当前用户,也即进程的发起者;进程所属的组,为发起者的基本组;


       (3) 进程拥的访问权限,取决其属主的访问权限:


           (a) 进程的属主,同文件属主,则应用文件属主权限;


           (b) 进程的属主,属于文件的属组,则应用文件属组权限;


           (c) 则应用其它权限;


    其实在Linux系统中不公有SUID、SGID,还有Effective UID和Effective GID,即EUID和EGID,当文件设置了SUID和SGID位后,系统将文件属主或属组的UID或GID传送给EUID或EGID来执行。


    SUID


       (1) 任何一个可执行程序文件能不能启动为进程:取决于发起者对程序文件是否有执行权限;


       (2) 启动为进程之后,其属主不是发起者,而程序文件自己的属主;这种机制即为SUID


 

       权限设定:


           chmod u+s FILE...


           chmod u-s FILE...


 

       注意:


           s: 属主原本拥有x权限;


           S: 属主原本无x权限,SUID权限不生效


 

    SGID


       默认情况下,用户创建文件时,其属级为此用户所属的基本组;


       一旦某目录被设定了SGID权限,则对此目录拥有写权限的用户在此目录中创建的文件所属的组为目录的属组,而非用户的基本组;


 

       权限设定:


           chmod g+s FILE...


           chmod g-s FILE...


 

 

    Sticky:


       对于一个多人可写的目录,此权限用于限制每个仅能删除自己的文件;


 

       权限设定


           chmod o+t FILE...


           chmod o-t FILE...


 

    SUID, SGID, STICKY


       000


       001


       010


       011


       100


       101


       110


       111


 

 

UNIX的实现中,文件权限用12个二进制位表示,如果该位置上的值是1,表示有相应的权限:


11 10 9 8 7 6 5 4 3 2 1 0


s  g  t r w x r w x r w x


11位为SUID位,第10位为SGID位,第9位为sticky位,第8-0位对应于上面的三组rwx位。


所以在修改文件权限时,我们可以用4位数来设置文件权限来实现同时设置SUIDSGIDSTICKY权限


       chmod 4777 FILE


       chmod 3755 DIR


 

 

    练习:


       1、让普通用户能使用/tmp/cat去查看/etc/shadow文件;


          chmod u+s /tmp/cat


       2、创建目录/test/data,让某组内普通用户对其有写权限,且创建的所有文件的属组为目录所属的组;此外,每个用户仅能删除自己的文件;


        chown :centos /test/data


        chmod g+w /test/data


        chmod g+s /test/data


        chmod o+t /test/data