权限管理

权限管理包括普通权限、特殊权限、默认权限、ACL权限。

这些权限都是针对u(owner)、g(group)、o(other)三类定义的。

设置权限时文件和目录不同(此处把文件和目录分开,一般说文件就包含目录(linux思想:一切皆文件))如下图所示,

分别用两个用户分别创建了一个目录一个文件,可以看到同是目录的liutest和test的权限不同,它俩同为目录为啥子权限不一样呢,然后又看了一下两个文件,发现权限也不同,那这是为啥呢?!

权限管理

别急,小编君这就为你解答:

一:默认权限

    这是因为有一个叫umask值的东西存在,因此超级管理员root和普通用户在创建文件和目录时有了默认权限,那啥又是默认权限呢,

默认权限就是在最大权限减去umask值后得到的,那啥又是最大权限呢,最大权限是多少呢?!   目录的默认最大权限为777,文件默认最大权限是666,即

                                    目录  文件

最大权限                      777   666

umask(普通用户)     002  002

默认权限                       775   664

umask(root)                   022   022

默认权限                       755   644

如图所示,普通用户umask默认为0002,root默认0022(这里只看后三位,说的时候就是root的umask值为022,普通用户的umask值为002,第一位是特殊权限位,一会儿会详细单独说的),而目录的最大权限是777,文件的最大权限666,所以在创件文件和目录时,先用最大权限减去umask之后,就是其默认权限。

权限管理权限管理

例:

777 rwxrwxrwx     666 rw-rw-rw-

021 —-w—x         021—-w—x

756 rwxr-xrw-       646rw-r–rw-

总结一个规律:当umask值全部是偶数时,可以直接减,当umask值包含奇数时,对于目录直接减,对于文件,减完后再加一。如下图所示dir1的权限是756(777-021),而文件file的权限值为656(666-021+1)

权限管理

设置umask值:umask #(例:umask 004)

    这种设定只在当时生效,要想长期生效,需要在/etc/bashrc(所有用户可以看到)、~/.bashrc (仅用户自己可以看)这两个配置文件里,手动修改。

这里注意区分一下拷贝文件和新建文件时文件的权限区别:

cp拷贝文件时,基于源文件的权限减去umask值;

创建文件时,基于最大权限减去umask值。

 

二:普通权限:

 

前面一直说权限,那接下来就来看一下,每一位具体的意思吧:

 

r: 文件:可查看(读取)文件内容

   目录:可以用ls查看此目录下的文件列表(不能查看详细信息)

w: 文件:可以修改文件内容

    目录:单独使用没意义,与x结合使用时,可在此目录下创建、删除文件

x:文件:可以执行

    目录:可以进去此目录,与r结合使用,可以查看此目录下文件的详细信息(ls -l)

 

X:当文件本身没有x权限时,则跳过,一般用于批量修改多个文件、目录的权限时,自动跳过没有执行权限的文件。(一般只给目录,不给文件。)

 

权限分两种方式:

1.字符:

   chmod u/g/o+r/w/x file

   chmod a=rwx file(a=ugo)

2.数字:

   0:—

   1:–x

   2:-w-

   3:-wx

   4:r–

   5:r-x

   6:rw-

   7:rwx

组合:rwxr-xr–    754

chmod用于修改权限,此功能只有root和所属人有权限

例:chmod754  file

 权限管理

chmod –reference file1 file2复制file1的权限给file2

 权限管理

(chown –reference file1 file2复制file1的所属人和所属组给file2)

 权限管理

(chgrp –reference file1 file2复制file1的所属组给file2)

 权限管理

有的人会有疑问,权限位是四位,怎么一直说三位啊,第一位是啥?

 

三:特殊权限位

 

第一位呢,是特殊权限位,由suid、sgid、sticky组成,下面有个总结,就是有点长,但是比较完整,其实重点是最后一句。

suid

    当对一个可执行的二进制文件作用了SUID权限之后,任何拥有执行该文件权限的人,在执行的过程时都临时拥有该文件所属人的权限。

sgid

    当对一个可执行的二进制文件作用了SGID权限之后,任何拥有执行该文件权限的人,在执行的过程时都临时拥有该文件所属组的权限

     当对一个目录作用了SGID权限之后,任何对该目录有wx权限的用户在该目录下创建的文件及目录的所属组均为该目录的所有组。

sticky

    当对一个目录作用了sticky之后(只限制组用户,目录的owner不受影响),该目录下的文件仅其所属人才能删除。

一些常用命令:

用字符:

    chmod u+s file   权限值为4***,即只有suid

    chmod g+s file   权限值为2***,即只有sgid

    chmod o+t file    权限值为1***,即只有sticky

也可以用数字:

    chmod  3*** file   既有sticky又有sgid

    chmod  5*** file   既有sticky又有suid

    chmod  6*** file   既有suid又有sgid

    chmod  7*** file   都有,all

若文件本身带有x权限时,为s、t,反之,则是S、T

如下图所示:

权限管理

四:ACL权限

ACL(Access Control List)访问控制列表

CentOS7当中,无论是操作系统安装时还是之后手工创建的文件系统(xfs、ext4)均会开启ACL功能。

CentOS6及之前的版本,仅操作系统安装时创建的文件系统才会默认开启ACL,手工创建的文件系统,需要手工开启ACL功能。

1.mount -o acl /dev/sda7  取消的方式,重新挂载时不指定即可

