系统基础之权限管理

权限管理:


概论:

 上节,为大家介绍了用户,和组的知识.今天为大家介绍与用户,组息息相关的知识,权限.linux是多用户,多任务的操作系统,面对多人的操作,安全问题就很重要,权限机制就很好的对安全进行防护,避免他人操作自己的文件.下面给大家详细介绍权限.

  首先让我们先直观地看下权限,对权限有个最基本的认识.以/etc/issue文件进行示例.

[root@wen-7 themes]# ll /etc/issue            #ls -l,命令 以长选项的格式查看文件
-rw-r--r-- 1 root root 41 7月  27 17:10 /etc/issue

  显示信息前面有rwxrwxrwx形式的内容,这就是权限的最直接的表达方式,那每个字符分别有什么含义呢

权限标识:

rwxrwxrwx:

 左三位:定义user(owner)的权限(属主)

 中三位;dingyi group的权限(属组)

 右三位:定义other的权限(普通用户)

 r:read   读

 w:write   写

 x:excute  执行

权限实际功能:(权限面对的对象不同,具体的功能不同)      

 对文件而言:

   r:可获取文件的数据

   w:可修改文件的数据 (不可删除文件)

   x:可将此文件运行为进程(针对二进制程序或脚本)

   X:不会增加X(前提本身无X权限)

 对目录而言:

   r:可使用ls命令获取其下的所有的文件列表

   w:可修改此目录下的文件列表:即创建或删除文件    不看文件权限  

   x:可cd至此目录中,且可使用ls -l来获取所有文件的详细属性信息

   X:不会增加X(前提本身无X权限

进程安全上下文(工作机制):

  进场对文件的访问权限应用模型

   进程的属主与文件的属主是否相同:如果相同,则应用属主权限;

    否则,则检查进场的属主是否属于文件的属组;如果是,则应用属组权限

    否则,就只能应用other的权限

    按顺序匹配,匹配成功,不在进行下面的匹配

权限组合机制:   

           

 符号 二进制  八进制
– – – 0  0
– – x 001  1
– w – 010  2
– w x 011  3
r – – 100  4
r – x 101  5
r w – 110  6
r w x 111  7

   练习: 对应说出下面权限位的八进制表示方法   

rw-rw-r--   rwxrwxr--   rwxr-x---  rw--------  rwxr-xr-x
  750          600        755         600         755


权限管理命令:


chmod: 改变文件的访问权限

命令格式:

   chmod [options] ..mode[,mode] file…

  chmod [options]  [–reference=rfile]

  chmod [options]  OCTAL-MODE FILE….

 命令对象:          

   三类用户:

    u:属主

    g:属组

    o:其他 

    a:所有

 

 选项:

    [-R]:递归修改,修改目录权限,目录下的所有文件的权限跟目录权限一样    默认是只修改目录本身  除授权表示法外,其他表示法不建议使用   注意:仅管理员可修改文件的属主和属组 用户仅能修改属主为自己的那些文件的权限                ;

[root@wen-7 tmp]# chmod -R go= skel/
[root@wen-7 tmp]# ll -d skel
drwx------ 3 root root 87 7月  30 11:08 skel/
[root@wen-7 tmp]# ll -a skel/
总用量 24
drwx------   3 root root   87 7月  30 11:08 
.drwxrwxrwt. 19 root root 4096 7月  30 11:10 
..-rw-------   1 root root   18 7月  30 11:08 
.bash_logout-rw-------   1 root root  193 7月  30 11:08 
.bash_profile-rw-------   1 root root  231 7月  30 11:08 
.bashrcdrwx------   4 root root   37 7月  30 11:08 
.mozilla-rw-------   1 root root  658 7月  30 11:08 
.zshrc
[root@wen-7 tmp]# chmod -R g+r skel/
[root@wen-7 tmp]# ll -d skel/
drwxr----- 3 root root 87 7月  30 11:08 skel/
[root@wen-7 tmp]# ll -a skel/
总用量 24
drwxr-----   3 root root   87 7月  30 11:08 
.drwxrwxrwt. 19 root root 4096 7月  30 11:11 
..-rw-r-----   1 root root   18 7月  30 11:08 
.bash_logout-rw-r-----   1 root root  193 7月  30 11:08
bash_profile-rw-r-----   1 root root  231 7月  30 11:08
.bashrcdrwxr-----   4 root root   37 7月  30 11:08  
.mozilla-rw-r-----   1 root root  658 7月  30 11:08 .zshrc

 使用方法:

  (1)chmod [options] ..mode[,mode] file…

     MODE表示法:

       赋权表示法:直接操作一类用户的所有权限位rwx:

         u= g= o= a=   不同用户之间用逗号分隔

[root@wen-7 shlianxi]# chmod u=r,g=r,o=r 1.sh 
[root@wen-7 shlianxi]# chmod ugo=rwx 1.sh 
[root@wen-7 shlianxi]# chmod u=rwx 1.sh 
[root@wen-7 shlianxi]# ll 1.sh -rwxrwxrwx 1 root root 211 7月  30 09:56 1.sh

       授权表示法:直接操作一类用户的所有权限位rwx:

          u+,u-   不同用户之间用逗号分隔

         g+,g

         o+,o-

         a+,a-

[root@wen-7 shlianxi]# chmod u+x,g+w,o+w 1.sh 
[root@wen-7 shlianxi]# chmod ugo-x 1.sh 
[root@wen-7 shlianxi]# chmod u+x 1.sh 
[root@wen-7 shlianxi]# ll 1.sh -rwxrw-rw- 1 root root 211 7月  30 09:56 1.sh

           

   (2) chmod [options]  OCTAL-MODE FILE….

       使用八进制权限表示方式  

[root@wen-7 shlianxi]# chmod 660 1.sh 
[root@wen-7 shlianxi]# ll 1.sh -rw-rw---- 1 root root 211 7月  30 09:56 1.sh

       必须三位数字全写,三位不全,默认从左边为空

[root@wen-7 shlianxi]# chmod 66 1.sh 
[root@wen-7 shlianxi]# ll 1.sh
----rw-rw- 1 root root 211 7月  30 09:56 1.sh
[root@wen-7 shlianxi]# chmod 6 1.sh 
[root@wen-7 shlianxi]# ll 1.sh
 -------rw- 1 root root 211 7月  30 09:56 1.sh

   (3) chmod [options]  [–reference=rfile]

       引用其他文件的权限赋权到指定文件

[root@wen-7 shlianxi]# chmod --reference=/etc/passwd 1.sh
[root@wen-7 shlianxi]# ll 1.sh 
-rw-r--r-- 1 root root 211 7月  30 09:56 1.sh
root@wen-7 shlianxi]# ll /etc/passwd
-rw-r--r-- 1 root root 3406 7月  29 21:20 /etc/passwd
[root@wen-7 shlianxi]# chmod --reference=./6.sh 1.sh
[root@wen-7 shlianxi]# ll 1.sh
 -rw-r--r-- 1 root root 211 7月  30 09:56 1.sh
