• 权限管理


    权限管理

    目录

    1.文件权限介绍
    2.修改权限:chmod
    3.新建目录文件的默认权限
    4.特殊权限
    5.访问控制列表

    1.文件权限介绍

    文件的权限主要针对三类对象,分别是:owner:u:所属用户;group:g:所属组;other:o:其他人
    每个文件针对每类访问者都定义了三种权限:r=4:可读,能否查看内容和确定文件类型;w=2:可写,能否添加修改删除内容;x=1:可执行,是否可运行
    目录随说文件的一种,但目录是文件夹,所以这里目录和文件在权限方面还有些不同。
    针对目录来说:r:可以查看目录内的文件列表;w:可创建删除目录内的文件,但必须有x权限才可真正执行;x:可以进入目录内;X:只给目录x权限,不给文件x权限,但若文件本身就带x权限,则会给其他所有位加上x权限
    针对文件来说:r:可查看内容和元数据;w:可修改内容;x:可以运行,对root也有效
    注意
    文件是目录的内容,删除权限是文件所在目录的权限决定,若目录没有x权限,就不可删除文件。但修改权限是文件本身决定的,也就是即使删除不了,也可以使对文件进行修改破坏。
    任何用户无执行权限将无法执行,而root用户在u、g、o上没有执行权限时也不例外,但一旦任何一个上有x权限那么root就可以有x权限。
    时刻记住root为超级管理员,系统对root的约束力不大,很多规则都不能约束root。
    文件目录的权限是按照顺序检查的:u,g,o。

    2.修改权限:chmod

    chmod - 修改文件权限
    用法:
    chmod [option]... mode[,mode]... file...
    chmod [option]... octal-mode file...
    chmod [option]... --reference=rfile file...
    [option]
    -f:错误信息不显示
    -R:递归修改权限
    -v:显示详细修改权限过程
    -c:和-v一样,但只有出现改变时才显示
    [mode]和[octal-mode]
    {u|ug|ugo|go|uo}{=|-|+}{rwxX|421}:任意组合的u,g,o可以直接=或-或+权限,权限也可以使用rwx,也可以使用对于的数字
    [--reference=rfile]
    这是可以参考rfile文件的权限,来将file的权限修改与rfile的权限相同

    这里举些实例方便理解:
    chmod -R g+rwX /testdir
    chmod 600 file
    chmod u+wx,g-r,o=rx file

    3.新建目录文件的默认权限

    当我们创建一个目录或文件时,系统会自动给其分配一个权限,这个权限是怎么来的?实际上,新建目录或文件的权限是系统根据所设定的umask的值来计算出来的。
    umask有个默认值放在/etc/profile文件中。当用户uid在0-199之内时,umask=022;当用户uid大于199时,umask=002。
    默认权限是怎么来的呢?新建文件的默认权限为666-umask的值,且如果所得的结果某位存在执行权限也就是奇数是,则将其位上权限+1;新建目录的默认权限为777-umask的值所得。当然上面计算方法,本质上是对位将最大权限的umask的相应位权限去除,来得到默认权限;也就是说umask为0的位,不去除对位,umask为1的位,去除对位,对位是0还是0,对位是1就去为0。
    umask还是个命令:

    umask-显示和设定umask值
    umask [-p] [-S] [mode]
    -p:输出umask值,可以作为标准输入用
    -S:输入u=,g=,o=
    umask mode:设定umask值,但只是暂时的,重启机器后就会失效。

    要想永久保留自己设定的umask值可以保存在:~/.bashrc,这个用户自己用;/etc/bashrc,这个大家一起用。

    4.特殊权限

    文件除了一般权限外,还在执行位x上还有特殊权限。对于所有者u来说特殊权限称为SUID,对于所属组来说特殊权限为SGID,对于其他人来说特殊权限为STICKY

    1.SUID

    任何一个可执行程序文件能不能启动为进程,取决于发起者即所有者u对程序文件是否拥有执行权限;启动为进程后,其进程的所有者为原程序文件的所有者。
    SUID作用在所有者u的可执行权限x上,就是用于继承程序所有者的权限,来使所有人都可以暂借这个执行权限来执行这个文件。SUID只对二进制可执行程序有效,而设置在目录上无意义。
    权限的设定为:

    chmod u{+|-}s file...:给文件添加或去除suid权限

    2.SGID

    默认情况下,用户创建文件或目录时其所属组为此用户的所属组g。
    SGID作用在二进制文件上时,会使属于这个组g的人都继承文件的执行权限。
    SGID作用在目录上时,会使目录内新建的文件的所属组自动继续目录的所属组。
    权限的设定为:

    chmod g{+|-}s {dir|file}...:给目录或文件添加或去掉sgid权限

    3.STICKY

    具有写权限的目录,用户可以删除该目录中的任何文件。
    STICKY作用在目录上后,只有文件的所有者或root可以删除该文件。且STICKY设置在文件上无意义。
    权限的设定为:
    chmod o{+|-}t dir...:给目录添加或去掉sticky权限

    4.特殊权限的数字法和权限位的映射

    特殊权限位用数值表示就是:suid=4;sgid=2;sticky=1
    特殊权限设置时,要放在普通权限的前面,如chmod 4777 /tmp/a.txt
    SUID占据所有者u的执行权限位时,ux权限时表示su没有x权限时表示S。
    SGID占据所属组g的执行权限位时,gx权限时表示su没有x权限时表示S。
    STICKY占据其他人o的执行权限位时,ox权限时表示to没有x权限时表示T。

    5.访问控制列表

    1.访问控制列表介绍

    访问控制列表(Access Control List,ACL),又称存取控制串列,是使用以访问控制矩阵为基础的访问控制方法,每个对象对应一个串列主体。ACL描述每个对象各自的访问控制,并记录可对此对象进行访问的所有主体对象的权限。
    ACL的主要功能:为了更好的管理用户权限,可以自由的设置用户的访问文件的权限,实行有效的管理。对某些组成或用户有特殊权限的设置。除了文件的所有者,所属组和其他人,可以对更多的用户设置权限。
    centos7默认创建xfs和ext4文件系统具有ACL功能,而之前的版本,默认手工创建的ext4文件系统没有ACL功能,需要手动增加:tune2fs -o acl /dev/sd?

    ACL信息

    上面就是ACL生效的顺序,也就是权限优先级是从上往下的,所有者,自定义用户,所属主组,自定义组,其他人。且mask是个限定线,除了所有者和其他人,其余的都不能超过这个限定线。

    2.getfacl

    getfacl - 取得并显示文件的访问控制列表
    getfacl [-aceEsRLPtpndvh] {file|-} ...
    -a, --access:显示文件的ACL
    -d, --default:仅显示默认的ACL
    -c, --omit-header:不显示带有#的信息
    -e, --all-effective:显示所有有效的权限
    -E, --no-effective:显示无效的权限
    -s, --skip-base:跳过只有基础词目的文件
    -R, --recursive:递归
    -L, --logical:logical walk, follow symbolic links
    -P, --physical:physical walk, do not follow symbolic links
    -t, --tabular:使用列表输出格式
    -n, --numeric:打印数值形式的用户或组身份
    -p, --absolute-names:不要剥去“/”在路径上

    getfacl得到的显示如下:

           The output format of getfacl is as follows:
                   1:  # file: somedir/
                   2:  # owner: lisa
                   3:  # group: staff
                   4:  # flags: -s-
                   5:  user::rwx
                   6:  user:joe:rwx               #effective:r-x
                   7:  group::rwx                 #effective:r-x
                   8:  group:cool:r-x
                   9:  mask::r-x
                  10:  other::r-x
                  11:  default:user::rwx
                  12:  default:user:joe:rwx       #effective:r-x
                  13:  default:group::r-x
                  14:  default:mask::r-x
                  15:  default:other::---
    
    3.setfacl

    setfacl - 设置文件访问控制列表
    setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file ...
    -m, --modify=acl:修改当前文件的ACL
    -M, --modify-file=file:读取acl_file的ACL来修改file的ACL
    -x, --remove=acl:移除ACL权限
    -X, --remove-file=file:读取acl_file的ACL来移除file的ACL
    -b, --remove-all:移除所有ACL
    -k, --remove-default:移除默认的ACL
    --set=acl:设置ACL来代替当前的ACL
    --set-file=file:从文件上读取ACL来进行设置
    --mask:重新计算有效的mask值
    -n, --no-mask:不重新计算有效的mask值
    -d, --default:对所有新建立的文件都设置ACL
    -R, --recursive:只对已经存在的文件进行设置ACL
    -L, --logical:logical walk, follow symbolic links
    -P, --physical:physical walk, do not follow symbolic links
    --restore=file:恢复 ACLs (inverse of getfacl -R') --test:测试权限,ACL不被修改 acl_spec:[d:] [u|g|o|m]:[uid|gid|]:[权限] ,d为default,m为mask。 acl_file`:是带有ACL权限的文件

    这里列些例子大家可以试试:

    setfacl -{m|x} u:wang:rwx {filed|directory}
    setfacl -Rm g:sales:rwX directory
    setfacl -{M|X} file.acl {file|directory}
    setfacl -m d:u:wang:rx directory == setfacl -m -d u:wang:rx directory

    4.补充

    ACL文件上的组权限位上是mask的值,而非传统的组权限。
    通过ACL赋予目录默认的x权限时,目录内的文件也不会继承x权限的。
    mask只影响除所用者和other之外的人和组的最大权限,用户或组的设置必须存在于mask权限设定的范围内才可生效。一旦设定了ACL,mask权限就是显示在组权限位上。mask需要与用户的权限进行逻辑与运行后,才能变成有效的权限。
    备份ACL:主要的文件操作命令cpmv都支持ACL,只是cp命令需要加上-p选项,所以可以使用cp来备份。而tar等常见备份工具是不会保留目录和文件的ACL信息的。使用重定向也可以把ACL权限备份下来用来恢复:getfacl -R /tmp/dir1 > acl.txt
    恢复ACL:cp的话是整个文件,复制到所需的地方就可。如上所写,/tmp/dir1的ACL权限丢失的话,怎么恢复?可以:setfacl -R --set-file=acl.txt /tmp/dir1 ; setfacl --restore=acl.txt ;getfacl -R /tmp/dir1

    以上就是我所知道的有关权限管理的相关信息,这里就没有举多少例子,毕竟写再多也没有自己动手学的快。若发现有错误的地方,请大家帮忙提出纠正,谢谢!

  • 相关阅读:
    主流液晶显示器尺寸参数
    不能访问网络位置的解决方法(转)
    打开Word提示你正试图运行的函数包含有宏或需要宏语言支持的内容
    教你如何防“蹭网”
    ASA数据库瘦身(原创)
    多种解决:“Word无法启动转换器mswrd632.wpc”方法
    百兆线与千兆线网线制作方法
    linux常用命令
    DefaultIfEmpty
    实现手机发送验证码 进行验证
  • 原文地址:https://www.cnblogs.com/shenxm/p/7616192.html
Copyright © 2020-2023  润新知