首页 > 代码库 > Linux用户和组权限管理

Linux用户和组权限管理

技术分享

一、文件的权限

文件的权限主要针对三类对象进行定义

owner:属主u;   group:属组g;    other :其他o

每个文件针对每类访问者都定义了三种权限:

r:Readable   w: Writable    x: eXcutable

对文件来说

  • r: 可使用文件查看类工具获取其内容

  • w: 可修改其内容

  • x: 可以把此文件提请内核启动为一个进程

对目录来说

  • r : 可以使用ls查看此目录中文件列表

  • w: 可在此目录中创建文件,也可删除此目录中的文件

  • x: 可以使用ls -l查看此目录中文件列表,可以cd进入此
    目录

  • tips:此外还有X,用于只给目录x权限,不给目录内文件x权限


技术分享

如图所示文件属性

  •  -rw- r-- r--

左三位:定义user(owner)的权限,属主权限
中三位:定义group的权限,属组权限
右三位:定义other的权限,其他的权限

        左第一个 -文件类型提示符, 代表该文件为普通文件。后9位分别对应:该文件对属主个权限为读写,对属组和其他人的权限为只读。

八进制数字表示权限设置方法
               

--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7

 例如:640: rw-r-----
           755: rwxr-xr-x



二、文件权限的管理

        修改文件的属主: chown
                     chown [OPTION]... [OWNER][:[GROUP]] FILE...
             用法:
                      OWNER                       #修改文件属主
                      OWNER:GROUP          #修改文件属主和属组
                     :GROUP                        #修改文件属组
                     命令中的冒号可用 . 替换
                     -R: 递归
                     chown [OPTION]... --reference=RFILE FILE... 

                                   参考RFILE文件的属主,将FILE的修改为同RFILE


            修改文件的属组: chgrp
                     chgrp [OPTION]... GROUP FILE...
                     chgrp [OPTION]... --reference=RFILE FILE...
                     -R 递归

 

           修改文件的权限:

             chmod [OPTION]... OCTAL-MODE FILE...
                    -R: 递归修改权限
             chmod [OPTION]... MODE[,MODE]... FILE...
                    MODE:
                       修改一类用户的所有权限:
                             u= g= o= ug= a=  u= , g=
                       修改一类用户某位或某些位权限
                             u+ u- g+ g- o+ o- a+ a- + -
            chmod [OPTION]... --reference=RFILE FILE...
                      参考RFILE文件的权限,将FILE的修改为同RFILE

            权限设置示例

 

chgrp sales testfile                   #修改文件属组为sales
chown root:admins testfile             #修改文件属主root,属组admins
chmod u+wx,g-r,o=rx file               #修改文件对属主加wx权限,属组去掉r权限,其他人权限设置为rx
chmod -R g+rwX /testdi                 #递归修改目录属组权限为rwx,目录内文件不添加x权限
chmod 600 file                         #修改文件对属主权限为rw,其他人无权限
chown mage testfile                    #修改文件属主为mage


             新建文件和目录的默认权限
              umask值 可以用来保留在创建文件权限
              新建
FILE权限: 666-umask
                       如果所得结果某位存在执行(奇数)权限,则将其权限+1
              新建DIR权限: 777-umask
              非特权用户umask是 002
              root的umask 是 022
              umask: 查看已设定umask值
              umask #: 设定umask值
                        例:umask 002     设置umask值为002
              umask –S 模式方式显示     例:u=rwx,g=rx,o=rx

              umask –p 输出可被调用     
              全局设置: /etc/bashrc 用户设置: ~/.bashrc