[root@wen-7 shlianxi]# ll 6.sh
-rw-r--r-- 1 root root 176 7月  30 08:56 6.sh

    


从属关系管理命令:  

chown:  – 修改文件所有者和组别(仅管理员用户使)

  命令格式:

   chown [options] user [:group] file…

    chown [options] –reference=rfile file…

 选项: [-R]   递归修改 

 使用方式:

   指定属主: chown username file…

   指定属组: chown :groupname file…

   指定属主加属组: chown username: groupname file…     

[root@wen-7 tmp]# useradd docker
[root@wen-7 tmp]# chown -R docker skel/                #递归指定属主为docker
[root@wen-7 tmp]# ll -d skel/
drwxr----- 3 docker root 87 7月  30 11:08 skel/
[root@wen-7 tmp]# ll -a skel/
总用量 24
drwxr-----   3 docker root   87 7月  30 11:08 .
.drwxrwxrwt. 19 root   root 4096 7月  30 11:14 ..
-rw-r-----   1 docker root   18 7月  30 11:08 .bash_logou
-rw-r-----   1 docker root  193 7月  30 11:08 .bash_profile
-rw-r-----   1 docker root  231 7月  30 11:08 .bashrcdrwxr
-----   4 docker root   37 7月  30 11:08 .mozilla
-rw-r-----   1 docker root  658 7月  30 11:08 .zshrc
[root@wen-7 tmp]# chown -R  wen:gentoo skel/           #指定属主为wen 属组为gentoo
[root@wen-7 tmp]# ll -d skel/
drwxr----- 3 wen gentoo 87 7月  30 11:08 skel/
[root@wen-7 tmp]# ll -a skel/
总用量 24
drwxr-----   3 wen  gentoo   87 7月  30 11:08 
.drwxrwxrwt. 19 root root   4096 7月  30 11:15 ..
-rw-r-----   1 wen  gentoo   18 7月  30 11:08 .bash_logout
-rw-r-----   1 wen  gentoo  193 7月  30 11:08 .bash_profile
-rw-r-----   1 wen  gentoo  231 7月  30 11:08 .bashrc
drwxr-----   4 wen  gentoo   37 7月  30 11:08 .mozilla
-rw-r-----   1 wen  gentoo  658 7月  30 11:08 .zshrc

  参考其他文件的权限修改指定文件或目录       

[root@wen-7 tmp]# chown --reference=/etc/passwd /tmp/skel/
[root@wen-7 tmp]# ll -d skel/
drwxr----- 3 root root 87 7月  30 11:08 skel/
[root@wen-7 tmp]# ll -a skel/
总用量 24
drwxr-----   3 root root     87 7月  30 11:08 .
drwxrwxrwt. 19 root root   4096 7月  30 11:17 ..
-rw-r-----   1 wen  gentoo   18 7月  30 11:08 .bash_logout
-rw-r-----   1 wen  gentoo  193 7月  30 11:08 .bash_profile
-rw-r-----   1 wen  gentoo  231 7月  30 11:08 .bashrc
rwxr-----   4 wen  gentoo   37 7月  30 11:08 .mozilla
-rw-r-----   1 wen  gentoo  658 7月  30 11:08 .zshrc
[root@wen-7 tmp]# chown -R --reference=/etc/passwd /tmp/skel/
[root@wen-7 tmp]# ll -a skel/
总用量 24
drwxr-----   3 root root   87 7月  30 11:08 .
drwxrwxrwt. 19 root root 4096 7月  30 11:17 ..
-rw-r-----   1 root root   18 7月  30 11:08 .bash_logout
-rw-r-----   1 root root  193 7月  30 11:08 .bash_profile
-rw-r-----   1 root root  231 7月  30 11:08 .bashrc
drwxr-----   4 root root   37 7月  30 11:08 .mozilla
-rw-r-----   1 root root  658 7月  30 11:08 .zshrc



