Linux普通权限及特殊权限讲解

1.文件权限

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

                                       owner:属主,u

                                       group:属组,g

                                       other:其他,o

每个文件针对每个类定义了三种权限:

                                       readable: r

                                       writable: w

                                       excutable:x

三种文件权限:

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

                                       w: 可修改其内容

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

三种目录权限: 

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

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

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

                                       X:只给目录x权限,不给文件x权限

2.目录权限:

      [root@iZ11yrfw9g3Z ~]# ll -d luyubo

     drwxr-xr-x 2 root root 4096 Aug  4 13:48 luyubo

                                       d表示文件类型

                                       rwxr-xr-x 每三个一组

                                       rwx表示所属用户权限

                                       r-x表示所属组的权限

                                       r-x表示其他用户权限

                                       2表示引用连接数

                                       root表示所属用户

                                       root表示所属组

                                       4096表示文件大小

                                       Aug  4 13:48表示时间

                                       luyubo表示目录

3.chmod命令:

    用法:chmod [选项]… 模式[,模式]… 文件…

   或:chmod [选项]… 八进制模式 文件…

   或:chmod [选项]… –reference=参考文件 文件…

    修改一类用户的所有权限: u=  g= o= ug=  a= u=,g= 

    修改一类用户某位或某些位权限 u+  u- g+ g- o+ o- a+ a- + 

 将每个文件的模式更改为指定值。

                                       -c, –changes类似 –verbose,但只在有更改时才显示结果

                                       –no-preserve-root不特殊对待根目录(默认)

                                       –preserve-root禁止对根目录进行递归操作

                                       -f, –silent, –quiet去除大部份的错误信息

                                       -v, –verbose为处理的所有文件显示诊断信息

                                       –reference=参考文件使用指定参考文件的模式,而非自行指定权限模式

                                       -R, –recursive以递归方式更改所有的文件及子目录

                                       –help          显示此帮助信息并退出

                                       –version显示版本信息并退出

                                  chown 设置文件的所有者 

                                [root@localhost ~]# chown luyubo luyubo

4.chgrp命令使用方法

用法:chgrp [选项]… 用户组 文件…

 或:chgrp [选项]… –reference=参考文件 文件…

将每个指定文件的所属组设置为指定值。

                                       如果使用 –reference            则将每个文件的所属组设置为与指定参考文件相同。

                                       -c, –changes类似 –verbose,但只在有更改时才显示结果

                                           –dereference影响符号链接所指示的对象,而非符号链接本身(默认值)

                                       -h, –no-dereference会影响符号链接本身,而非符号链接所指示的目的地

                                         (当系统支持更改符号链接的所有者时,此选项才有用)

                                           –no-preserve-root         不特殊对待"/"(默认值)

                                           –preserve-root不允许在"/"上递归操作

                                       -f, –silent, –quiet去除大部份错误信息

                                           –reference=RFILE使用参考文件的所属组,而非指定值

                                       -R, –recursive         递归处理所有的文件及子目录

                                       -v, –verbose          为处理的所有文件显示诊断信息

chgrp 设置文件的属组信息

[root@localhost ~]# chgrp luyubo luyubo

5.默认权限介绍

                                       umask值 可以用来保留在创建文件权限 

                                       新建FILE权限: 666-umask 如果所得结果某位存在执行(奇数)权限,则将其权限+1

                                       新建DIR权限: 777-umask

                                       非特权用户umask是 002   权限是:775

                                       root的umask 是 022      权限是:755

                                       因为root权限太大,风险是很大的,所以默认权限是低于普通用户的

                                       umask: 查看当前mask值  #执行结果是:022

                                       umask #: 例如 umask 023   权限是754

                                       umask –S 模式方式显示  #大s以字母方式显示

                                       umask –p 输出可被调用  #执行结果是:umask 022

                                       全局设置: /etc/bashrc 用户设置:~/.bashrc

6.Linux文件系统上的特殊权限

   1.SUID,SGID,Sticky 

    三种常用权限:r, w, x    user, group, other

       安全上下文

    前提:进程有属主和属组;文件有属主和属组

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

   (2) 启动为进程之后,其进程的属主为发起者;进程的属组为 发起者所属的组

   (3) 进程访问文件时的权限,取决于进程的发起者

   (a) 进程的发起者,同文件的属主:则应用文件属主权限 

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

   (c) 应用文件“其它”权限

    2.SUID:

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

