AI智能
改变未来

Linux 权限管理基础

  • 一、权限概述[ul]1)权限的基本概念
  • 2)为什么要设置权限
  • 3)Linux用户身份类别
  • 4)User 文件拥有者
  • 5)Group 文件所属组内用户
  • 6)Other 其他用户
  • 7)特殊用户 root
  • 二、普通权限管理① 文件类型
  • ② SElinux
  • 1)ls -l命令查看文件权限
  • 2)文件类型及权限解析
  • 3)文件或文件夹权限设置(字母)
  • 4)文件或文件夹权限设置(数字)
  • 5)奇葩权限
  • 6)特殊权限说明
  • [/ul]

  • 三、文件拥有者以及文件所属组设置
      1)文件拥有者与所属组的查看
    • 2)了解文件的拥有者与文件所属组来源
    • 3)为什么需要更改文件拥有者与所属组
    • 4)文件拥有者设置
    • 5)文件所属组的设置
    • 6)chown修改属主与属组
  • 四、Linux特殊权限位
      ☆ 粘滞位(sticky bit)
    • ☆ 添加粘滞位
    • ☆ 移除粘滞位
    • ☆ 添加SG位权限
    • ☆ 去除SG位权限
    • ☆ 添加S位权限
    • ☆ 去除S位权限
    • 1)SUID(SetUid)
    • 2)SGID
    • 3)SBIT(针对文件夹)
  • 五、Linux文件的隐藏属性
      1)chattr 设置文件的隐藏权限
    • 2)lsattr 显示文件的隐藏属性
  • 六、ACL访问控制列表
      1)为什么需要ACL
    • 2)getfacl 获取文件的ACL权限
    • 3)setfacl 设置文件的ACL权限
  • 六、umask
      ☆ 临时修改(重启后失效)
    • ☆ 永久修改
    • 1)什么是umask
    • 2)修改umask值

    一、权限概述

    1)权限的基本概念

    在多用户计算机系统的管理中,权限是指某个特定的用户具有特定的系统资源使用权利。

    在Linux 中分别有读、写、执行权限:

    权限针对文件 权限针对目录
    读r 表示可以查看文件内容;cat 表示可以(ls)查看目录中存在的文件名称
    写w 表示可以更改文件的内容;vim 修改,保存退出 表示是否可以删除目录中的子文件或者新建子目录(rm/touch/mkdir)
    执行x 表示是否可以开启文件当中记录的程序,一般指二进制文件(.sh) => 绿色 表示是否可以进入目录中(cd)

    注:一般给予目录读权限时,也将会给其执行权限,属于“套餐”组合

    可读权限 read => r(简写),可写权限 write => w(简写),可执行权限 excute => x(简写)

    2)为什么要设置权限

    ① 服务器中的数据价值体现,不能随意纂改

    ② 员工的工作职责和分工不同,内部管理的需要

    ③ 应对来自外部的***(安全)

    3)Linux用户身份类别

    Linux 系统一般将文件权限分为3 类:

    read(可读)write(可写)execute(执行)

    问:谁对文件有读,写,执行的权限呢?
    答:针对三大类用户,属主User、属组Group、其他Other

    4)User 文件拥有者

    文件的拥有者:默认情况下,谁创建了这个文件谁就是文件的拥有者。文件的拥有者可以进行更改并不是一成不变的。

    [root@hsforpyp ~]# touch linux.txt如上情况,root 用户就是 linux.txt 文件的拥有者

    5)Group 文件所属组内用户

    group所属组内用户代表与文件的所属组相同的组内用户。

    比如,root与alex、egon都同属于一个team的用户组,去掉文件拥有者root,alex和egon就是这个文件的组内用户。

    6)Other 其他用户

    other其他用户代表这些人既不是文件的拥有者,也不是文件所属组内的用户,我们把这些人就称之为other其他用户。

    7)特殊用户 root

    在Linux操作系统中,root拥有最高权限(针对所有文件),所以权限设置对root账号是没有效果。

    在Linux系统中,三大类用户也可以拥有简写形式user(u)、group(g)、other(o)

    二、普通权限管理

    1)ls -l命令查看文件权限

    基本语法:

    # ls -l 或 ll

    备注:ll命令是红帽以及CentOS系统特有的一个简写命令,在其他操作系统中可能并不支持,可通过alias命令设置别名。

    2)文件类型及权限解析

    ① 文件类型

    Linux一共有7种文件类型,分别如下:
    -:普通文件
    d:目录文件
    l: 软链接(类似Windows的快捷方式)

    (下面四种是特殊文件)
    b:block,块设备文件(例如硬盘、光驱等)
    p:管道文件
    c:字符设备文件(例如猫(上网猫)等串口设备)
    s:套接口文件/数据接口文件(例如启动一个MySql服务器时会产生一个mysql.sock文件)

    ② SElinux

    SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统。

    细心的小伙伴会发现上图结尾有一个.,该点表示此文件带有“SELinux的安全上下文”,RHEL8默认是开启SELinux的,所以会有这个点,当我们关闭SELinux后再创建文件,此处就不会有这个点了,但以前的文件还是会带有这个点(此时SElinux不起作用)。

    当SELinux结合其他访问控制措施如ACL时,.会被+字符所覆盖。

    3)文件或文件夹权限设置(字母)

    基本语法:ch = change mod

    # chmod [选项] 权限设置 文件或目录的名称选项说明:-R :递归设置,针对文件夹(目录)

    三方面:
    第一个:确认要给哪个身份设置权限,u、g、o、ugo(a)
    第二个:确认是添加权限(+)、删除权限(-),还是赋予权限(=)
    第三个:确认给这个用户针对这个文件或文件夹设置什么样的权限,r、w、x

    案例:给readme.txt文件的拥有者,增加一个可执行权限

    # chmod u+x readme.txt

    案例:把readme.txt文件的拥有者的可执行权限去除

    # chmod u-x readme.txt

    案例:为readme.txt中的所属组内用户赋予rw权限

    # chmod g=rw readme.txt

    案例:给shop目录及其内部的文件 统一添加w可写权限

    # chmod -R ugo+w shop或# chomd -R a+w shop

    案例:给shop目录设置权限,要求拥有者rwx,组内用户r-x,其他用户r-x

    # chmod -R u=rwx,g=r-x,o=r-x shop

    4)文件或文件夹权限设置(数字)

    经常会在技术网站上看到类似于# chmod 777 a.txt 这样的命令,这种形式称之为数字形式权限。

    文件权限与数字的对应关系,我们会发现没有7这个数字

    权限 对应数字 意义
    r 4 可读
    w 2 可写
    x 1 可执行
    0 没有权限

    现在有些小伙伴可能会察觉到 1+2+4=7,没错,的确7就是r+w+x累加的结果。

    777 :

    第一个数字7,代表文件拥有者权限

    第二个数字7,代表文件所属组内用户权限

    第三个数字7,代表其他用户权限

    rwx = 4 + 2 + 1 = 7

    rw = 4 + 2 = 6

    rx = 4 + 1 = 5

    案例:给readme.txt设置权限,文件的拥有者rwx,组内用户rw,其他用户r

    rwx = 7rw = 6r = 4# chmod 764 readme.txt

    案例:给shop文件夹设置777权限

    # chmod -R 777 shop

    5)奇葩权限

    问题:用超级管理员设置文档的权限命令是# chmod -R 731 shop,请问这个命令有没有什么不合理的地方?

    答:731权限进行拆解

    7 = 4 + 2 + 1 = rwx

    3 = 2 + 1 = wx

    1 = x

    问题在权限731中的3权限,3表示写+执行权限,但是写又必须需要能打开之后才可以写,因此必须需要具备可读权限,因此此权限设置不合理。

    注:实际生活中,各位小伙伴在设置权限时一定不要设置这种\”奇葩权限\”,一般情况下,单独出现2、4的权限数字一般都是有问题的权限。

    6)特殊权限说明

    在Linux 中,如果要删除一个文件,不是看文件有没有对应的权限,而是看文件所在的目录是否有写权限,如果有才可以删除(可写权限的前提是具备可 执行权限)。

    /shell/readme.txt我们想删除readme.txt文件,必须要对shell目录具有可写权限,否则文件无法删除

    三、文件拥有者以及文件所属组设置

    文件拥有者:属主

    文件所属组:属组

    1)文件拥有者与所属组的查看

    # ls -l或# ll

    2)了解文件的拥有者与文件所属组来源

    在Linux操作系统中,每个文件都是由Linux系统用户创建的。

    在Linux操作系统中,每个用户都具有一个用户名称以及一个主组的概念

    [root@hsforpyp ~]# su - demouser [demouser@hsforpyp ~]$ touch file.txt [demouser@hsforpyp ~]$ ll file.txt -rw-rw-r--. 1 demouser demouser 0 Feb 20 20:10 file.txt

    默认情况下,谁创建了这个文件,谁就是这个文件的属主,属主的主组就是这个文件的属组。

    3)为什么需要更改文件拥有者与所属组

    一个财务表格,以前由 Lily 进行负责更新撰写,她有读写权限,现在 Lily 休假了,改权限是没用的,需要把属主改成 Mike,由 Mike 接替任务。

    4)文件拥有者设置

    ch = change ,own = owner

    # chown [选项] 新文件拥有者名称 文件名称选项说明:-R :代表递归修改,主要针对文件夹

    案例:把/root/readme.txt文件的拥有者更改为hsforpyp

    # chown hsforpyp /root/readme.txt

    案例:把/root/file文件夹的拥有者更改为demouser

    # chown -R demouser /root/file

    5)文件所属组的设置

    ch = change , group,chgrp

    # chgrp [选项] 新文件所属组名称 文件名称选项说明:-R : 代表递归修改,主要针对文件夹

    案例:把/root/readme.txt文件的所属组名称更改为hsforpyp

    # chgrp hsforpyp /root/readme.txt

    案例:把/root/file文件夹的所属组名称也更改为demouser

    # chgrp -R demouser /root/file

    6)chown修改属主与属组

    基本语法:

    # chown [选项] 文件拥有者名称:文件所属组名称 文件名称或# chown [选项] 文件拥有者名称.文件所属组名称 文件名称选项说明:-R : 代表递归修改,主要针对文件夹

    ① 案例:readme.txt文件的拥有者与所属组同时更改为root

    # chown root:root readme.txt或# chown root.root readme.txt

    ② 案例:readme.txt文件的拥有者单独更改为demouser

    # chown demouser readme.txt或# chown demouser readme.txt

    ③ 案例:readme.txt文件的所属组单独更改为demouser

    # chown :demouser readme.txt或# chown .demouser readme.txt

    ④ 案例:更改shop目录的拥有者以及所属组为root

    # chown -R root:root shop或# chown -R root.root shop

    四、Linux特殊权限位

        在复杂多变的生产环境中,单纯设置文件的rwx权限无法满足我们对安全和灵活性的需求,因此便有了SUID、SGID与SBIT的特殊权限位。 这是一种对文件权限进行设置的特殊功能,可以与一般权限同时使用,以弥补一般权限不能实现的功能。

    1)SUID(SetUid)

    作用:SUID是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)。

    /etc/shadow文件比较特殊,其权限为— — —(即000),除root外,其他人都没有权限
    问:普通用户执行/usr/bin/passwd的时候需要去修改/etc/passwd和/etc/shadow等文件,这些文件除了root外,其他用户都没有写权限,但是又为了能让普通用户修改自己的密码,该怎么办呢?
    答:临时让他们具有root的权限,而这个s权限就是用来完成这个特殊任务的。s权限只能应用在二进制的可执行文件上。

    s所在位可能显示为大S,小s表示同时具备s权限和x可执行权限,大S表示只有s权限而没有x可执行权限
    which命令可以用于查看二进制可执行文件所在位置

    [hsforpyp@hsforpyp tmp]$ which passwd/usr/bin/passwd

    ☆ 添加S位权限

    # chmod u+s /usr/bin/passwd或者# chmod 4755 /usr/bin/passwd

    ☆ 去除S位权限

    # chmod u-s /usr/bin/passwd 或者# chmod 0755 /usr/bin/passwd

    2)SGID

    SGID与SUID类似,主要实现以下两个功能

    • 对拥有执行权限的二进制文件 : 让执行者在命令执行瞬间临时拥有属组的权限
    • 对目录 : 在某个目录中创建的文件自动继承该目录的用户组
    [root@hsforpyp ~]# ll /usr/bin/locate-rwx--s--x. 1 root slocate 47128 Aug 12  2018 /usr/bin/locate

    以 locate 命令为例,可以看到,/usr/bin/locate 文件被赋予了 SGID 的特殊权限,这就意味着,当普通用户使用 locate 命令时,该用户的所属组会直接变为 locate 命令的所属组,也就是 slocate。

    ☆ 添加SG位权限

    # chmod -R g+s filename或者# chmod -R 2755 filename

    ☆ 去除SG位权限

    # chmod -R g-s filename或者# chmod -R 0755 filename

    3)SBIT(针对文件夹)

    ☆ 粘滞位(sticky bit)

    主要功能:只允许文件的创建者和root用户删除文件(防止误删除权限位)

    基本语法:

    # chmod -R o+t 文件夹的名称或# chmod -R 1777 文件夹的名称

    使用ls -l命令查看/tmp目录权限

    [hsforpyp@hsforpyp tmp]$ ls -ld /tmpdrwxrwxrwt. 14 root root 4096 Feb 20 20:10 /tmp或[hsforpyp@hsforpyp tmp]$ ll -d /tmpdrwxrwxrwt. 14 root root 4096 Feb 20 20:10 /tmp

    /tmp文件夹,拥有最高权限777,比如hsforpyp创建了一个文件在此目录,demouser用户也可以对其进行删除操作,这种显然不太合适。这时,就需要使用到粘滞位。

    ☆ 添加粘滞位

    # chmod -R o+t /tmp或# chmod -R 1777 /tmp

    ☆ 移除粘滞位

    # chmod -R o-t /tmp或# chmod -R 0777 /tmp

    五、Linux文件的隐藏属性

    Linux 系统中的文件除了具备一般权限和特殊权限之外,还有一种隐藏权限,即被隐藏起来的权限。

    1)chattr 设置文件的隐藏权限

    修改文件或目录的隐藏属性,只有 root 用户可以使用

    格式:

    # chattr [+-=] [属性] 文件或目录名

    参数 作用
    i 无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而不能新建或删除文件
    a 仅允许补充(追加)内容,无法覆盖/删除内容(Append Only)
    S 文件内容在变更后立即同步到硬盘(sync)
    s 彻底从硬盘中删除,不可恢复(用0填充原文件所在硬盘区域)
    A 不再修改这个文件或目录的最后访问时间(atime)
    b 不再修改文件或目录的存取时间
    D 检查压缩文件中的错误
    d 使用dump命令备份时忽略本文件/目录
    c 默认将文件或目录进行压缩
    u 当删除该文件后依然保留其在硬盘中的数据,方便日后恢复
    t 让文件系统支持尾部合并(tail-merging)
    x 可以直接访问压缩文件中的内容

    2)lsattr 显示文件的隐藏属性

    格式:

    # lsattr [选项] 文件或目录名

    参数 作用
    -a 后面不带文件或目录名,表示显示所有文件和目录(包括隐藏文件和目录)
    -d 如果目标是目录,只会列出目录本身的隐藏属性,而不会列出所含文件或子目录的隐藏属性信息
    -R 和 -d 恰好相反,作用于目录时,会连同子目录的隐藏信息数据也一并显示出来

    六、ACL访问控制列表

    1)为什么需要ACL

    Linux 系统传统的权限控制方式,无非是利用 3 种身份(文件所有者,所属群组,其他用户),并分别搭配 3 种权限(读 r,写 w,访问 x)。但在实际应用中,以上这 3 种身份根本不够用。

    如上图,一班的老师和同学都可以访问并修改(rwx)本班的项目方案,其他班级的同学自然不可以拥有这些权限(—),某一天,班里来了一位试听的同学,他可以访问本班的项目方案,但由于他并没有学习过以前的课程,所以无法给他修改权限,即只能赋予他r-x权限,这时,我们如何分配呢?
    这种情况下,普通权限的三种身份都不符合要求,ACL 访问控制权限。

    ACL,是 Access Control List的缩写,在 Linux 系统中, ACL 可实现对单一用户设定访问文件的权限。

    ACL权限可以针对某个用户,也可以针对某个组。ACL优势就是让权限控制更加的精准。

    2)getfacl 获取文件的ACL权限

    getfacl = get file acl

    基本语法:

    # getfacl 文件或目录名称

    3)setfacl 设置文件的ACL权限

    setfacl = set file acl

    # setfacl [选项] 文件或目录名称|选项|功能||--|--||-m|修改acl策略,给予用户ACL权限,使用 \"u:用户名:权限 文件名\" 的格式;给予组ACL权限,使用\"g:组名:权限 文件名\" 格式。||-x|去掉某个用户或者某个组的权限,格式:\"setfacl -x u:用户名 文件名\"或\"setfacl -x g:组名 文件名\"||-b| 删除所有的acl策略,格式:\"setfacl -b 文件名\"||-R|递归设定ACL权限,格式:\"setfacl -m u:用户名:权限 -R 文件名\"|

    案例:针对readme.txt文件给demouser设置一个可读权限

    # setfacl -m u:demouser:r readme.txt	=>  针对某个用户开通ACL权限

    案例:针对file文件夹给hsforpyp组设置一个可读可写权限rw

    # setfacl -R -m g:hsforpyp:rw file	=> 	针对某个用户组开通ACL权限

    案例:把demouser用户权限从readme.txt中移除掉

    # setfacl -x u:demouser readme.txt

    案例:把hsforpyp用户组权限从file中移除掉

    # setfacl -x -R g:hsforpyp file

    案例:把readme.txt文件中的所有ACL权限全部移除

    # setfacl -b readme.txt

    六、umask

    1)什么是umask

        Windows 系统中,新建的文件和目录时通过继承上级目录的权限获得的初始权限,而 Linux 不同,它是通过使用 umask 默认权限来给所有新建的文件和目录赋予初始权限的。umask值由4个八进制数制成,分别对应着特殊权限位以及rwx普通权限。

    文件(或目录)的初始权限 = 文件(或目录)的最大默认权限 – umask权限
    问:如何获取umask默认权限的值?
    答:直接通过umask命令

    [root@hsforpyp ~]# umask0022[root@hsforpyp ~]# su - hsforpyp [hsforpyp@hsforpyp ~]$ umask0002

    上述发现,root用户下,umask 默认权限为0022,普通用户下,umask 默认权限为0002。

    案例:通过root用户和普通用户分别创建一个普通文件和一个目录。

    [root@hsforpyp hsforpyp]# touch rootfile[root@hsforpyp hsforpyp]# mkdir rootfloder[root@hsforpyp hsforpyp]# su - hsforpyp [hsforpyp@hsforpyp ~]$ touch file[hsforpyp@hsforpyp ~]$ mkdir floder[hsforpyp@hsforpyp ~]$ lltotal 0-rw-rw-r--. 1 hsforpyp hsforpyp 0 Feb 21 01:16 filedrwxrwxr-x. 2 hsforpyp hsforpyp 6 Feb 21 01:16 floder-rw-r--r--. 1 root     root     0 Feb 21 01:15 rootfiledrwxr-xr-x. 2 root     root     6 Feb 21 01:15 rootfloder

    通过root用户创建文件及目录初始权限值和umask值相加得到:
    普通文件:0644+0022=0666
    目录:0755+0022=0777
    通过普通用户创建文件及目录初始权限值和umask值相加得到:
    普通文件:0664+0002=0666
    目录:0775+0002=0777

    总结:
    1.文件的最大默认权限是 666,也就是说任何用户都没有可执行权限,原因很简单,执行权限是文件的最高权限,赋予时绝对要慎重,因此绝不能在新建文件的时候就默认赋予,只能通过用户手工赋予。
    2.目录的最大默认权限是 777,

    2)修改umask值

    ☆ 临时修改(重启后失效)

    # umask 421# umask0421

    ☆ 永久修改

    ① # vim /etc/profile找到以下内容,修改umask后面的值

    if [ $UID -gt 199]&&[ \"\'id -gn\'\" = \"\'id -un\'\" ]; thenumask 002#如果UID大于199(普通用户),则使用此umask值elseumask 022#如果UID小于199(超级用户),则使用此umask值fi

    ② wq 保存退出
    ③ # source /etc/profile 立即生效

  • 赞(0) 打赏
    未经允许不得转载:爱站程序员基地 » Linux 权限管理基础