chgrp: 改变文件的组所有权 (仅管理员用户使用)

  命令格式:

   chgrp [options] user [:group] file…

   chgrp [options] –reference=rfile file…

  选项:

    -R :递归使用

[root@wen-7 ~]# chgrp gentoo file1 
[root@wen-7 ~]# ll file1 
-rw-r--r-- 1 root gentoo 37 8月   1 10:47 file1

       思考:用户对目录有写权限,但对目录下的文件没有写权限,能否修改此文件内容?能否删除此文件?

  1. [root@wen-7 tmp]# mkdir mytest

  2. [root@wen-7 tmp]# cp /etc/fstab mytest/

  3. [root@wen-7 tmp]# ll mytest/

  4. 总用量 4

  5. -rw-r--r-- 1 root root 465 7  30 11:28 fstab

  6. [root@wen-7 tmp]# ll -d mytest/

  7. drwxr-xr-x 2 root root 18 7  30 11:28 mytest/

  8. [root@wen-7 tmp]# chgrp gentoo mytest/

  9. [root@wen-7 tmp]# ll -d mytest/

  10. drwxr-xr-x 2 root gentoo 18 7  30 11:28 mytest/

  11. [root@wen-7 tmp]# chmod g+w mytest/

  12. [root@wen-7 tmp]# ll -d mytest/

  13. drwxrwxr-x 2 root gentoo 18 7  30 11:28 mytest/

  14. [root@wen-7 mytest]# su - gentoo

  15. [gentoo@wen-7 ~]$ cd /tmp/mytest/

  16. [gentoo@wen-7 mytest]$ ll

  17. 总用量 4

  18. -rw-r--r-- 1 root root 16 7  30 11:31 fstab

  19. [gentoo@wen-7 mytest]$ echo sefsdf >> fstab

  20. -bash: fstab: 权限不够

  21. [gentoo@wen-7 mytest]$ rm  fstab

  22. rm:是否删除有写保护的普通文件 "fstab"y

  23. [gentoo@wen-7 mytest]$ ls[gentoo@wen-7 mytest]$


练习:

 1.当用户wangcai对/testdir目录无写权限时,该目录的只读文件file1是否可修改和删除

[root@wen-7 testdir]# chmod 754 /testdir/
[root@wen-7 testdir]# ll -d /testdir/
drwxr-xr-- 2 root root 15 8月   3 20:27 /testdir/
[root@wen-7 testdir]# su - wangcai -c  "echo "fsdf" >> /testdir/file1"
-bash: /testdir/file1: 权限不够
[root@wen-7 testdir]# su - wangcai -c  "rm /testdir/file1"
rm: 无法删除"/testdir/file1": 权限不够
[root@wen-7 testdir]#

 2.当用户wangcai对/testdir目录有写权限时,该目录的只读文件file1是否可修改和删除

[root@wen-7 testdir]# ll -d /testdir/
drwxrw-rwx 2 root root 15 8月   3 20:27 /testdir/
[root@wen-7 testdir]# su - wangcai -c  "echo "fsdf" >> /testdir/file1"
-bash: /testdir/file1: 权限不够
[root@wen-7 testdir]# su - wangcai -c  "rm /testdir/file1"
rm:是否删除有写保护的普通文件 "/testdir/file1"?y
[root@wen-7 testdir]# ll
总用量 0
-rw-rw-r--+ 1 root root 0 8月   3 16:58 f1

 3.复制/etc/fstab 到/var/tmp/,设置文件属主为wangcai读写权限,设置属组为sysadmins读写权限,其他人无权限  

[root@wen-7 .mozilla]# cp /etc/fstab /var/tmp/
[root@wen-7 tmp]# chown wangcai:sysadmins fstab
[root@wen-7 tmp]# chmod 660 fstab 
[root@wen-7 tmp]# ll
总用量 4
drwxr-xr-x. 2 abrt    abrt        6 7月  19 19:32 abrt
-rw-rw----  1 wangcai sysadmins 465 8月   3 14:57 fstab

  

 4.误删用户的家目录,恢复家目录,并权限一样

[root@wen-7 ~]# useradd wangca
[root@wen-7 ~]# ll /home/wangcai/
总用量 0
[root@wen-7 ~]# ll -d /home/wangcai/
drwx------ 3 wangcai wangcai 87 8月   3 14:09 /home/wangcai/
[root@wen-7 ~]# rm -rf /home/wangcai/
[root@wen-7 ~]# cp -r /etc/skel/. /home/wangcai
[root@wen-7 ~]# ll -d /home/wangcai/
drwxr-xr-x 3 root root 87 8月   3 14:10 /home/wangcai/
[root@wen-7 ~]# chmod 700 /home/wangcai/
[root@wen-7 ~]# chown wangcai:wangcai /home/wangcai/
[root@wen-7 ~]# ll -d /home/wangcai/
drwx------ 3 wangcai wangcai 87 8月   3 14:10 /home/wangcai/