2.mount -o remount,acl /dev/sda7

   以上两种方式开启的ACL可以通过 mount |grep sdaX 查看

3.tune2fs -o acl /dev/sda7 取消的方式 tune2fs-o ^acl /dev/sda7

   使用以上方式开启的ACL可以通过

tune2fs-l /dev/sda7 |grep option查看

以上很少用到,这里就不做演示了。

ACL权限判断的顺序

   先判断是否是文件的OWNER,如果是,则执行OWNER的权限后结束,如果不是OWNER,则判断是否是ACL的USER,如果是则执行USER权限后结束,如果不是ACL的USER, 则判断是否属于GROUP或ACL GROUP,如果是,则取最大权限。如果不属于任何GROUP,则执行OTHER。

   即:所有人->所有组->其他人

ACL的设置:(设置权限后,ll查看到权限位的末尾有+号,代表已经设置了ACL权限,这时再想查看权限就用getfacl file查看,当然ll也还能用,只是看不到ACL的权限而已)

   setfacl-m u/g:user/group:r/w/x file

首先创建目录

权限管理

然后设置ACL权限,并观察其权限处的变化

权限管理

然后:通过getfaclfile查看ACL:

权限管理

设置默认的ACL:

   setfacl-m d:u/g:user/group:r/w/x file

(仅影响新创建的文件及子目录,对当前目录没影响)

删除一条ACL权限:

   setfacl-x u/g:user/group file

仅删除一条默认的ACL权限:

   setfacl-x d:user/group file

删除所有ACL权限

   setfacl-b file

删除默认的ACl权限:

   setfacl-k file

以上操作常与-R连用,递归设置对目录及其子目录的操作

主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p 参数。

   getfacl-R /PATH/TO > acl.txt连同其子目录文件的ACL权限一同导入acl.txt

   setfacl-R -b /tmp/dir1连同子目录的ACL全删除

   setfacl-R –set-file=acl.txt /tmp/dir1(两种还原)

   setfacl–restore acl.txt(第二种)

注意:

设置过ACL权限后,操作chmod g+/- r/x/w file这条命令,用ll命令查看权限时也能看到所属组位权限的变化,但是,用getfacl file查看所属组位没变化,实际上改变的只是mask值。但chmod u+/- r/x/w所属人权限无论使用ll查看还是,getfacl file查看,都会变成设置的值、

这里的mask是所有除所有者OWNER和root外的user和group的权限的并集。

也可以使用setfacl -mmask::r/w/x file设置其权限值

另外涉及到一些特殊权限:

   chattr+i file 不能file进行删除、修改,改名等

   chattr-i file 取消这种权限限制

权限管理

   chattr+a file 只能追加内容

   chattr -a file 取消这种权限限制

权限管理

OK,内容目前到此,小编君刚学Linux不久,学识有限,若有出入,请多多指教,若总结的不到位,望海涵。

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

(0)
M.SunM.Sun
上一篇 2017-07-30 20:47
下一篇 2017-07-30 20:58

相关推荐

  • 如何新增加磁盘分区挂载

    新增磁盘和分区挂载我们先要了解fdisk的参数以及菜单的操作说明,下面是fdisk的参数说明:  fdisk参数说明: m :显示菜单和帮助信息 a :活动分区标记/引导分区 d :删除分区 l :显示分区类型 n :新建分区 p :显示分区信息 q :退出不保存 t :设置分区号 v :进行分区检查 w :保存修改 x :扩展应用,高级功能 1  查看磁盘…

    Linux干货 2018-03-26
  • Linux中的文件查找和解压缩

         Linux的文件查找 概述:      本章将主要介绍在Linux中怎样查找文件和解压缩。需要我们掌握的知识有:locate和find 命令的使用,以及如何使用压缩和解压缩工具。 一、Linux文件查找      在文件系统上常常需要根据文件的各种属…

    Linux干货 2016-09-01
  • N26第三周

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。        who -i或-u 显示闲置时间, 若该用户在前一分钟之内有进行任何动作,将标示成"."号,如果该用户已超过24小时没有任何动作,则标示出"old"字符串   &n…

    Linux干货 2017-01-16
  • LNAMP Shell 部署脚本

    LNAMP Shell 部署脚本 学习总结: 这个脚本,早期是出于对个人学习Shell的总结而写,应该有些年头了,目前也在一边学马哥视频的基础上陆续完善,10月初才完成LNAMP环境的分离式部署,并减少整个Shell脚本各部分的依赖关系。 我是网络班13期高级班的学员,因个人做了几年Linux运维,所以目前整个高级班的课程,我是跳着看了集群(LVS + Ke…

    Linux干货 2015-10-27
  • 11文件查找find和locate

    有些时候我们是想要在系统中查找某个具体的文件,却不知道路径在哪里,只是知道其中的某些特性,比如大小或者名字什么的。这时候就要用到查找工具啦。 在文件系统上查找符合条件的文件命令有两个,locate和find,其中locate是非实时查找即数据库查找。而find是实时查找 locate: 用法:locate [OPTION]… [PATTERN]&…

    Linux干货 2016-11-27
  • Linux学习小结3

    1.列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。[root@node1 ~]# who -q | sed -n ‘1p’centos root fedora redhat mint2.取出最后登录到当前系统的用户的相关信息。[root@node1 ~]# who -a | tail -1min…

    Linux干货 2017-10-24