Linux文件系统上的特殊权限
             
          

      1、可执行文件上SUID权限
            任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限, 启动为进程之后,其进程的属主为原程序文件的属主。用户在使用具有SUID权限的二进制程序时将临时继承程序拥有者的权限。
                 SUID只对二进制可执行程序有效
                 SUID设置在目录上无意义
                 权限设定:
                    chmod u+s FILE...
                    chmod u-s FILE...

      2、可执行文件上SGID权限
            任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限, 启动为进程之后,其进程的属主为原程序文件的属组。用户在使用具有SUID权限的二进制程序时将临时继承程序所属组的权限。   

               权限设定:
                     chmod g+s FILE...
                     chmod g-s FILE...

      3、目录上的SGID权限

            默认情况下,用户创建文件时,其属组为此用户所属的主组。 一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组。
                  通常用于创建一个协作目录
                  权限设定:
                     chmod g+s DIR...
                     chmod g-s DIR...

       4、Sticky 位

             具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权
             在目录设置Sticky 位,只有文件的所有者或root可以删除该文件。
                  sticky 设置在文件上无意义
                  权限设定:
                     chmod o+t DIR...
                     chmod o-t DIR...

                    例如:

                       ls -ld /tmp
                          drwxrwxrwt 12 root root 4096 Nov 2 15:44 /tmp


           tips:特殊权限位用数字法单独计算

                     SUID : 4

                     SGID : 2

                     Sticky:1

                   例:设置文件SUID权限     chmod 4777 /tmp/a.txt

                          设置目录Sticky位       chmod 1777 /tmp



           权限位映射

                  SUID: user,占据属主的执行权限位
                             s :  属主拥有x权限

                             S:属主没有x权限
                  SGID: group,占据属组的执行权限位
                             s: group拥有x权限
                             Sgroup没有x权限

                  Sticky: other,占据other的执行权限位
                             t: other拥有x权限
                             T: other没有x权限


三、ACL 访问控制列表

          

          特定场景需要对用户进行更为细致的权限管理时,仅属主、属组、其他三个分类是不够的。这时我们需要采用ACL技术对特定用户的管理来进行规划。

           ACLAccess Control List,能够实现灵活的权限管理,除了文件的所有者,所属组和其它人,可以对更多的用户设置权限。系统是否支持ACL与存储文件系统有关,CentOS7 默认创建的xfsext4文件系统具有ACL功能CentOS7 之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加:

          tune2fs –o acl /dev/sdb1
          mount –o acl /dev/sdb1 /mnt/test

          ACL生效顺序:所有者,自定义用户,自定义组,其他人


为多用户或者组的文件和目录赋予访问权限示例:

         

  getfacl file |directory

          #查看文件或目录是否  设置ACL                              

  setfacl -m u:wang:rwx file|directory

          #设置文件/目录对王用户的权限为rwx (-m修改)         

  setfacl -Rm g:sales:rwX directory

           #递归修改目录对sales组权限为rwx(目录内文件不设置x权限)

  setfacl -M file.acl file|directory

          #批量设置多个文件/目录的ACL  (file.acl文件内容例:u:wang:rwx) 

   setfacl -m g:salesgroup:rw file| directory

          #设置文件/目录对salesgroup组的权限为rw    




                    ACL文件上的group权限是mask 值(自定义用户,自定义组,拥有组的最大权限) ,而非传统的组权限。

                   技术分享

                    getfacl 可看到特殊权限: flags
                    通过ACL赋予目录默认x权限, 目录内文件也不会继承x权限
                    base ACL 不能删除
                    setfacl -k dir 删除默认ACL权限
                    setfacl –b file1清除所有ACL权限
                    getfacl file1 | setfacl --set-file=- file2 复制file1acl权限给file2

                    mask只影响除所有者和other的之外的人和组的最大权限Mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission)

                       用户或组的设置必须存在于mask权限设定范围内才会生效
                              setfacl -m mask::rx file
                    --set选项会把原有的ACL项都删除,用新的替代,需要注意的是一定要包含UGO的设置,不能象-m一样只是添加ACL就可以
                    示例:
                               setfacl --set u::rw,u:wang:rw,g::r,o::- file1


备份和恢复ACL

                    主要的文件操作命令cpmv都支持ACL,只是cp命令需要加上-p 参数。但是tar等常见的备份工具是不会保留目录和文件的ACL信息
                           getfacl -R /tmp/dir1 > acl.txt
                           setfacl -R -b /tmp/dir1
                           setfacl -R --set-file=acl.txt /tmp/dir1
                           setfacl --restore acl.txt
                           getfacl -R /tmp/dir1

Linux用户和组权限管理