umake:文件的权限反向掩码;遮罩码; 管理文件创建时的默认权限

 本质:从目录或文件上屏蔽掉最大权限相应的位,从而得出默认的权限

 计算公式:   

   文件: 

     666-umake=默认权限     (三位每位奇数加1,偶数保留)

      注意:之所以文件用666去减,表示文件默认不能拥有执行权限,如果减得的结果中有执行权限,则需要加1

   目录:

     777-umake=默认权限

 umask命令:

   使用方式:

     (1)umask 022 用八进制权限数  指定当期用户的umake值

     (2)umask u=rw,g=rw,o=r  用赋权表示法    指定当期用户的umake值

      (3)umake -S   显示新建文件夹的默认权限

     (4)imask -p 打印系统当前umask值,可方便输出重定向至配置文件

      (5)  umask:查看当前umask值

[root@wen-7 testdir]# umask
0022
[root@wen-7 testdir]# umask -S
u=rwx,g=rx,o=rx
[root@wen-7 testdir]# umask  022
[root@wen-7 testdir]# umask
0022
[root@wen-7 testdir]# umask u=rw,g=rw,o=r
[root@wen-7 testdir]# umask
0113
[root@wen-7 testdir]# touch qwe.sh
[root@wen-7 testdir]# ll
总用量 0
-rw-rw-r--+ 1 root root 0 8月   3 16:58 f1
-rw-rw-r--  1 root root 0 8月   3 20:39 qwe.sh

   umask 命令设置  仅对当前用户进程有效

   永久生效: 局部修改用户自己bash的配置文件,.bahsrc    #umask 002|022 ,谨慎修改全部bash配置文件

   root的umask值是022. root创建的文件权限越小,对用户的限制越大

[wen@wen-7 ~]$ umask0002
[wen@wen-7 ~]$ umask 027
[wen@wen-7 ~]$ touch fil1
[wen@wen-7 ~]$ ll fil1-rw-r----- 1 wen wen 0 7月  30 11:42 fil1
[wen@wen-7 ~]$ mkdir file
[wen@wen-7 ~]$ ll file
总用量 0
[wen@wen-7 ~]$ ll -d filed
rwxr-x--- 2 wen wen 6 7月  30 11:42 file

install命令:复制文件并设置属性

   命令格式:      

    单源复制: 

      install [options] -t 

    多源复制:

      install [options] [-s] [–strip] source dest

      install [options] [-s] [–strip] source… directory

     创建目录:   

      install [options] [-d] directory…

   选项:

     -m: 设定目标文件权限,默认为755

     -o:设定目标文件属主

     -g:设定目标文件属组

[root@wen-7 ~]# install -o gentoo -g gentoo -m 640 /etc/inittab /tmp/init
[root@wen-7 ~]# ll /tmp/init 
-rw-r----- 1 gentoo gentoo 511 7月  30 12:30 /tmp/init

     -d:创建目录                

[root@wen-7 ~]# install -d qwe
[root@wen-7 ~]# ls
ad  passwd.bak  qwe  shell  shlianxi

    

            

mktemp命令: 创建临时文件或目录

  命令格式:

    mktemp [options] template

root@wen-7 ~]# mktemp /tmp/mysq.XXXXX/
tmp/mysq.iQZDU
[root@wen-7 ~]# mktemp /tmp/mysq.XXXXX
/tmp/mysq.eXRRU
[root@wen-7 ~]# mktemp /tmp/mysq.XXXXX
/tmp/mysq.kZtAV
[root@wen-7 ~]# mktemp /tmp/mysq.XXXXXXXXXXX
/tmp/mysq.6zqQ5nLxlRR
[root@wen-7 ~]# mktemp /tmp/mysq.XXXXXXXXXXX
/tmp/mysq.ROygQ5RFLOa
[root@wen-7 ~]# mktemp /tmp/mysq.XXXXXXXXXXX
/tmp/mysq.8ST1lOItKUy
[root@wen-7 ~]# myfile=$(mktemp /tmp/ds.XXXXXX)
[root@wen-7 ~]# echo $myfile
/tmp/ds.8qKqpU

  选项:

    -d:创建目录

    -u:测试,但不创建文件

[root@wen-7 ~]# mktemp -d /tmp/mysq.XXXXX
/tmp/mysq.8aKkM
[root@wen-7 ~]# ls /tmp/
ds.8qKqpU  mysq.6zqQ5nLxlRR  mysq.8ST1lOItKUy  mysq.iQZDU  mysq.ROygQ5RFLOa  /tmp/mysq.8aKkM/

[root@wen-7 ~]# mktemp -u /tmp/mysq.XXXXX/
tmp/mysq.3fgo1
[root@wen-7 ~]# ls 
/tmp/ds.8qKqpU  mysq.6zqQ5nLxlRR  mysq.8ST1lOItKUy  mysq.iQZDU  mysq.ROygQ5RFLOa  mytestinit