2.启动为进程之后,其进程的属主为原程序文件的属主 

3.SUID只对二进制可执行程序有效 

4.SUID设置在目录上无意义

权限设定: chmod u+s FILE… chmod u-s FILE…

例如:设置二进制程序echo的属主权限

       [root@localhost ~]# chmod u+s /bin/echo

   3.SGID:

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

       2.启动为进程之后,其进程的属主为原程序文件的属组

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

        例如:设置二进制程序echo的属组权限

       [root@localhost ~]# chmod g+s /bin/echo

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

   4.目录SGID:

       1.默认情况下,用户创建文件时,其属组为此用户所属的主组 

       2.一旦某目录被设定了SGID,则对此目录有写权限的用户在此 目录中创建的文件所属的组为此目录的属组

       3.通常用于创建一个协作目录

       4.权限设定: chmod g+s DIR… chmod g-s DIR…

       例如:设置/data/testdir/目录内所有新建文件为g1组。  

      [root@localhost data]# chgrp g1 testdir/
      [root@localhost data]# chmod g+s testdir/

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

   5.Sticky位:

       1.具有写权限的目录通常用户可以删除该目录中的任何 文件,无论该文件的权限或拥有权

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

       3.sticky设置在文件上无意义 

       4.权限设定: chmod o+t DIR… chmod o-t DIR…

       5.例如:我们bo目录加上t权限:

    [root@localhost home]# chmod o+t bo/
    [root@localhost home]# ll -d bo/
    drwxrwxrwt 2 root root 4096 8月   4 20:58 bo/

     切换用户至tom尝试删除目前内的文件是没有权限,但是我们的权限是777,这就是sticky的作用

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

7.文件特定属性

      1.chattr +i 不能删除,改名,更改

      2.chattr +a 只能增加 

      3.lsattr 显示特定属性

8.访问控制列表acl

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

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

     3.CentOS7.0默认创建的xfs和ext4文件系统有ACL功能。

     4.CentOS7.X之前版本,默认手工创建的ext4文件系统无ACL功能。需手动增加:tune2fs –o acl /dev/sdb1 mount –o acl /dev/sdb1  /mnt

     5.ACL生效顺序:属主,自定义FACL属主,属组,自定义FACL属组,其他人

     6.ACL命令:

            getfacl 查看acl

            setfacl -x删除权限

            setfacl -b彻底清空文件上面的acl

            setfacl -d设置默认acl权限,新建文件生效

            setfacl -k删除设置默认acl权限

            setfacl -m u:::rw file设置所有者权限

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

            设置mask,只影响除所有者和other,其他权限不能比mask高,或者相等 

            设置acl之后  所属组权限就不是组权限了,就是mask权限了 

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

     8.getfacl 可看到特殊权限:flags 

     9.默认ACL权限给了x,文件也不会继承x权限。 ?base ACL 不能删除

     10.setfacl -k  dir 删除默认ACL权限 

     11.setfacl -b file1清除所有ACL权限 

     12. mask只影响除所有者和other的之外的人和组的最大权限 Mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限 (Effective  Permission) 用户或组的设置必须存在于m  ask权限设定范围内才会生效。 setfacl -m mask::rx file

     13. –set选项会把原有的ACL项都删除,用新的替代,需要注意的 是一定要包含UGO的设置,不能象-m一样只是添加ACL就可以. 

       例如:

            [root@localhost home]# setfacl --set u::rw,u:tom:rw,g::r,o::- bo/

9.备份和恢复ACL 

      1.主要的文件操作命令cp和mv都支持ACL,只是cp命令需要 加上-p参数。但是tar等常见的备份工具是不会保留目录 和文件的ACL信息

       [root@localhost data]# getfacl -R testdir/ > acl.txt
       [root@localhost data]# setfacl -R -b testdir/
       [root@localhost data]# setfacl -R --set-file=acl.txt testdir/
       [root@localhost data]# getfacl -R testdir/

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

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-07 23:36

    可以尝试着写清楚特殊权限的实际应用场景,这才是我们学习特殊权限的意义所在。