第3章:用户系统和权限管理

linux用户系统

linux是一个多用户、多任务的操作系统;windows同时只允许一个用户登录,linux运行支持多个用户同时登录!

复制代码
linux用户概述与分类;用户组概述;
=====================================================================
用户:管理Linux系统而存在的。
用户一般分为用户名和用户ID(Identify):相当于我们的名字和身份证,名字和学号。用户名方便管理员使用,用户ID是唯一区别一个用户(计算机只识别ID)

Linux里所有的用户和进程都要有用户对应。
    文件存在必须对应用户
    进程运行必须应用用户


Linux用户分三类:
    1、超级管理员 root
    权限堪称皇帝。UID为0,换句话UID为0的都有皇帝对应的权限。(不要修改ID为0变管理员!)
        [root@oldboyedu ~]# id root
        uid=0(root) gid=0(root) groups=0(root)
        [root@oldboyedu ~]# id
        uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
        [root@oldboyedu ~]# whoami
        root

    2、虚拟用户(UID 1-999)
        实际存在的用户,但是又不允许它登录。用于满足文件或进程运行属主的要求。但是又不会带来管理风险。

    3、普通用户(#表示root,$表示普通用户)
        实际存在的用户,又允许它登录。管理员身份创建的,帮助管理员管理系统的。
        权限仅仅限制家目录,在一些系统级目录可以读不可以写,不可以进入/root目录。
        UID C7 1000起步 C6 500起步
        [root@oldboyedu ~]# useradd oldgirl

--------------------------------------------------------------------
用户组:集合、组织
    Linux里每个用户都必须至少归属于一个用户组,用户组也有唯一标识,Group ID 简称GID
    管理员组:root,0
    系统组:1-499,1-999(centos7)
    普通组:500+,1000+(centos7)
    用户必须属于一个且只有一个主组;一个用户可以属于0或多个辅助组
    默认情况创建用户,它会自动创建一个和用户名相同的用户组以及相同的GID。
        用户和用户组的对应关系
            1、1对1
            2、1对多个用户组
            3、多个用户对应一个用户组
            4、多对多
linux用户概述与分类;用户组概述;
复制代码

 

复制代码
管理用户(新增、删除、修改用户):useradd、usermod、userdel、newusers;管理用户组:groupadd、groupdel、groupmod
========================================================================
useradd  添加普通用户
    -u 指定UID
    -s 指定登陆的shell解释器
    -M 不创建家目录
    -g 指定用户组   useradd username -g group
    -G 为用户指定附加组(组必须存在)
    -c 添加用户说明
    -d 指定家目录
    -e 设定登陆截止日期
    -r 创建系统用户(ID为系统ID,并且不创建家目录,也不创建邮箱)
    -m 创建家目录,用于系统用户
    -M 创建家目录,用于非系统用户
    -D 查看or修改/etc/default/useradd文件
        useradd -D 查看/etc/default/useradd文件
        useradd -D -s /bin/sh 相当于vim编辑/etc/default/useradd文件

    创建新用户的操作示例
    [root@yefeng28325 ~]# useradd test_user         #创建新用户,默认会同时创建一个新用户组
    [root@yefeng28325 ~]# id test_user              #查看用户
    uid=1001(test_user) gid=1001(test_user) groups=1001(test_user)
    [root@yefeng28325 ~]# id
    uid=0(root) gid=0(root) groups=0(root)
    [root@yefeng28325 ~]# groupadd odgroup          #创建一个新用户组(用户组可以单独存在)这里并不是将用户添加到用户组!!!
    [root@yefeng28325 ~]# su test_user              #切换用户(root切普通用户不需要密码,反之要密码)
    [test_user@yefeng28325 root]$ 



usermod 修改用户的属性
    参数基本同useradd
    -m 该参数作用于useradd的不同!
    -G 为用户指定附加组(默认是覆盖,若保留原有,则需要同时使用-a选项)
    示例:
        usermod -U username #解锁操作;/etc/shadow中关于新用户的密码段为"!!",表示被锁了两次,-U解锁,解锁两次两个!都没了,此时账号就可以无面膜法登陆了(这种方式centos6之后就不被允许了)
        usermod -L username #锁定账号,被锁定的账号在/etc/shadow的密码段有"!",被锁的账号不能直接登陆,但可以用su切换到该账号

userdel 删除用户   #默认只删除用户,不删除文件!
    -r 递归删除用户目录及下面的文件

newusers passwd格式文件   #根据passwd格式文件批量创建新用户
---------------------------------------------------------------------
groupadd    添加用户组
  -g 指定组ID
groupdel    删除用户组
groupmod    修改用户组属性
管理用户(新增、删除、修改用户):useradd、usermod、userdel、newusers;管理用户组:groupadd、groupdel、groupmod
复制代码
复制代码
/etc/passwd、/etc/shadow等用户系统相关文件及其说明
========================================================================
/etc/passwd   用户所在文件
/etc/shadow   用户密码所在文件
/etc/group    用户组所在文件
/etc/gshadow  用户组密码所在文件(几乎不用)
        useradd  新增用户将会修改文件:/etc/passwd、/etc/shadow
        passwd   修改密码实际就是修改:/etc/shadow
        groupadd 新增用户组会修改文件:/etc/group、/etc/gshadow(若新增用户时新增了用户组也会修改这2个文件)

        [root@test ~]# useradd bingbing
        [root@test ~]# grep bingbing  /etc/passwd /etc/shadow /etc/group /etc/gshadow

/etc/login.defs 是设置用户帐号限制的文件。该文件里的配置对root用户无效。例如账号密码的最大有效期、最小长度、UID范围、GID范围、密码加密方法
----------------------------------------------------------------------
/etc/passwd字段说明:
    testuser:x:1002:1003::/home/testuser:/bin/bash(bash是sh的扩展,sh是bash的软连接。)
    用户名:用户密码:用户UID:用户组GID:用户说明:用户家目录:shell解释器
        用户密码x:密码被记录在/etc/shadow中,因为显示为x
        shell解释器:用户登录后,输入的命令使用指定解释器进行解释

/etc/shadow字段说明:
    testuser:!!:18614:0:99999:7:::
        testuser  用户
        :!!       密码(!!表示被锁定了2两次)
        :18614    最近更改密码的时间,距离1970年1月1日的天数
        :0        禁止修改密码的天数
        :99999    用户必须更改口令的天数
        :7        警告更改密码的期限
        :          在用户密码过期之后到禁用账户的天数
        :          从1970年1月1日起,到用户被禁用的天数
        :          保留

    testuser:$6$Ep7.u34t$lftwC7CPsqletU65r3njf6ZMOutegFRHqNKPIrd7El25leQLVpj9N7WPlRsiqchsa3S054Edk6GoOfKDY1o7s1:18676:0:99999:7:::
        密码:$6$Ep7.u34t$lftwC7CPsqletU65r3njf6ZMOutegFRHqNKPIrd7El25leQLVpj9N7WPlRsiqchsa3S054Edk6GoOfKDY1o7s1
        加密方法:$6==sha512;$1==md5
        slat盐:两个$之间的字符串"Ep7.u34t"

/etc/group字段说明:
    testuser:x:1003:
    用户组名:用户组密码:用户组GID:用户组成员

/etc/gshadow字段说明:
    testuser:!::
    用户组名:用户组密码:用户组管理员用户:用户组成员
/etc/passwd、/etc/shadow等用户系统相关文件及其说明
复制代码
复制代码
useradd命令添加用户的执行过程
    根据/etc/default/useradd、/etc/login.defs文件中的配置逐步配置

    /etc/default/useradd配置说明:
        # useradd defaults file
        GROUP=100
        HOME=/home              #*****设置家目录
        INACTIVE=-1
        EXPIRE=                 #用户终止时间,不设置表示不启用
        SHELL=/bin/bash         #*****默认shell解释器
        SKEL=/etc/skel          #*****该目录下保存默认的环境变量.bash_logout、.bash_profile、.bashrc;创建新用户时,将会复制这些环境变量到新用户家目录下
        CREATE_MAIL_SPOOL=yes
    /etc/login.defs说明:设置了UID_MIN、UID_MAX、GID_MIN、GID_MAX、UMASK 077(所以用户家目录的默认权限为700)
useradd命令添加用户的执行过程
复制代码

 

复制代码
修改用户密码:passwd、chpasswd、chage(密码时效管理)
========================================================================
passwd  修改用户的密码
    -d 删除密码
    -l 停止账号使用
    -u 启用已被停止的账户
    -f 强迫用户下次登录时必须修改口令
    -w 口令要到期提前警告的天数
    -k 更新只能发送在过期之后
    -S 显示密码信息
    -x 指定口令最长存活期
    -g 修改群组密码
    -i 口令过期后多少天停用账户
    --stdin 从标准输入接收密码并设置(该方式将会直接修改,设置密码时不需要进行交互)
    方法1:echo 123456 |passwd --stdin testuser    
    方法2:passwd --stdin oldgirl <pass.txt 
    passwd -n7 -x60 -w10 -i30 testuser #用户testuser7天内不能更改密码,60天后必须修改密码,过期前10天通知用户,过期30天后禁止用户登录。
        passwd 本质就是修改/etc/passwd文件,但是不建议直接修改该文件!

---------------------------------------------------------------------
chpasswd 从标准输入批量更改用户密码
    方法1:chpasswd<user.log
    方法2:tail -4 /etc/passwd|awk -F ":" '{print $1":oldboy"}'|chpasswd
    (要求输入的格式----用户名:密码)

---------------------------------------------------------------------
chage 该命令用于密码时效管理。它可以修改账号和密码的有效期。
  -l 列出用户以及密码的有效期:密码最后修改时间、密码过期时间、账号过期时间、最小修改密码时间间隔、最大修改密码时间间隔等信息
  -E 修改账号过期时间
    chage -l testuser
    chage -m7 -M60 -W10 -I30 testuser #修改最小修改密码时间间隔为7天,最大修改时间间隔为60天,过期前10天warning提示,过期后30天后禁止用户登录
修改用户密码:passwd、chpasswd、chage(密码时效管理)
复制代码
复制代码
命令(查看用户及用户登录日志):id、whoami、w、finger、last、lastlog
========================================================================
id 查看用户身份
    id                   #默认查看当前用户
    id username          #查看用户,groups项为用户所属的组,第一个为主组,之后的为附属组
        当然也可以用来判断是否存在某个用户了
---------------------------------------------------------------------
whoami                  #查看当前登录用户
---------------------------------------------------------------------
w                       #查看当前登录的所有用户及相关信息
---------------------------------------------------------------------
finger username         #查看账号的描述信息
---------------------------------------------------------------------
last                    #列表显示登录过的用户信息
---------------------------------------------------------------------
lastlog                 #列表显示所有用户最后登录的相关信息,比如端口、IP、时间
命令(查看用户及用户登录日志):id、whoami、w、finger、last、lastlog
复制代码
复制代码
命令(操作用户组):groups、gpasswd、newgrp
========================================================================
groups groupname        #查看用户组的组成员
gpasswd groupname       #设置组密码
newgrp groupname        #当前用户切换主组(用户属于该组,无需密码;用户不属于该组,需要输入组密码)
    一个用户要永久加附加组,那么需要同时修改/etc/group和/etc/gshadow
命令(操作用户组):groups、gpasswd、newgrp
复制代码
复制代码
命令(操作用户和用户组相关的文件):vipw、vigr、pwck、grpck、pwunconv、pwconv、chfn、authconfig、getent
========================================================================
vipw、vigr               #打开相应的/etc/passwd和/etc/group,并进行编辑
---------------------------------------------------------------------
pwck、grpck              #对/etc/passwd和/etc/group进行格式检查
---------------------------------------------------------------------
pwunconv        #用户密码的字符串显示在/etc/passwd中
---------------------------------------------------------------------
pwconv          #用户密码回归到/etc/shadow
---------------------------------------------------------------------
chfn username   #交互式方式往/etc/passwd文件中的用户username添加描述信息
---------------------------------------------------------------------
authconfig --passalgo=sha512 --update   #更换密码的加密算法,默认为sha512,本质上就是修改/etc/login.defs文件;注意,修改加密算法后,新设置的密码使用新算法;原有密码的加密算法不变;
---------------------------------------------------------------------
getent命令用来查看系统的数据库中的相关记录。
    getent passwd username
    getent group root
命令(操作用户和用户组相关的文件):vipw、vigr、pwck、grpck、pwunconv、pwconv、chfn、authconfig、getent
复制代码

 

复制代码
su命令
===============================================================
su命令切换账号(默认不重新加载环境变量,同时不指定切换账号默认切换为root)
    参数说明:
        -  加载切换账号的环境变量;登陆式切换,会读取目标用户的配置文件,切换至家目录,完全切换
        -c 说法1:切换账号执行-c后,切回账号;说法2:不切换用户,但以指定用户执行一条命令
    示例:
        su - username -c whoami     #以用户username身份执行命令whoami,视觉效果上看没有切换账号
        su -                        #等效于su - root #切换到root必须输入root密码
        su - username               #root切换到普通用户不需要密码,普通用户之间相互切换需要输入密码
su命令
复制代码
复制代码
sudo命令;生产环境下的sudo应用要点(root密码管理)
===============================================================
sudo 允许指定用户以root身份执行指定命令
    1.不是所有用户都能sudo的!
    2.能sudo的用户只能执行指定命令,而不是能执行所有命令!
    与suid位的区别:suid的设置是针对命令的,设置后所有用户使用该命令都拥有属主的权限
    参数:
        -l 查看当前用户的sudo权限

    用户使用sudo且输入密码之后,将会在/var/run/sudo/ts/中生成一个时间戳文件,默认在接下来的5分钟内使用sudo不需要再次验证

visudo编辑sudo配置文件的命令(等效于vim /etc/sudoers[不推荐])
    -c 检查/etc/sudoers文件的语法是否正确(编辑/etc/sudoers后,执行visudo -c是良好的习惯)
    相关语法示例:
        root      ALL=(ALL)     ALL
        username1 ALL=(ALL)     NOPASSWD:ALL                             #该用户拥有sudo所有明显的权限,且sudo时无需输入密码
        username2 ALL=(ALL)     /usr/bin/ls,/bin/cp(注意使用全路径)      #该用户可以sudo使用ls、cp命令 

--------------------------------------------------------------
生产环境下的sudo应用要点
关于su和sudo,我的理解(实际工作中的要点):
    1.禁止所有人使用root账号远程连接linux,所有人都使用普通账号登陆
    2.root密码禁止外泄,保管在极少数人手中
    3.管理员的账号在/etc/sudoers文件配置有最高权限,即可以使用sudo使用所有命令
        若一定要切换为root用户,则建议使用sudo su - root(输入密码为管理员账号的密码),不建议使用su - root:(输入密码为root账号的密码,这种方式有10个运维就有10人知道root密码,有安全隐患)
    4.普通用户的账号则根据需要给予sudo权限,或不给sudo权限
sudo命令;生产环境下的sudo应用要点(root密码管理)
复制代码
复制代码
案例1:环境变量导致的故障;案例2:生产环境下删除账号;案例3:root用户找回密码
-------------------------------------------------------------------------------------------
故障案例1:登录系统后,命令行出现如下提示:为什么?
    [root@oldboyedu /home/chenglong1]# su - chenglong1
    -sh-4.2$  #此处没有正常显示用户名,主机名等信息

故障原因1:用户的环境变量缺失导致的。
故障解决1:将/etc/skel目录下的环境变量
    -sh-4.2$ cp /etc/skel/.bash* .
    -sh-4.2$ source ./.bash_profile ./.bashrc       #猜测source是重新加载文件
    [chenglong1@oldboyedu ~]$                       #重新加载环境变量后,显示正常

故障原因2:/etc/default/useradd文件中的SKEL=/etc/skel被修改,导致创建新用户时,没有正确地复制环境变量
故障解决2:修复配置!

--------------------------------------------------------------------------------------------
实际工作中的删除账号:
    不直接使用userdel,而是编辑/etc/passwd,通过注释使账号不可用;然后一段时间后集中删除

--------------------------------------------------------------
root用户找回密码
    https://baijiahao.baidu.com/s?id=1614000108255096283&wfr=spider&for=pc
案例1:环境变量导致的故障;案例2:生产环境下删除账号;案例3:root用户找回密码
复制代码

 权限管理

 

复制代码
文件权限;基础权限(rwx)说明;用户执行命令的权限说明
==================================================================================================================
linux文件权限就是基础权限(9字符:rw-r--r--)+特殊权限位(3字符:suid、sgid、sticky)
猜测:linux中文件完整权限一共占据12bit,其中前3bit为特殊权限位,剩下的9bit分别对应属主、属组、其他用户的普通权限
    猜测依据:chmod 7644 testfile  #testfile文件设置了基础权限rw-r--r--,同时设置了特殊权限位suid、sgid、sticky;最终表示为rwSr-Sr-T
------------------------------------------------------------------------------------------------------------------
基础权限(rwx)说明
权限系统是基于文件系统的,windows系统的fat文件系统就不支持rwx权限

文件的权限说明:
    r表示具有读取、浏览文件内容的权限(即读取文件实体block)
    w表示具有新增、修改、删除文件内容的权限
        1.vi编辑文件时,需要r权限配合,否则会提示无法编辑;不过没有r可以进行强制编辑,可以使用echo等命令进行重定向or追加
        2.删除文件or创建文件的权限是受父目录的权限控制的,因为文件名存放在上级目录的block中;若删除文件or创建(本质上就是修改上级目录的block),自然受上级目录的inode权限控制,和文件本身的权限无关。
    x表示具有执行文件的权限
        1.文件本身是能够执行(命令or脚本)
        2.普通用户需要同时具备rx权限才能执行文件
        3.root具备x权限就能执行文件

目录的权限说明:(rx是目录的基础权限)
    r表示具有浏览目录下面文件和子目录名的权限。
        需要有x权限,才能切换到该目录里,即cd 目录
        没有x权限时,虽然ls可以查看目录内所有的文件名,但是会提示无权访问目录下的文件;同时使用ll查看时,虽然可以看到文件名,但是文件名对应的属性则全部以?代替(这个很好理解:没有x权限,即无法进入到目录内,目录内的文件名是上一级目录的内容,但是目录内的文件的属性则是属于文件的,无法进入到目录,自然无法查看文件内容)
    w表示具有增加、删除、修改目录内文件的权限
        需要有x权限配合,否则即使有w也无法删除or创建文件
    x表示具有进入目录的权限
------------------------------------------------------------------------------------------------------------------
用户执行命令的权限说明
    command file----例如cat 123.txt
    1.用户是否可以将一个可执行程序启动为进程,取决于用户对该程序文件是否用户执行权限
        即用户是否对command拥有x权限(用户是否对cat命令拥有x权限)
    2.进程启动后,进程属主为用户,进程属组为用户的属组
    3.进程访问文件file的权限,取决于用户对该文件的权限
        a.用户是文件的属主,则对应属主权限
        b.用户是文件的属组,则对应属组权限
        c.用户是文件的other,则对应other权限
文件权限;基础权限(rwx)说明;用户执行命令的权限说明
复制代码
复制代码
特殊权限位(suid、sgid、sticky)说明
==================================================================================================================
suid:启动进程后,其进程的属主为原程序文件的属主,而不是当前用户
sgid:
    1.设置在二进制命令or程序:启动进程后,其进程的属组为原程序文件的属组
    2.设置目录的sgid位:通常用于常见一个协作目录,任何用户在该目录下创建的新文件的属组都继承自该协作目录
sticky:设置在文件上无意义;设置在目录上,该目录下的文件,只有文件的属主或root才能删除该文件(/tmp设置了粘滞位)

------------------------------------------------------------------------------------------------------------------
suid位:是针对二进制命令or程序的!(针对脚本和文件设置suid位是无效的!)
suid(setuid)位通过S字符标识,存在于基本权限的用户权限位的x权限对应的位置;suid的s对应的数字权限为4,完整权限用八进制数4000表示。
    如果用户权限位对应的x权限位上有x权限,则suid就用小写的s标识;如果用户权限位对应的x权限位上无x权限,则suid就用大写的S标识。
    suid一般都设置在命令文件,例如:find /usr/bin -perm 4755|xargs ls -l;可以看到su、umount、passwd等命令都设置了suid位。
    suid的作用:让普通用户可以在执行某个设置了suid位的命令or程序时,拥有和命令对应属主一样的身份和权限(注意:不只是权限,同时也有身份)
    例如:当一个命令文件的suid置位时(命令文件的属主x位必然置1),即此时属主x位为's';其他用户使用该命令时,具备属主的身份和权限。以passwd命令为例,通过passwd命令的suid位置1,其他用户也具备了使用passwd命令的权限。
        拓展:将passwd命令的其他用户权限设置为5,即其他用户可读可执行,这种方式是不可行的!这种方式虽然拥有了passwd命令的可读可执行权限,但是用户对文件/etc/shadow却无任何权限,所以还是无法修改密码。(passwd命令实际修改的是文件/etc/shadow,/etc/shadow对应的权限为---------,即属主也不具备任何权限)
    suid是一个比较危险的功能,对系统安全有一定的威胁,企业里用户授权可以使用sudo等替代sgid功能。

------------------------------------------------------------------------------------------------------------------
sgid的作用
    1.让普通用户可以在执行某个设置了sgid位的命令时,拥有和命令对应用户组(一般为root用户组)一样的身份和权限(默认)。
        例如:命令locate搜索内容就是到updatedb对应的数据库/var/lib/mlocate/mlocate.db中进行查找
    2.sgid基于目录的作用:让不同的人创建文件属于相同的用户组,从而可以互相共享文件的权限。

    sgid作用1示例:
    locate命令的逻辑其实是简单的,就是会自动去查询mlocate.db
        1./var/lib/mlocate/mlocate.db的other的权限是0,是不允许other读取的
        2.通过设置sgid,other运行locate命令时,临时获取了slocate组权限;而mlocate.db对于属组的权限是r--,即可读。
            -rwx--s--x 1 root slocate 40520 Apr 11  2018 /usr/bin/locate
            -rw-r----- 1 root slocate 5549112 Dec 19 23:06 /var/lib/mlocate/mlocate.db
        3.其他用户使用locate命令可以顺利的进入到mlocate.db进行查找(读操作)
        所以suid,sgid都是用于临时授予权限的,在该命令结束时,权限也被收回去了
    sgid作用2示例:sgid基于目录的作用
        设置了sgid位的目录,在这个目录下,不同用户创建的文件都会继承目录的组,即所有文件都会属于相同的组,从而可以互相共享文件

------------------------------------------------------------------------------------------------------------------
粘滞位sticky位
    drwxrwxrwt. 8 root root 4096 Dec 19 23:04 /tmp
    一个目录的普通权限位全部开放,即设置777,同时设置了sticky位。那么这个目录只能被属主和root删除,其他用户是不能删除这个目录的。
    粘滞位sticky位一般的用途是将一个目录的权限都打开,然后来共享文件。虽然方便,但带来了一定的安全隐患,生产环境应禁止设置sticky位权限!!!

------------------------------------------------------------------------------------------------------------------
特殊权限位的显示说明
    chmod 7644 testfile  #设置了特殊权限位suid、sgid、sticky;特殊权限位是否设置显示在可执行位x 
        当可执行位置0时,设置了特殊权限位,则用相应的大写SST进行表示:即7644表示为rwSr-Sr-T
        当可执行位置1时,设置了特殊权限位,则用响应的小写sst进行表示:即7755表示为rwsr-sr-t
特殊权限位(suid、sgid、sticky)说明
复制代码
复制代码
文件属性(属主属组rxw)相关命令:chown、chmod、chgrp
=====================================================================================
chown命令(change owner)用来设置文件的属主、属组
    -R 递归处理目录以及子目录下的所有文件
    示例:
        chown 属主.属组 file1.txt  修改属主和属组('.'可以用':'来替代)
        chown 属主 file1.txt       修改属主
        chown .属组 file1.txt      修改属组
chgrp命令修改文件的属组
    -R 递归
-----------------------------------------------------------------------------------
chmod命令修改文件属性(root是例外,root读写文件不受权限控制,但执行权限还是受文件权限控制的)
    -R 递归处理目录以及子目录下的所有文件
    通过数字进行修改:
        chmod 744 testfile
        chmod 7644 testfile         #设置了特殊权限位suid、sgid、sticky  
            -rwSr-Sr-T---7644:当可执行位置0时,设置了特殊权限位,则用相应的大写SST进行表示
            -rwsr-sr-t---7755:当可执行位置1时,设置了特殊权限位,则用响应的小写sst进行表示
    通过参数进行修改:
        +增加权限,-删除权限,=设定权限
        r读取权限,w写权限,x执行权限,X只给目录执行权限
        chmod ugo+r file1.txt           #u=user,g=group,o=other;设为所有人皆可读取
        chmod a+r file1.txt             #a=ugo;设为所有人皆可读取
        chmod ug+w,o-w file1.txt        #属主属组增加w权限,other删除w权限
        chmod u+x ex1.py                #属主增加x权限
        chmod u-r,g=x,o=w file1         #属主删除r权限,属组只有x权限,other只有w权限
        chmod -R +X dir1                #递归处理dir1目录内的所有文件,+X只对目录增加执行权限
    通过参考文件权限进行修改
        chmod --reference=f1 f2 f3      #参照f1文件的权限,设置f2f3的权限

    示例:
        [root@yefeng28325 ~]# chmod 744 testfile        #当一个文件具有可执行文件时,颜色也发生变化了,ECS上显示为翠绿色
        [root@yefeng28325 ~]# ./testfile                #执行文件需要使用当前路径or绝对路径,不能使用相对路径;使用相对路径将会去环境变量中查找可用的命令,而不是执行文件
        [root@yefeng28325 ~]# /root/testfile 

-----------------------------------------------------------------------------------
chgrp(change group)命令用于变更文件或目录的所属群组。
  -c或--changes 效果类似"-v"参数,但仅回报更改的部分。
  -f或--quiet或--silent  不显示错误信息。
  -h或--no-dereference  只对符号连接的文件作修改,而不更动其他任何相关文件。
  -R或--recursive  递归处理,将指定目录下的所有文件及子目录一并处理。
  -v或--verbose  显示指令执行过程。
文件属性(属主属组rxw)相关命令:chown、chmod、chgrp
复制代码
复制代码
ext2文件系统支持的文件属性(锁定文件等等):chattr命令、lsattr命令
=====================================================================================
chattr命令用于改变文件属性。
这项指令可改变存放在ext2文件系统上的文件或目录属性,这些属性共有以下8种模式:
    a:让文件或目录仅供附加用途。
    b:不更新文件或目录的最后存取时间。
    c:将文件或目录压缩后存放。
    d:将文件或目录排除在倾倒操作之外。
    i:不得任意更动文件或目录。
    s:保密性删除文件或目录。
    S:即时更新文件或目录。
    u:预防意外删除。
参数
  -R 递归处理,将指定目录下的所有文件及子目录一并处理。
  -v<版本编号> 设置文件或目录版本。
  -V 显示指令执行过程。
  +<属性> 开启文件或目录的该项属性。
  -<属性> 关闭文件或目录的该项属性。
  =<属性> 指定文件或目录的该项属性。
用法:
    chattr +i file  #所有用户(含root)无法修改该文件
    chattr +a file  #所有用户(含root)只能对该文件追加内容

-----------------------------------------------------------------------------------
lsattr命令用于显示文件属性。用chattr执行改变文件或目录的属性,可执行lsattr指令查询其属性。
参数:
    -a  显示所有文件和目录,包括以"."为名称开头字符的额外内建,现行目录"."与上层目录".."-d  显示,目录名称,而非其内容。
    -l  此参数目前没有任何作用。
    -R  递归处理,将指定目录下的所有文件及子目录一并处理。
    -v  显示文件或目录版本。
    -V  显示版本信息。
ext2文件系统支持的文件属性(锁定文件等等):chattr命令、lsattr命令
复制代码
复制代码
umask(控制新文件的默认权限)
-----------------------------------------------------------------------------------
新文件默认权限:umask
umask全局设置/etc/bashrc   用户设置~/.bashrc
创建的新文件默认权限为666,新目录默认权限为777,同时需要禁用创建用户的umask对应的权限
    root的umask为0022,即禁用了属组和其他用户的w权限。
        新文件的实际权限为644,新目录实际权限为755
    普通用户的umask为0002,即禁用了other的w权限。
        新文件的实际权限为664,新目录实际权限为775
    特殊:普通用户的家目录默认权限为700



    644:所有人不能执行,属主可读可写,其他人只可读
    755:所有人都能执行,即可以进入目录;属主可读可写,其他人可读

    umask命令用法
        umask
        umask -S
        umask -p >> ~/.bashrc
umask(控制新文件的默认权限)
复制代码

 

复制代码
访问控制列表ACL(access control list);getfacl命令、setfacl
=====================================================================================
访问控制列表ACL(access control list):实现灵活的权限控制
    linux的文件权限控制系统只针对3类:属主、属组、other;通过使用acl可以实现针对单用户的权限控制,更灵活
    centos7默认创建的xfs和ext4文件系统具有ACL功能
    centos7之前版本,默认手工创建的ext4文件系统无acl功能,需手动增加
        tune2fs -o acl /dev/sdb1
        mount -o acl /dev/sdb1 /mnt/test
    ACL的生效顺序:属主,自定义用户,自定义组,other。(开启ACL之后,就没有属组的权限了)
    mask其实就是指定了自定义用户、自定义组的权限上限(即acl针对自定义用户开启了某权限,但是mask没有该权限,则该权限实际不生效);开启ACL之后,ll命令查看文件,属组位置的权限其实是mask

cp和mv都支持ACL,cp命令要注意加上-p参数。但是tar等常见的备份工具不会保留目录和文件的acl信息
    getfacl -R /tmp/dir1 > acl.txt
    setfacl -R -b /tmp/dir1
    setfacl -R --set-file=acl.txt /tmp/dir1
    setfacl --restore acl.txt
    getfacl -R /tmp/dir1

-----------------------------------------------------------------------------------
getfacl 查看文件的acl设置
setfacl的用法: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
    -m,       --modify-acl 更改文件的访问控制列表
    -M,       --modify-file=file 从文件读取访问控制列表条目更改
    -x,       --remove=acl 根据文件中访问控制列表移除条目
    -X,       --remove-file=file 从文件读取访问控制列表条目并删除
    -b,       --remove-all 删除所有扩展访问控制列表条目
    -k,       --remove-default 移除默认访问控制列表
            --set=acl 设定替换当前的文件访问控制列表
            --set-file=file 从文件中读取访问控制列表条目设定
            --mask 重新计算有效权限掩码
    -n,       --no-mask 不重新计算有效权限掩码
    -d,       --default 应用到默认访问控制列表的操作
    -R,       --recursive 递归操作子目录
    -L,       --logical 依照系统逻辑,跟随符号链接
    -P,       --physical 依照自然逻辑,不跟随符号链接
            --restore=file 恢复访问控制列表,和“getfacl -R”作用相反
            --test 测试模式,并不真正修改访问控制列表属性
    -v,       --version           显示版本并退出
    -h,       --help              显示本帮助信息


用法示例:
    getfacl f1
    setfacl -m u:username:0 f1       #更改f1文件的ACL,针对用户username设置---权限
    setfacl -m u:username:7 f1       #更改f1文件的ACL,针对用户username设置rwx权限
    setfacl -m u:username:rw f1      #更改f1文件的ACL,针对用户username设置rw-权限
    setfacl -x u:username f1         #更改f1文件的ACL,删除针对用户username的权限控制
    setfacl -m g:group:rw f1         #更改f1文件的ACL,针对用户组group设置rw-权限
    setfacl -x g:group f1            #更改f1文件的ACL,删除针对用户组group的权限控制
    setfacl -b f1                    #清空所有的acl权限控制

    getfacl file1 | setfacl --set-file=- file2 #复制file1的acl权限给file2
访问控制列表ACL(access control list);getfacl命令、setfacl
复制代码

 

posted @   雲淡風輕333  阅读(163)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示