注意,mktemp会将创建的临时文件名直接返回,因此,可直接通过命令引用保存起来.






特殊权限: SUID,SGID,STICKY


在系统中,上面提到的三个权限,我们称之为普通权限.在普通权限外,还有一些特殊的权限,提供各样的功能,下面进行详解.

 先看下特殊权限与普通先的对比

[root@wen-7 ~]# ls -l /bin/passwd                            #特殊权限
rwsr-xr-x. 1 root root 27832 6月  10 2014 /bin/passwd
[root@wen-7 ~]# ll -d /tmp                                    #普通权限
rwxrwxrwt. 12 root root 4096 7月  30 12:45 /tmp

在这里我们有提到了安全上下文,可见这是特别重要的.必须了解权限的运行机制.

 安全上下文:

    1.进程以某用户的身份运行,进程是发起此进程用户的代理,因此以此用户的身份和权限完成所有操作

    2.权限匹配模型:

     (1)判断进程的属主,是否为被访问的属主,如果是,则应用属主的权限,否则进去第2步.

     (2)判断进程的属主,是否属于被访问的文件属组;如果是,则应用属性的权限;否则进去第3步

     (3)应用other的权限

 

 

第一种特殊权限: SUID

   系统默认情况下,用户发起的进程,进程的属主是其发起者,因此,进程是以其发起者的身份在运行

[wen@wen-7 ~]$ whoami
wen
[wen@wen-7 ~]$ cat /etc/issue
#\S
#Kernel \r on an \m
#$hostname
#date
[wen@wen-7 ~]$ ps aux | grep cat
wen       12757  0.0  0.0 112660   960 pts/1    R+   20:52   0:00 grep --color=auto cat    
      #cat 进程是wen 这个用户在运行

  

  SUID 功用: 用户运行某程序时,如果此程序拥有SUID权限,那些二进制程序运行为进程时,其属主不是发起者,而是程序文件自己的属主(让普通用户运行部分root权限)

    管理SUID权限:

            chmod u+|u-s FIle..

            展示位置:属主的执行权限位,如果属主原本有执行权限,显示为小写s;否则,显示为大写S

[root@wen-7 ~]# cp /usr/bin/cat /tmp 
[root@wen-7 ~]# ll /tmp/cat 
-rwxr-xr-x 1 root root 54048 8月   3 21:37 /tmp/cat
[root@wen-7 ~]# chmod u+s /tmp/cat 
[root@wen-7 ~]# su - wen
上一次登录:三 8月  3 20:57:07 CST 2016pts/1 上
[wen@wen-7 ~]$ /tmp/cat /etc/shadow
root:$6$aetYyxyt$7KPPYdtBGaFY2yRne/aL8ECDEl9zLNW7jQsp3p1MAlHhZH7o1fI.ah1R2EcnzgZNXpgVylXR8joNLQZ0Qtha/.:17009:0:99999:7:::
bin:*:16659:0:99999:7:::

第二种权限:SGID:   

  展示位置:属组的执行权限位,如果属组原本有执行权限,显示为小写s;否则,显示为大写S

  功用:当某目录属组有写权限,且有SGID权限时,那么所有属于此目录的属组的用户,且以属组身份再此目录中新建文件或目录时,新文件的属组不是用户的基本组,而是此目录是属组;

 通常用于创建一个写作目录

  管理文件的SGID权限:

     chmod g+|-s FILE… 

[root@wen-7 testdir]# ll -d /testdir/
drwxr-xr-- 2 root root 28 8月   3 20:39 /testdir/
[root@wen-7 testdir]# chgrp sysadmins /testdir/
[root@wen-7 testdir]# chmod 774 /testdir/
[root@wen-7 testdir]# ll -d /testdir/
drwxrwxr-- 2 root sysadmins 28 8月   3 20:39 /testdir/

[root@wen-7 testdir]# gpasswd  -a wangcai sysadmins
正在将用户“wangcai”加入到“sysadmins”组中
[root@wen-7 testdir]# gpasswd  -a wen  sysadmins
正在将用户“wen”加入到“sysadmins”组中
[root@wen-7 testdir]# groupmems -l  -g sysadmins
wangcai  wen 

wangcai@wen-7 testdir]$ touch wang.sh
[wangcai@wen-7 testdir]$ ll
-rw-rw-r--  1 wangcai wangcai 0 8月   3 21:45 wang.sh
[wangcai@wen-7 testdir]$ su - wen
[wen@wen-7 ~]$ cd /testdir/
[wen@wen-7 testdir]$ touch wen.sh
[wen@wen-7 testdir]$ ll
-rw-rw-r--  1 wangcai wangcai 0 8月   3 21:45 wang.sh
-rw-rw-r--  1 wen     wen     0 8月   3 21:46 wen.sh

[root@wen-7 testdir]# !chm
chmod g+s /testdir/
[root@wen-7 testdir]# ll -d /testdir/
drwxrwsr-- 2 root sysadmins 67 8月   3 21:47 /testdir/

[wen@wen-7 testdir]$ touch qwewq
[wen@wen-7 testdir]$ ll
总用量 0
-rw-rw-r--+ 1 root    root      0 8月   3 16:58 f1
-rw-rw-r--  1 root    root      0 8月   3 20:39 qwe.sh
-rw-rw-r--  1 wen     sysadmins 0 8月   3 21:47 qwewq
-rw-rw-r--  1 wangcai wangcai   0 8月   3 21:45 wang.sh
-rw-rw-r--  1 wen     wen       0 8月   3 21:47 wen.sh
[wangcai@wen-7 testdir]$ touch wang2
[wangcai@wen-7 testdir]$ ll
总用量 0
-rw-rw-r--  1 wen     wen       0 8月   3 21:47 wen.sh
-rw-rw-r--  1 wen     sysadmins 0 8月   3 21:47 qwewq
-rw-rw-r--  1 wangcai sysadmins 0 8月   3 21:53 wang2
-rw-rw-r--  1 wangcai wangcai   0 8月   3 21:45 wang.sh


第三个特殊权限:Stlcky

  功用:对于属组或全局可写的目录,组内所有用户或系统上的所有用户对在此目录中都能创建新文件或删除所有的已有文件;如果为此类目录设置Sticky权限,则每个用户都能创建新文件,且只能删除自已的文件

 在目录设置Sticky位,只有文件的所有者或root可以删除该文件

 sticky设置在文件上无意义

  管理文件的Sticky权限:

    chmod o+|-t FILE…

  展示位置:其他用户的执行权限位,如果属组原本有执行权限,显示为小写t;否则,显示为大写T

  系统上的/tmp和/bar/tmp目录默认均有Sticky权限

wangcai@wen-7 testdir]$ rm qwewq 
[wangcai@wen-7 testdir]$ ll
-rw-rw-r--  1 wangcai sysadmins 0 8月   3 21:53 wang2
-rw-rw-r--  1 wangcai wangcai   0 8月   3 21:45 wang.sh
-rw-rw-r--  1 wen     wen       0 8月   3 21:47 wen.sh

[root@wen-7 testdir]# chmod o+t /testdir/
[root@wen-7 testdir]# ll -d /testdir/
drwxrwsr-T 2 root sysadmins 67 8月   3 21:54 /testdir/

[wangcai@wen-7 testdir]$ rm qwewq 
[wangcai@wen-7 testdir]$ ll
总用量 0
-rw-rw-r--+ 1 root    root      0 8月   3 16:58 f1
-rw-rw-r--  1 root    root      0 8月   3 20:39 qwe.sh
-rw-rw-r--  1 wangcai sysadmins 0 8月   3 21:53 wang2
-rw-rw-r--  1 wangcai wangcai   0 8月   3 21:45 wang.sh
-rw-rw-r--  1 wen     wen       0 8月   3 21:47 wen.sh
[wangcai@wen-7 testdir]$ rm wen.sh 
rm:是否删除有写保护的普通空文件 "wen.sh"?y
rm: 无法删除"wen.sh": 不允许的操作

管理特殊权限的另一种方式:

 采用八进制标识方法:

SUID SGID STICKY 八进制表示
0 0 0 0
0 0 1 1
0 1 0 2
0 1 1 3
1 0 0 4
1 0 1 5
1 1 0 6
1 1 1 7

基于八进制方式赋权时,可于默认的三位八进制数字左侧在加一位八进制数字

        例: chmod 1777

[root@wen-7 testdir]# ll -d /testdir/
d--------- 2 root sysadmins 67 8月   3 21:54 /testdir/
[root@wen-7 testdir]# chmod 1777 /testdir/
[root@wen-7 testdir]# ll -d /testdir/
drwxrwxrwt 2 root sysadmins 67 8月   3 21:54 /testdir/


第四种特殊权限:隐藏特殊权限

lsattr:查看文件被添加的特殊权限  

[root@wen-7 testdir]# lsattr 
---------------- ./f1
---------------- ./qwe.sh
---------------- ./wang.sh
---------------- ./wen.sh
---------------- ./wang2

chattr:   增加特殊权限,  功用是为了避免让你的文件误操作,

         +A:锁定时间戳

        +i:不能删除,更改,改名

         +a : 只能修改   

[root@wen-7 testdir]# chattr +i /testdir/qwe.sh 
[root@wen-7 testdir]# lsattr 
---------------- ./f1
----i----------- ./qwe.sh
---------------- ./wang.sh
---------------- ./wen.sh
---------------- ./wang2
[root@wen-7 testdir]# rm qwe.sh 
rm:是否删除普通空文件 "qwe.sh"?y
rm: 无法删除"qwe.sh": 不允许的操作

[root@wen-7 testdir]# chattr +A /testdir/wen.sh 
[root@wen-7 testdir]# lsattr 
---------------- ./f1
----i----------- ./qwe.sh
---------------- ./wang.sh
-------A-------- ./wen.sh
---------------- ./wang2
[root@wen-7 testdir]# touch -a 1607022213.05  wen.sh 
[root@wen-7 testdir]# stat wen.sh 
  文件:"wen.sh"
  大小:0         	块:0          IO 块:4096   普通空文件
设备:fd00h/64768d	Inode:9969        硬链接:1
权限:(0664/-rw-rw-r--)  Uid:( 1000/     wen)   Gid:( 1000/     wen)
最近访问:2016-08-03 22:16:00.569677511 +0800
最近更改:2016-08-03 21:47:15.398196128 +0800
最近改动:2016-08-03 22:16:00.569677511 +0800
创建时间:-


[root@wen-7 testdir]# lsattr 
-----a---------- ./f1
----i----------- ./qwe.sh
---------------- ./wang.sh
-------A-------- ./wen.sh
---------------- ./wang2
---------------- ./1608032213.05
---------------- ./1608022213.05
---------------- ./1607022213.05
---------------- ./非
[root@wen-7 testdir]# echo "fdsf" >> f1
[root@wen-7 testdir]# cat f1 
fdsf
[root@wen-7 testdir]# rm f1 
rm:是否删除普通文件 "f1"?y
rm: 无法删除"f1": 不允许的操作

    

    

第五种特殊权限: acl访问控制列表 

ACL:Access Control List 实现灵活的权限管理

facl: file access control llsts 访问控制列表

针对特定文件系统, vfat文件系统不支持(没有权限机制)

除了文件的所有者,所属组和其他人,可以对更多的用户设置权限

CentOS7.0默认创建的xfs和ext4文件系统有ACL功能。
CentOS7.X之前版本,默认手工创建的ext4文件系统无ACL功能。需手动增加:
tune2fs –o acl /dev/sdb1
mount –o acl /dev/sdb1 /mnt
ACL生效顺序:所有者,自定义用户,自定义组,
其他人


文件的额外赋权机制

 在原来的u,g,o之外,另一层让普通用户能控制赋权给另外用户或组的赋权机制;

  

使用方法:

 显示访问控制列表:

   getfacl  FILE…

    user:USERNAME:MODE

    group:GROUPNAME:MODE

[root@wen-7 testdir]# getfacl f1
# file: f1
# owner: root
# group: root
user::rw-
user:wen:rwx			#effective:rw-
group::r--
group:sysadmins:rwx		#effective:rw-
mask::rw-
other::r--

管理访问控制列表:

  setfacl命令: 赋权

   授权给目录:

    setfacl -m d:u:USERNAME:MODE FILE…   对以后在目录下的新建的文件有跟目录设置的defaul默认权限有相同的acl权限(默认文件ACL权限)

[root@wen-7 testdir]# setfacl -m d:u:wen:rw wen
[root@wen-7 testdir]# getfacl wen
# file: wen
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rw-
default:user:wen:rw-
default:group::r-x
default:mask::rwx
default:other::r-x

[root@wen-7 testdir]# getfacl wen/f1
# file: wen/f1
# owner: root
# group: root
user::rw-
group::r--
other::r--

[root@wen-7 testdir]# touch wen/f2 ;getfacl wen/f2
# file: wen/f2
# owner: root
# group: root
user::rw-
user:wen:rw-
group::r-x			#effective:r--
mask::rw-
other::r--

   赋权给用户:

     setfacl -m u:USERNAME:MODE FILE…

   赋权给组

     setfacl -m g:GROUPNAME:MODE FILE…

[root@wen-7 ~]# setfacl -m d:u:wangcai:rx /testdir            #授权用户对该目录读执行权限
[root@wen-7 ~]# getfacl /testdir/
getfacl: Removing leading '/' from absolute path names
# file: testdir/
# owner: root
# group: sysadmins
# flags: --t
user::rwx
group::rwx
other::rwx
default:user::rwx
default:user:wangcai:r-x
default:group::rwx
default:mask::rwx
default:other::rwx
[root@wen-7 testdir]# setfacl -m u:wen:rw wang.sh               #授权用户对该文件读写
[root@wen-7 testdir]# setfacl -m g:sysadmins:rw wang.sh         #授权组队该文件读写
[root@wen-7 testdir]# getfacl wang.sh
# file: wang.sh
# owner: wangcai
# group: wangcai
user::rw-
user:wen:rw-                       #显示wen用户的权限
group::rw-
group:sysadmins:rw-               #显示组sysadmins的权限
mask::rw-
other::r--

   批量授权:

[root@wen-7 testdir]# cat acl.sh 
u:rooter:rw
u:wangcai:rwx
g:gentoo:rw
g:user3:rx
[root@wen-7 testdir]# setfacl -M acl.sh wen.sh 
[root@wen-7 testdir]# getfacl wen.sh 
# file: wen.sh
# owner: wen
# group: wen
user::rw-
user:root:rw-
user:wangcai:rwx
group::rw-
group:gentoo:rw-
group:user3:r-x
mask::rwx
other::r--

     递归授权:

         setfacl -Rm g:sales:rwX directory

    

   撤销赋权:

    setfacl -x u:USERNAME FILE…

    setfacl -x g:GROUPNAME FILE…

[root@wen-7 testdir]# getfacl wen.sh 
# file: wen.sh
# owner: wen
# group: wen
user::rw-
user:root:rw-
user:wangcai:rwx
group::rw-
group:gentoo:rw-
group:user3:r-x
mask::rwx
other::r--
[root@wen-7 testdir]# setfacl -x u:wangcai  wen.sh 
[root@wen-7 testdir]# setfacl -x g:gentoo   wen.sh 
[root@wen-7 testdir]# getfacl wen.sh 
# file: wen.sh
# owner: wen
# group: wen
user::rw-
user:root:rw-
group::rw-
group:user3:r-x
mask::rwx
other::r--

   批量撤销授权:

[root@wen-7 testdir]# setfacl -X acl.sh   wen.sh 
[root@wen-7 testdir]# getfacl wen.sh 
# file: wen.sh
# owner: wen
# group: wen
user::rw-
group::rw-
mask::rw-
other::r--

[root@wen-7 testdir]# cat acl.sh 
u:rooter
u:wangcai
g:gentoo
g:user3

  清空facl全部信息

     setfacl -b FIle….

[root@wen-7 testdir]# setfacl -b qwe.sh 
[root@wen-7 testdir]# getfacl qwe.sh 
# file: qwe.sh
# owner: root
# group: root
user::rw-
group::rw-
other::r--

   make权限设置:

    当设置acl权限后,原属组的权限位更改为mask的权限位,除了所有者和other的权限,其他的权限(组,添加的其他用户)都不能高过mask的权限,mask的权限是高压线 高过mask的权限会自动屏蔽. #effective:rw- 表示屏蔽后的实际可执行权限.        

  设置mask权限:   setfacl -m m::rw filename  

[root@wen-7 testdir]# cat acl.sh 
u:rooter:rw
u:wangcai:rwx
g:gentoo:rwx
g:user3:rwx
[root@wen-7 testdir]# setfacl -M acl.sh wang2
[root@wen-7 testdir]# getfacl wang2
# file: wang2
# owner: wangcai
# group: sysadmins
user::rw-
user:root:rw-
user:wangcai:rwx
group::rw-
group:gentoo:rwx
group:user3:rwx
mask::rwx
other::r--
[root@wen-7 testdir]# setfacl -m m:rw wang2
[root@wen-7 testdir]# getfacl wang2
# file: wang2
# owner: wangcai
# group: sysadmins
user::rw-
user:root:rw-
user:wangcai:rwx		#effective:rw-
group::rw-
group:gentoo:rwx		#effective:rw-
group:user3:rwx			#effective:rw-
mask::rw-
other::r--

   acl注意事项:

    (1)ACL文件上的group权限是mask 值(自定义用户,自定义组,拥有组的最大权限) ,而非传统的组权限
    (2) getfacl 可看到特殊权限: flags
    (3)默认ACL权限给了x,文件也不会继承x权限。
    (4)base ACL 不能删除
    (5)setfacl -k dir 删除默认ACL权限
    (6)setfacl -b file1清除所有ACL权限

    (7) getfacl file1 | setfacl –set-file=- file2 复制file1acl权限给f

备份和恢复ACL

  主要的文件操作命令cp和mv都支持acl,只是cp命令需要加上-p参数.但是tar等常见的备份工具是不会保留目录文文件的ACL信息,需要我们手动备份ACL,备份后,也可以手动恢复.

  #getfacl -R /tmp/dir > acl.txt

  #setfacl -R -b /tmp/dir1

  #setfacl -R –set-file=acl.txt /tmpdir1

  #getfacl -R /tmp/dir1

[root@wen-7 testdir]# getfacl -R wang2  >  acl.txt
[root@wen-7 testdir]# cat acl.txt 
# file: wang2
# owner: wangcai
# group: sysadmins
user::rw-
user:root:rw-
user:wangcai:rwx	#effective:rw-
group::rw-
group:gentoo:rwx	#effective:rw-
group:user3:rwx	#effective:rw-
mask::rw-
other::r--

[root@wen-7 testdir]# setfacl -R -b wang2
[root@wen-7 testdir]# ll
总用量 28
-rw-r--r--  1 root    root       51 8月   3 22:39 acl.sh
-rw-r--r--  1 root    root      202 8月   4 10:50 acl.txt
-rw-rw-r--+ 1 root    root        5 8月   3 22:17 f1
-rw-rw-r--  1 root    root        0 8月   3 20:39 qwe.sh
-rw-rw-r--  1 wangcai sysadmins   0 8月   3 21:53 wang2
-rw-rwxr--+ 1 wangcai wangcai     9 8月   3 23:02 wang.sh
-rw-rw-r--+ 1 wen     wen         0 8月   3 21:47 wen.sh
-rw-rw-rw-+ 1 root    root        0 8月   4 09:24 zxc.sh
-rw-r--r--  1 root    root        5 8月   3 22:17 非
[root@wen-7 testdir]# getfacl wang2
# file: wang2
# owner: wangcai
# group: sysadmins
user::rw-
group::rw-
other::r--

[root@wen-7 testdir]# setfacl -R --set-file=acl.txt wang2
[root@wen-7 testdir]# getfacl wang2
# file: wang2
# owner: wangcai
# group: sysadmins
user::rw-
user:root:rw-
user:wangcai:rwx		#effective:rw-
group::rw-
group:gentoo:rwx		#effective:rw-
group:user3:rwx			#effective:rw-
mask::rw-
other::r--


原创文章,作者:wencx,如若转载,请注明出处:http://www.178linux.com/28187

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-07 22:39

    文章整体思路清晰,从普通权限到特殊权限都有了完整的总结与对应的模拟实现,后面排版如果能认真点就更好了。