10Linux之用户权限管理

10Linux之用户权限管理

10 用户权限管理

10.1 用户权限管理之用户与组管理

10.1.1 用户基本信息

  • 什么是用户

    用户是操作系统提供的一种安全机制

    用户是权限的化身

  • 为什么要有用户

    为了划分权限,增强安全性

    每启动一个进程都会与一个用户关联

    进程-->用户-->权限(作用在文件身上)

  • 什么是组

    主组:用户本身所在的部门

    附加组:为用户添加的部门

  • 总结

    Linux系统把权限分为三类:

    ①属主对应的权限

    ②属组对应的权限

    ③其他对应的权限

    一个用户对文件的权限扫描的优先级:

    ①先看该用户是否是文件的属主

    ②在1失败的情况下,再看该用户是否是文件的属组

    ③在2失败的情况下,该用户属于其他人权限

  • 用户与组的关系

    一对一:一个用户可以属于一个组,用户默认就在自己的主组下

    一对多:一个用户可以属于多个组,只有一个主组,但可以为用户添加多个附加组

    多对多:多个用户可属于多个组

  • 查看用户的相关信息

    id # 查看当前用户

    whoami # 查看当前用户是谁

    who # 查看所有登陆的用户

    [root@ccc ~]# id  			        # 查看当前用户
    uid=0(root) gid=0(root) 组=0(root)              # UID:用户id,GID:主组id,组:所有组id
    [root@ccc ~]# whoami 				# 查看当前用户是谁
    root
    [root@ccc ~]# id zzz  				# 查看zzz用户
    uid=1000(zzz) gid=1000(zzz) 组=1000(zzz)
    [root@ccc ~]# who  				# 查看所有登录的用户
    root     pts/0        2020-10-28 08:48 (192.168.29.2)
    root     pts/1        2020-10-28 14:50 (192.168.29.2)
    [root@ccc ~]# ps aux | grep [s]sh  	        # 每一个进程都有其用户
    root        833  0.0  0.4 112924  4328 ?        Ss   10:37   0:00 /usr/sbin/sshd -D
    root       1084  0.0  0.6 161532  6096 ?        Ss   10:39   0:00 sshd: root@pts/0
    root       1570  0.0  0.6 161536  6092 ?        Ss   14:50   0:00 sshd: root@pts/1
    
  • 角色划分

    分为管理员用户和其他用户

    ①管理员用户:拥有最高权限

    ②其他用户:根据管理员的分配拥有不同的权限

    UID与GID

    ①UID(User Identify)用户ID,唯一标识一个系统用户的账号,uid在系统中是唯一的

    UID相当于一个人的身份证,用户名相当于这个人的名字

    ②GID(Group Identify)组ID

    GID相当于部门编号,UID相当于这个人的员工号

    centos7系统约定:

    UID0 # 超级管理员,最高权限,有着极强的破坏能力

    UID1-200 # 系统用户,用来运行系统自带的进程,默认已创建

    UID201-999 # 系统用户,用来运行安装的程序,该类用户无需登陆系统

    UID1000+ # 普通用户,可以正常登录系统的用户,权限比较小,能执行的任务有限

    centos6系统约定:

    UID0 # 由超级用户或具备超级用户权限的用户创建的用户

    UID1-499 # 系统虚拟用户,存在满足文件或服务启动的需要,一般不能登录

    UID500-65535 # 普通用户

  • 超级用户

    默认是root用户,其UID和GID都是0

    root在每台Unix/Linux操作系统中唯一且真实存在

    可以操作系统中任何文件和命令,拥有最高的管理权限

    1、在生产环境中,一般会禁止root账户通过SSH远程连接服务器,也会更改默认的SSH端口,以加强系统安全。

    2、企业工作中没有特殊要求尽量不登录root用户进行操作,应在普通用户下操作任务,然后sudo管理普通用户权限,可以细到每个命令权限分配。

    3、在Linux系统中,UID为0的用户就是超级用户。通常情况下不这么做,如果确实有必要在某一操作上用到管理的权限的话,用sudo单独授权,不要直接用UID为0的用户。

    操作系统—>一个国家

    root用户—>国王

    root用户的家目录—>皇宫

  • tips

    Linux/Unix是一个多用户多任务的操作系统

    Windows是一个单用户多任务的操作系统

    多用户指一次可以登录多个用户,而非可以创建多个用户

    多任务指可以并发执行多个进程

10.1.2 与用户、组相关文件

  • 相关文件

    /etc/passwd

    /etc/shadow

    /etc/group

    /etc/gshadow

  • /etc/passwd

    以root: x:0:0:root:/root:/bin/bash为例

    root
    用户名称
    x
    密码占位符
    0
    用户UID
    0
    用户GID
    root
    注释信息
    /root
    用户家目录
    /bin/bash
    登录shell
    第一列 第二列 第三列 第四列 第五列 第六列 第七列
    root:x:0:0:root:/root:/bin/bash
    
    第一字段:用户名
    第二字段:口令,x代表密码已经被映射到/etc/shadow文件中
    第三字段:UID
    第四字段:GID
    第五字段:描述信息(可不写)
    第六段:用户家目录所在位置
    第七段:用户所用shell类型
    
  • /etc/shadow

    以zzz:!!:18561:0:99999:7:::为例

    定位 作用
    第一列 zzz 用户名称
    第二列 !! 密码是一长串字符串,!!表示没有密码
    第三列 18561 最近一次变更密码,距1970年过了多少天
    第四列 0 密码最少使用天数,0表示无限制
    第五列 99999 密码最常使用天数,99999表示无限制
    第六列 7 密码过期预警天数
    第七列 密码过期的宽恕天数,即密码过期后未及时修改密码,用户还可使用的天数
    第八列 账号失效日期,过了这个日期账号就无法使用
    第九列 保留,没有被使用
    user05:!!:18563:0:99999:7:::
    root:$6$8Pjcu5JO$PbL98SMmUWvlEFu7iRBPVgKtRl3mRJpT3kA0nPuAkSkbKGKQOl1fVA76gW/4Py887etb/U5X8EenYm/H5DG7m1:18554:0:99999:7:::
    
    第一字段:用户名(登录名),在/etc/shadow中,用户名和/etc/passwd是相同的,这样就把passwd和shadow中用的用户记录联系在一起,这个字段是非空的。
    第二字段:密码(已被加密),如果是x,代表这个用户不能登陆到系统,这个字段是非空格的。
    第三字段:上次修改密码的时间,是1970.01.01至最近修改的时间间隔(天)
    第四字段:两次修改密码间隔最少天数;0代表禁用此功能
    第五字段:两次修改密码间隔最多天数;增强管理员管理用户口令的时效性(增强系统安全性)
    第六字段:提前多少天警告用户口令将过期
    第七字段:在口令过期之后多少天禁用此用户;即作废多少天后系统不会提示用户过期,完全禁用,系统不会再让此用户登录。
    第八字段:用户过期日期,指定用户作废的天数(1970.1.1开始的天数),为空代表永久可用
    第九字段:保留字段,供将来Linux发展之用
    
  • /etc/group 组文件

    [root@ccc ~]# head -1 /etc/group
    root: x:0:

    为例

    定位 解释
    第一列 root 用户组的名称
    第二列 x 用户组的密码占位符
    第三列 0 用户组的ID/GID
    第四列 显示该用户组作为哪个用户的附加组,用逗号分割
  • /etc/gshadow 组密码文件

    [root@ccc ~]# head -1 /etc/gshadow
    root:::

    为例

    定位 解释
    第一列 root 用户组的名称
    第二列 用户组密码,可为空或!,空或!代表没有密码
    第三列 用户组管理者,也可为空,多个管理者用逗号分隔
    第四列 显示该用户组作为哪个用户的附加组,多个用逗号分割
  • /etc/skel # 用户家目录的模板

    /home/xxx # 用户家目录

    /var/spool/mail/xxx # 用户邮箱文件

10.1.3 用户管理命令

  • 增删改查

    useradd  # 添加用户
    userdel  # 删除用户
    usermod  # 修改用户信息
    
  • 创建用户useradd

    [root@ccc ~]# useradd user01
    [root@ccc ~]# 
    
  • 查看用户id

    [root@ccc ~]# id user01  # 查看user01的用户信息
    uid=1001(user01) gid=1001(user01) 组=1001(user01)
    [root@ccc ~]# who        # 查看所有登陆的用户信息
    root     pts/1        2020-10-28 14:50 (192.168.29.2)
    [root@ccc ~]# whoami     # 查看当前登录的用户名
    root
    

    当创建一个用户时,没有指定用户的主组,将会创建一个同名的组作为用户的主组

  • 删除用户userdel

    [root@ccc ~]# userdel user01     # 删除用户user01,但不删除用户家目录和mail
    [root@ccc ~]# userdel -r user02  # -r彻底删除
    
  • useradd命令(创建用户的同时指定选项)

    # 在Linux系统中添加一个新的用户账户(useradd)
    -u  # 指定用户的UID
    -g  # 指定用户所属的主组
    -G  # 指定用户所属的附加组
    -d  # 指定用户的家目录
    -c  # 指定用户的备注信息
    -s  # 指定用户所用的shell
    -e  # 修改过期时间
    -M  # 不创建家目录
    -r  # 创建系统账户,UID处于系统用户范围内,默认就没有家目录
    
    # 示例
    # 系统中新增一个fox用户
    [root@ccc ~]# useradd fox
    # 系统中新增一个用户user01,属组为police,UID为600
    [root@ccc ~]# useradd -u 600 -g police user01
    useradd:“police”组不存在
    [root@ccc ~]# groupadd police                  # 创建组police
    [root@ccc ~]# useradd -u 600 -g police user01  # 按要求新增user01用户
    [root@ccc ~]# id user01
    uid=600(user01) gid=1007(police) 组=1007(police)
    
    # 练习
    [root@ccc ~]# useradd user01                   # 创建默认用户user01
    
    [root@ccc ~]# useradd -u 555 user02            # 指定02用户UID为555
    [root@ccc ~]# id user02
    uid=555(user02) gid=1008(user02) 组=1008(user02)
    
    [root@ccc ~]# useradd -d /home/我是03指定的 user03  # 指定03用户的家目录
    [root@ccc ~]# useradd -M user04                    # 指定04用户不创建家目录
    [root@ccc ~]# ll /home/
    总用量 0
    drwx------ 2 user01 user01 62 10月 28 19:23 user01
    drwx------ 2 user02 user02 62 10月 28 19:23 user02
    drwx------ 2 zzz    zzz    83 10月 26 16:07 zzz
    drwx------ 2 user03 user03 62 10月 28 19:24 我是03指定的
    
    [root@ccc ~]# useradd -s /sbin/nologin user05      # 指定05用户的shell
    [root@ccc ~]# tail -1 /etc/passwd
    user05:x:1004:1004::/home/user05:/sbin/nologin
    
    [root@ccc ~]# useradd -g hr user06                 # 指定06用户的主组为hr
    [root@ccc ~]# id user06
    uid=1005(user06) gid=1009(hr) 组=1009(hr)
    
    [root@ccc ~]# useradd -G sale user07               # 指定07用户的附加组为sale
    [root@ccc ~]# id user07
    uid=1006(user07) gid=1011(user07) 组=1011(user07),1010(sale)
    
  • usermod命令

    usermod参数与useradd一致

    # 常用参数
    -u  # 指定要修改用户的UID
    -g  # 指定要修改用户的主组
    -a  # 将用户添加到附加组,只可与-G组合使用
    -G  # 指定要修改用户的附加组,用逗号隔开多个附加组,-G是覆盖,-a -G是添加
    -d  # 指定要修改用户的家目录
    -c  # 指定要修改用户的注释信息
    -s  # 指定要修改用户的bash shell
    
    # 其他选项
    -m  # 将用户主目录内容移动到新位置。若当前主目录不存在则不会创建新的主目录。
    -l  # 指定要修改用户的登录名
    -L  # 指定要锁定的用户
    -U  # 指定要解锁的用户
    
  • 设定与修改密码

    passwd  		  # 默认给当前用户设定密码
    passwd 用户名  	          # root用户可以给自己以及其他用户设定密码,普通用户只能设定自己的密码
    echo "密码" | passwd --stdin 用户名  # 非交互式设定密码
    
  • 补充

    # 使用系统内置变量生成随机字符串来充当密码
    [root@ccc ~]# echo $RANDOM | md5sum | cut -c 1-10
    c0ab942940
    [root@ccc ~]# echo $RANDOM | md5sum | cut -c 1-10
    a1880bb783
    
    

10.1.4 组管理命令

  • 组管理基本命令

    groupadd  # 新建组
    groupmod  # 修改组信息
    groupdel  # 删除组
    groupwd   # 设置组密码
    newgrp    # 切换主组(临时给其他用户组的权限)
    
  • 创建组

    [root@ccc ~]# groupadd gg1          # 创建基本组,不指定GID
    [root@ccc ~]# tail -1 /etc/group
    gg1:x:1001:
    [root@ccc ~]# groupadd -g 6666 gg2  # 指定GID为6666
    [root@ccc ~]# tail -1 /etc/group
    gg2:x:6666:
    [root@ccc ~]# groupadd -r gg3       # 创建系统组,GID范围201~999
    [root@ccc ~]# tail -1 /etc/group
    gg3:x:995:
    
  • 修改组(-g:修改GID -n:修改组名称)

    [root@ccc ~]# groupadd nice          # 新建组nice
    [root@ccc ~]# tail -1 /etc/group
    nice:x:1001:
    [root@ccc ~]# groupmod -g 6666 nice  # 将组nice的GID改为6666
    [root@ccc ~]# tail -1 /etc/group
    nice:x:6666:
    [root@ccc ~]# groupmod -n NICE nice  # 将组nice名称修改为NICE
    [root@ccc ~]# tail -1 /etc/group
    NICE:x:6666:
    
  • 删除组

    # 当一个组作为某一个用户的主组时,该组不能被删除
    # 删掉用户会默认一起删掉与用户同时创立的同名主组
    
    # 创建用户cjx
    [root@ccc ~]# useradd cjx
    # 创建组liuliuliu
    [root@ccc ~]# groupadd liuliuliu 
    # 将liuliuliu作为用户cjx的附加组
    [root@ccc ~]# usermod -G liuliuliu cjx 
    # 查看用户cjx的信息,此时有liuliuliu附加组
    [root@ccc ~]# id cjx 
    uid=1001(cjx) gid=1001(cjx) 组=1001(cjx),1002(liuliuliu)
    # 删除组liuliuliu,成功
    [root@ccc ~]# groupdel liuliuliu
    # 查看用户cjx的信息,此时liuliuliu附加组被删除
    [root@ccc ~]# id cjx  
    uid=1001(cjx) gid=1001(cjx) 组=1001(cjx)
    # 无法删除组cjx,因为组cjx是用户cjx的主组
    [root@ccc ~]# groupdel cjx 
    groupdel:不能移除用户“cjx”的主组
    
  • 组成员管理

    组的分类:

    ①主组(基本组),用户只能有一个基本组,创建时可通过-g指定,未指定则创建一个与用户同名的默认组

    ②附加组,用户可以属于多个附加组,加入一个组后就拥有该组的权限

任命组长:gpasswd -A 用户 组

# gpasswd针对已存在的用户,将用户添加到组或从组中删除
# 组长可以往组里增加或删除用户
[root@ccc ~]# useradd user01
[root@ccc ~]# useradd user02
[root@ccc ~]# useradd user03
[root@ccc ~]# useradd user04
[root@ccc ~]# useradd user05
[root@ccc ~]# groupadd it
[root@ccc ~]# gpasswd -M user01,user02,user03 it  # 给010203添加附加组it
[root@ccc ~]# id user01
uid=1001(user01) gid=1001(user01) 组=1001(user01),1006(it)
[root@ccc ~]# id user02
uid=1002(user02) gid=1002(user02) 组=1002(user02),1006(it)
[root@ccc ~]# id user03
uid=1003(user03) gid=1003(user03) 组=1003(user03),1006(it)
[root@ccc ~]# gpasswd -A user01 it  # 指定01为it组组长
[root@ccc ~]# su - user01
[user01@ccc ~]$ gpasswd -a user04 it
正在将用户“user04”加入到“it”组中
[user01@ccc ~]$ exit
登出
[root@ccc ~]# id user04
uid=1004(user04) gid=1004(user04) 组=1004(user04),1006(it)
[root@ccc ~]# su - user02
[user02@ccc ~]$ gpasswd -a user05 it
gpasswd:没有权限。
[user02@ccc ~]$ exit
登出
[root@ccc ~]# gpasswd -d user04 it
正在将用户“user04”从“it”组中删除
[root@ccc ~]# id user04
uid=1004(user04) gid=1004(user04) 组=1004(user04)
[root@ccc ~]# su - user01
上一次登录:三 10月 28 16:49:23 CST 2020pts/1 上
[user01@ccc ~]$ gpasswd -d user02 it
正在将用户“user02”从“it”组中删除
[user01@ccc ~]$ gpasswd -d user03 it
正在将用户“user03”从“it”组中删除
[user01@ccc ~]$ exit
登出
[root@ccc ~]# id user02
uid=1002(user02) gid=1002(user02) 组=1002(user02)
[root@ccc ~]# id user03
uid=1003(user03) gid=1003(user03) 组=1003(user03)
[root@ccc ~]# id user04
uid=1004(user04) gid=1004(user04) 组=1004(user04)
[root@ccc ~]# id user05
uid=1005(user05) gid=1005(user05) 组=1005(user05)
[root@ccc ~]# su - user01
上一次登录:三 10月 28 16:53:48 CST 2020pts/1 上
[user01@ccc ~]$ gpasswd -d user01 it
正在将用户“user01”从“it”组中删除
[user01@ccc ~]$ exit
登出
[root@ccc ~]# id user01
uid=1001(user01) gid=1001(user01) 组=1001(user01)
	

为组设置密码,可以让非组成员的用户通过命令"newgrp 组"临时切换到组内

​ 以输入密码的方式获取该用户组的权限和特性

# 创建一个对/mnt/a.py有w权限的且有密码的组group1
[root@ccc ~]# groupadd group1
[root@ccc ~]# gpasswd group1
正在修改 group1 组的密码
新密码:
请重新输入新密码:
[root@ccc ~]# touch /mnt/a.py
[root@ccc ~]# ll /mnt/a.py 
-rw-r--r-- 1 root root 0 10月 28 21:00 /mnt/a.py
[root@ccc ~]# chown .group1 /mnt/a.py 
[root@ccc ~]# !ll
ll /mnt/a.py 
-rw-r--r-- 1 root group1 0 10月 28 21:00 /mnt/a.py
[root@ccc ~]# chmod g+w /mnt/a.py 
[root@ccc ~]# ll /mnt/a.py 
-rw-rw-r-- 1 root group1 0 10月 28 21:00 /mnt/a.py
# 切换到一个对/mnt/a.py是其他用户的zzz用户,来修改a.py
[root@ccc ~]# su - zzz
上一次登录:一 10月 26 16:07:44 CST 2020pts/1 上
[zzz@ccc ~]$ echo 520 >> /mnt/a.py 
-bash: /mnt/a.py: 权限不够
[zzz@ccc ~]$ newgrp group1  # 临时切换到组group1下,拥有其权限
密码:
[zzz@ccc ~]$ echo 520 >> /mnt/a.py 
[zzz@ccc ~]$ cat /mnt/a.py 
520
[zzz@ccc ~]$ exit  # 第一次exit是退出组group1
exit
[zzz@ccc ~]$ exit  # 第二次exit才是退出用户登录
登出
[root@ccc ~]# 
  • 给用户添加附加组的方法

    usermod -a -G 附加组1,附加组2,附加组3 用户名

    gpasswd -a 用户名 组

    gpasswd -M 用户1,用户2,用户3 组

  • 将用户从组中删除

    gpasswd -d 用户 组

10.1.5 手动创建用户

  • 准备用户信息(/etc/passwd /etc/shadow)

    [root@ccc ~]# vim /etc/passwd  # 用户名底下新增一行(内容如下)
    [root@ccc ~]# tail -1 /etc/passwd
    cjx:x:5200:5200::/home/cjx:/bin/bash
    [root@ccc ~]# openssl passwd -1 -salt 'cjxcjxcjx'  # 手动制作密码
    Password: 
    $1$cjxcjxcj$e9/G6tp0yKw7gcywyOTSZ/
    [root@ccc ~]# vim /etc/shadow  # 用户密码新增如下一行
    [root@ccc ~]# tail -1 /etc/shadow
    cjx:$1$cjxcjxcj$e9/G6tp0yKw7gcywyOTSZ/:18561:0:99999:7:::
    
  • 准备组信息(/etc/group /etc/gshadow)

    [root@ccc ~]# vim /etc/group    # 组名新增如下一行
    [root@ccc ~]# tail -1 /etc/group
    cjx:x:1001:
    [root@ccc ~]# vim /etc/gshadow  # 组密码新增如下一行
    [root@ccc ~]# tail -1 /etc/gshadow
    cjx:!::
    
  • 准备家目录(/home/xxx 模板/etc/skel)

    [root@ccc ~]# mkdir /home/cjx                    # 新建家目录文件夹
    [root@ccc ~]# cp -r /etc/skel/.[!.]* /home/cjx/  # 将模板文件复制过来
    [root@ccc ~]# chmod 700 /home/cjx/               # 更改/home/cjx权限
    [root@ccc ~]# chown -R cjx.cjx /home/cjx/        # 更改/home/cjx的属主属组
    [root@ccc ~]# ll -a /home/cjx/
    总用量 12
    drwx------  2 cjx  cjx   62 10月 28 21:26 .
    drwxr-xr-x. 4 root root  28 10月 28 21:26 ..
    -rw-r--r--  1 cjx  cjx   18 10月 28 21:26 .bash_logout
    -rw-r--r--  1 cjx  cjx  193 10月 28 21:26 .bash_profile
    -rw-r--r--  1 cjx  cjx  231 10月 28 21:26 .bashrc
    
  • 准备邮箱(/var/spool/mail/xxx)

    [root@ccc ~]# touch /var/spool/mail/cjx
    [root@ccc ~]# chmod 660 !$                         # 更改权限
    chown 660 /var/spool/mail/cjx
    [root@ccc ~]# chown cjx.mail /var/spool/mail/cjx   # 更改属主属组
    [root@ccc ~]# ll /var/spool/mail/
    总用量 0
    -rw-rw---- 1 cjx mail 0 10月 28 21:29 cjx
    

10.1.6 哈希算法

  • 作用

    高效解决问题

    算法就是用来解决一种特定的问题的

  • 定义

    可以把文本内容/一串字符计算成一串hash值

  • 常见hash算法

    md5

    sha512

    sha256

  • 特点

    1、传入的内容一样,且采用的hash算法一样,得到的hash值一定一样

    2、hash值不可逆推:不能通过hash值反推出明文

    3、hash值的长度取决于采用的hash算法,与传入内容的多少无关

    特点1+2 ---->用于加密

    特点1+3 ---->文本完整性校验

    [root@ccc test]# vim 1.py  # 1111
    [root@ccc test]# md5sum 1.py 
    1f18348f32c9a4694f16426798937ae2  1.py
    [root@ccc test]# vim 1.py   # 1 111
    [root@ccc test]# md5sum 1.py 
    43ee6032a2df7d30c56e6f1b6543d23d  1.py
    [root@ccc test]# vim 2.py   # 1111
    [root@ccc test]# md5sum 2.py 
    1f18348f32c9a4694f16426798937ae2  2.py
    

10.2 用户权限管理之基本权限rwx管理

10.2.1 基本概念

  • 权限的类型

    r --> 4

    w -->2

    x -->1

  • 权限的归类

    u -->属主

    g -->属组

    o -->其他人

  • 文件类型

    - # 文本文档

    d # 目录

    b # 设备block块

    c # 字符设备

    s # 套接字文件

    l # 软链接

10.2.2 设置

  • chmod权限修改

    加减法

    [root@ccc test]# ll c.txt 
    -rw-r--r-- 1 root root 158 10月 21 22:52 c.txt
    [root@ccc test]# chmod u+x,g+wx,o-r c.txt 
    [root@ccc test]# ll c.txt 
    -rwxrwx--- 1 root root 158 10月 21 22:52 c.txt
    

    赋值

    [root@ccc test]# ll b.txt 
    -rw-r--r-- 1 root root 0 10月 21 22:46 b.txt
    [root@ccc test]# chmod u=rw,g=wx,o=x b.txt 
    [root@ccc test]# ll b.txt 
    -rw--wx--x 1 root root 0 10月 21 22:46 b.txt
    

    数字

    [root@ccc test]# ll a.txt 
    -rw-r--r-- 1 root root 158 10月 21 22:50 a.txt
    [root@ccc test]# chmod 777 a.txt 
    [root@ccc test]# ll a.txt 
    -rwxrwxrwx 1 root root 158 10月 21 22:50 a.txt
    

    -R递归修改

    [root@ccc ~]# chmod o=x -R /a
    [root@ccc ~]# ll -d /a
    drwxr-x--x 3 root root 15 10月 29 15:21 /a
    [root@ccc ~]# ll -d /a/b/
    drwxr-x--x 3 root root 15 10月 29 15:21 /a/b/
    [root@ccc ~]# ll -d /a/b/c/
    drwxr-x--x 2 root root 20 10月 29 15:21 /a/b/c/
    [root@ccc ~]# ll /a/b/c/111.py   
    -rw-r----x 1 root root 23 10月 29 15:20 /a/b/c/111.py
    
  • chown用户与组修改

    更改文件属性

    [root@ccc ~]# chown cjx. /test/a.txt   # 只改属主时,属组随之一起改动
    [root@ccc ~]# ll /test/a.txt 
    -rwxrwxrwx 1 cjx 5200 158 10月 21 22:50 /test/a.txt
    [root@ccc ~]# chown .zzz /test/b.txt   # 只改属组,属主不改变
    [root@ccc ~]# ll /test/b.txt 
    -rw--wx--x 1 root zzz 0 10月 21 22:46 /test/b.txt
    

    更改文件夹属性(-R递归)

    [root@ccc ~]# chown -R cjx.5200 /test/
    [root@ccc ~]# ll -d /test/
    drwxr-xr-x 2 cjx 5200 99 10月 27 09:42 /test/
    [root@ccc ~]# ll /test/
    总用量 45824
    -rwxrwxrwx 1 cjx 5200      158 10月 21 22:50 a.txt
    -rw-r--r-- 1 cjx 5200 46902355 10月 27 09:42 bak.zip
    -rw--wx--x 1 cjx 5200        0 10月 21 22:46 b.txt
    -rwxrwx--- 1 cjx 5200      158 10月 21 22:52 c.txt
    -rw-r--r-- 1 cjx 5200      158 10月 21 22:52 d.txt
    -rw-r--r-- 1 cjx 5200      158 10月 21 22:52 e.txt
    -rw-r--r-- 1 cjx 5200      158 10月 21 22:49 hosts
    

10.2.3 权限的作用(文件、文件夹)

  • 针对文件(ll 文件名)

    r:读取文件的内容

    w:修改文件内容

    x:可以把文件当成一个命令/程序运行,解释型的脚本程序还需要文件的r程序

  • 针对目录(ll -d 文件名)

    r:可以浏览该目录下的子目录名和子文件名字

    w:创建、删除、移动文件

    x:可以进去该目录(只要我们要操作目录下的内容,一定要对该目录有x权限)

  • 查看文件内容的权限

    [root@ccc ~]# mkdir -p /a/b/c
    [root@ccc ~]# touch /a/b/c/d.py
    [root@ccc ~]# vim /a/b/c/d.py 
    [root@ccc ~]# ll /a/b/c/d.py 
    -rw-r--r-- 1 root root 0 10月 29 11:34 /a/b/c/d.py
    [root@ccc ~]# chmod o=- /a/b/c/d.py 
    [root@ccc ~]# su - zzz -c "cat /a/b/c/d.py"
    /usr/bin/id: cannot find name for group ID 5200
    cat: /a/b/c/d.py: 权限不够
    [root@ccc ~]# chmod o=r /a/b/c/d.py 
    [root@ccc ~]# su - zzz -c "cat /a/b/c/d.py"
    qqqqq
    
  • 想操作文件或文件夹必须要有对沿途所有文件夹的x执行权限

    想要在文件夹下添加文件要有w写权限和x执行权限

    想浏览文件夹下内容必须要有r读权限和x执行权限

    想编辑文件必须对沿途文件夹有x,对该文件有w或r

  • 对文件的执行权限

    对解释性语言的脚本,不仅需要x权限,还需要r权限

    [root@ccc ~]# mkdir -p /a/b/c
    [root@ccc ~]# vim /a/b/c/111.py
    [root@ccc ~]# ll /a/b/c/111.py 
    -rw-r--r-- 1 root root 23 10月 29 15:20 /a/b/c/111.py
    [root@ccc ~]# chmod o=x -R /a
    [root@ccc ~]# ll -d /a
    drwxr-x--x 3 root root 15 10月 29 15:21 /a
    [root@ccc ~]# ll -d /a/b/
    drwxr-x--x 3 root root 15 10月 29 15:21 /a/b/
    [root@ccc ~]# ll -d /a/b/c/
    drwxr-x--x 2 root root 20 10月 29 15:21 /a/b/c/
    [root@ccc ~]# ll /a/b/c/111.py   # 此时仅有x权限
    -rw-r----x 1 root root 23 10月 29 15:20 /a/b/c/111.py
    [root@ccc ~]# su - zzz -c "/a/b/c/111.py"
    bash: /a/b/c/111.py: 权限不够
    [root@ccc ~]# chmod o+r /a/b/c/111.py   # 此时其他用户权限为rx
    [root@ccc ~]# su - zzz -c "/a/b/c/111.py"
    nice
    666
    

10.3 用户权限管理之特殊权限

10.3.1 SUID

  • 普通用户不是root也不属于root组,所以他对/etc/shadow文件没有任何权限

    [root@ccc ~]# ll /etc/shadow
    ---------- 1 root root 666 10月 28 21:22 /etc/shadow
    
  • 但是普通用户可以用passwd命令修改密码,而修改密码都是在修改/etc/shadow文件

    [root@ccc ~]# ll `which passwd`
    -rwsr-xr-x. 1 root root 27856 4月   1 2020 /usr/bin/passwd
    
  • 原因是passwd有一个s权限

    SUID权限仅对二进制可执行的文件有效

    若执行者对该二进制可执行文件有x权限,执行者将具有该文件的所有者权限

    本执行权限仅在执行该二进制可执行文件的过程有效

  • 示例

    [root@ccc ~]# su - zzz -c "cat /etc/shadow"
    cat: /etc/shadow: 权限不够
    [root@ccc ~]# ll `which cat`
    -rwxr-xr-x. 1 root root 54080 8月  20 2019 /usr/bin/cat
    [root@ccc ~]# chmod u+s `which cat`  # 或者chmod 4755 `which cat`来增加s权限
    [root@ccc ~]# ll `which cat`
    -rwsr-xr-x. 1 root root 54080 8月  20 2019 /usr/bin/cat
    [root@ccc ~]# su - zzz -c "cat /etc/shadow"
    root:$6$8Pjcu5JO$PbL98SMmUWvlEFu7iRBPVgKtRl3mRJpT3kA0nPuAkSkbKGKQOl1fVA76gW/4Py887etb/U5X8EenYm/H5DG7m1:18554:0:99999:7:::
    bin:*:18353:0:99999:7:::
    daemon:*:18353:0:99999:7:::
    ...
    zzz:!!:18561:0:99999:7:::
    cjx:$1$cjxcjxcj$e9/G6tp0yKw7gcywyOTSZ/:18561:0:99999:7:::
    [root@ccc ~]# chmod 755 `which cat`  # 或者chmod u-s `which cat`来取消s权限
    [root@ccc ~]# ll /usr/bin/cat
    -rwxr-xr-x. 1 root root 54080 8月  20 2019 /usr/bin/cat
    

    ↓↓↓↓↓↓↓↓↓↓没有x权限,光有S权限也没用(注意此时为S非s)↓↓↓↓↓↓↓↓↓↓

    # 没有x权限,光有S权限也没用(注意此时为S非s)
    [root@ccc ~]# ll /usr/bin/cat
    -rwxr-xr-x. 1 root root 54080 8月  20 2019 /usr/bin/cat
    [root@ccc ~]# chmod a-x /usr/bin/cat  # a代表所有用户,此时取消所有用户的x执行权限
    [root@ccc ~]# ll !$
    ll /usr/bin/cat
    -rw-r--r--. 1 root root 54080 8月  20 2019 /usr/bin/cat
    [root@ccc ~]# chmod u+s /usr/bin/cat
    [root@ccc ~]# ll !$
    ll /usr/bin/cat
    -rwSr--r--. 1 root root 54080 8月  20 2019 /usr/bin/cat
    [root@ccc ~]# su - zzz -c "cat /etc/shadow"
    -bash: /bin/cat: 权限不够
    [root@ccc ~]# chmod a+x /usr/bin/cat  # 此时加上所有用户的x执行权限
    [root@ccc ~]# ll !$
    ll /usr/bin/cat
    -rwsr-xr-x. 1 root root 54080 8月  20 2019 /usr/bin/cat
    [root@ccc ~]# su - zzz -c "cat /etc/shadow"
    root:$6$8Pjcu5JO$PbL98SMmUWvlEFu7iRBPVgKtRl3mRJpT3kA0nPuAkSkbKGKQOl1fVA76gW/4Py887etb/U5X8EenYm/H5DG7m1:18554:0:99999:7:::
    bin:*:18353:0:99999:7:::
    ...
    zzz:!!:18561:0:99999:7:::
    cjx:$1$cjxcjxcj$e9/G6tp0yKw7gcywyOTSZ/:18561:0:99999:7:::
    [root@ccc ~]# chmod 755 /usr/bin/cat  # 还原环境
    [root@ccc ~]# ll !$
    ll /usr/bin/cat
    -rwxr-xr-x. 1 root root 54080 8月  20 2019 /usr/bin/cat
    

10.3.2 SGID

  • 普通做法

    当SGID作用于普通文件时于SUID类似,在执行该文件时用户获得该文件所属组的权限

  • 重要用法

    1、当一个用户对某一目录有写和执行权限时,该用户就可在该目录下建立文件

    2、如果该目录同时用SGID修饰,则该用户在此目录下建立的文件都属于这个目录所在的组

    [root@ccc ~]# mkdir /test
    [root@ccc ~]# touch /test/a.py
    [root@ccc ~]# echo 666 >> /test/a.py 
    [root@ccc ~]# chmod 000 /test/a.py
    [root@ccc ~]# ll /test/a.py
    ---------- 1 root root 0 10月 29 19:50 /test/a.py
    [root@ccc ~]# ll /usr/bin/cat
    -rwxr-xr-x. 1 root root 54080 8月  20 2019 /usr/bin/cat
    [root@ccc ~]# chmod g+s /usr/bin/cat
    [root@ccc ~]# ll -d !$
    ll -d /usr/bin/cat
    -rwxr-sr-x. 1 root root 54080 8月  20 2019 /usr/bin/cat
    [root@ccc ~]# su - zzz -c "cat /test/a.py"
    cat: /test/a.py: 权限不够
    [root@ccc ~]# chmod g+r /test/a.py 
    [root@ccc ~]# ll /test/a.py
    ----r----- 1 root root 0 10月 29 19:50 /test/a.py
    [root@ccc ~]# su - zzz -c "cat /test/a.py"
    666
    
    [root@ccc ~]# mkdir /test
    [root@ccc ~]# ll -d /test/
    drwxr-xr-x 2 root root 6 10月 29 19:31 /test/
    [root@ccc ~]# chmod g+s /test/  # 给/test目录的组加上s权限
    [root@ccc ~]# groupadd it
    [root@ccc ~]# chown .it /test/  # 为了区分,将目录/test的组改为it
    [root@ccc ~]# ll -d /test/
    drwxr-sr-x 2 root it 6 10月 29 19:31 /test/
    [root@ccc ~]# su - zzz -c "touch /test/a.py"
    touch: 无法创建"/test/a.py": 权限不够  # 要在目录下创建文件必须对该目录有w写权限
    [root@ccc ~]# chmod o+w /test/
    [root@ccc ~]# su - zzz -c "touch /test/a.py"
    [root@ccc ~]# touch /test/b.py
    [root@ccc ~]# ll /test 
    总用量 0
    -rw-rw-r-- 1 zzz  it 0 10月 29 19:36 a.py  
    -rw-r--r-- 1 root it 0 10月 29 19:37 b.py
    # 在目录被SGID修饰后,所有用户在此目录下创建的文件的组都属于这个目录所在的组
    

10.3.3 SBIT(Sticky)

  • 目前仅对目录有效,用来阻止非文件的所有者删除文件,常见的就是/tmp目录

    [root@ccc ~]# ll -d /tmp/
    drwxrwxrwt. 28 root root 4096 10月 29 09:09 /tmp/
    
  • 权限信息最后一位t表明目录被设置SBIT权限,表明自己和root才有权力删除,主要作用于共享文件夹。

  • 用o+t或1755增加权限

    ===================目录未设置SBIT权限,任意用户都可删除目录下文件======================
    
    [root@ccc ~]# mkdir /share
    [root@ccc ~]# chmod 777 /share/
    [root@ccc ~]# useradd user01
    [root@ccc ~]# useradd user02
    [root@ccc ~]# useradd user03
    [root@ccc ~]# useradd user04
    [root@ccc ~]# su - user01 -c "touch /share/1.py"  # 用户01创建1.py
    [root@ccc ~]# su - user02 -c "touch /share/2.py"  # 用户02创建2.py
    [root@ccc ~]# su - user03 -c "touch /share/3.py"  # 用户03创建3.py
    [root@ccc ~]# su - user04 -c "touch /share/4.py"  # 用户04创建4.py
    [root@ccc ~]# ll /share/
    总用量 0
    -rw-rw-r-- 1 user01 user01 0 10月 29 20:07 1.py
    -rw-rw-r-- 1 user02 user02 0 10月 29 20:08 2.py
    -rw-rw-r-- 1 user03 user03 0 10月 29 20:08 3.py
    -rw-rw-r-- 1 user04 user04 0 10月 29 20:08 4.py
    [root@ccc ~]# su - user04
    上一次登录:四 10月 29 20:08:17 CST 2020pts/1 上
    [user04@ccc ~]$ rm -rf /share/1.py   # 用户04可以删除1.py
    [user04@ccc ~]$ rm -rf /share/2.py   # 用户04可以删除2.py
    [user04@ccc ~]$ rm -rf /share/3.py   # 用户04可以删除3.py 
    [user04@ccc ~]$ rm -rf /share/4.py   # 用户04可以删除4.py
    [user04@ccc ~]$ exit
    登出
    [root@ccc ~]# ll /share/
    总用量 0
    
    ===================目录设置SBIT权限,用户只可删除自己创建的文件=======================
    
    [root@ccc ~]# chmod o+t /share/
    [root@ccc ~]# ll -d /share/
    drwxrwxrwt 2 root root 6 10月 29 20:09 /share/
    [root@ccc ~]# su - user01 -c "touch /share/1.py"
    [root@ccc ~]# su - user02 -c "touch /share/2.py"
    ^[[A[root@ccc su - user03 -c "touch /share/3.py"
    [root@ccc ~]# su - user04 -c "touch /share/4.py"
    [root@ccc ~]# su - user04
    上一次登录:四 10月 29 20:14:57 CST 2020pts/1 上
    [user04@ccc ~]$ rm -rf /share/1.py 
    rm: 无法删除"/share/1.py": 不允许的操作  # 不能删除其他用户创建的文件
    [user04@ccc ~]$ rm -rf /share/2.py 
    rm: 无法删除"/share/2.py": 不允许的操作
    [user04@ccc ~]$ rm -rf /share/3.py 
    rm: 无法删除"/share/3.py": 不允许的操作
    [user04@ccc ~]$ rm -rf /share/4.py    # 只能删除自己创建的文件
    [user04@ccc ~]$ exit
    登出
    [root@ccc ~]# rm -rf /share/*   # root用户可以删除无论谁创建的一切文件
    [root@ccc ~]# ll /share/
    总用量 0
    
    ================================必须要有x执行权限=================================
    
    [root@ccc ~]# chmod o+t /share/
    [root@ccc ~]# chmod o-x /share/
    [root@ccc ~]# ll -d /share/
    drwxrwxrwT 2 root root 6 10月 29 20:16 /share/
    [root@ccc ~]# su - user01 -c "touch /share/1.py"
    touch: 无法创建"/share/1.py": 权限不够
    

10.4 用户权限管理之umask

10.4.1 umask作用

  • 新建文件、目录的默认权限都是由umask决定的

    UID>199并且属主与属组相等的用户下,umask:0002

    ①文件664

    ②目录775

    其他用户,如root用户,umask:0022

    ①文件644

    ②目录755

  • Linux中文件默认权限666,目录默认权限777

  • 文件权限计算方法:偶数位直接相减,奇数位相减后加1

    文件起始权限值 umask值 操作 计算后文件权限
    666 022(都是偶数) 相减 644
    666 033(都是奇数) 相减,奇数位相减后+1 644
    666 325(有奇数和偶数) 相减,奇数位相减后+1 442
  • 目录权限计算方法:直接相减

    文件起始权限值 umask值 操作 计算后文件权限
    777 022 相减 755
    777 033 相减 744
    777 325 相减 452
  • umask设置的值越小,权限越大,要慎用

  • 示例

    [root@ccc ~]# umask 777
    [root@ccc ~]# umask
    0777
    [root@ccc ~]# touch 1.py
    [root@ccc ~]# mkdir 1
    [root@ccc ~]# ll 1.py 
    ---------- 1 root root 0 10月 29 20:39 1.py
    [root@ccc ~]# ll -d 1 
    d--------- 2 root root 6 10月 29 20:39 1
    

10.4.2 设置umask

  • 临时设置

    [root@ccc ~]# umask 777
    [root@ccc ~]# umask
    0777
    
  • 永久设置

    [root@ccc ~]# vim /etc/profile
    if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
        umask 002  # 表示uid>=199的默认umask值,普通用户
    else
        umask 022  # 表示uid<199的默认umask值,表示root
    fi
    

10.5 用户权限管理之高级权限

10.5.1 ACL

  • 定义

    用命令setfacl设置的ACL权限就是ugo权限的扩展,可以用来细分Linux下的权限

    可以让某一用户对某一文件具有某种权限

    ACL:(Access Control List)独立于传统的ugo的rwx权限之外的具体权限设置,可以针对单一用户、单一文件或目录来进行rwx的权限控制,对于需要特殊权限的使用状况有一定帮助。

  • 基本用法

    修改属主的权限setfacl -m u::权限 文件

    修改属组的权限setfacl -m g::权限 文件

    修改其他的权限setfacl -m o::权限 文件

    修改具体某一用户的权限setfacl -m u:用户名:权限 文件

    修改具体某一组的权限setfacl -m g:组名:权限 文件

    清除所有acl权限setfacl -b 文件

    清除某一acl权限 setfacl -x u:用户名/g:组名 文件

    特殊情况:

    1、当其他人对文件没有权限,单独设置user01有r权限,user02有w权限,且不高于mask最高权限,user01、user02执行文件会按照单独设置的权限来执行(user01-->r,user02-->w)

    2、当其他人对文件有rw权限,单独设置user01有r权限,user02有w权限,且不高于mask最高权限,user01、user02执行文件还是会按照单独设置的权限来执行(user01-->r,user02-->w)

    3、当其他人对文件有rw权限,单独设置user01有r权限,user02有w权限,但高于mask最高权限,user01、user02执行文件会按照其他人权限来执行(user01-->rw,user02-->rw)

    =========================修改具体某一用户的权限==========================
    [root@ccc ~]# echo 111 >> /a.py
    [root@ccc ~]# chmod o=- /a.py   # 将其他用户的权限去掉,制造实验环境
    [root@ccc ~]# ll /a.py 
    -rw-r----- 1 root root 4 10月 30 09:30 /a.py
    [root@ccc ~]# getfacl /a.py 
    getfacl: Removing leading '/' from absolute path names
    # file: a.py
    # owner: root
    # group: root
    user::rw-
    group::r--
    other::---
    [root@ccc ~]# setfacl -m u:zzz:r /a.py   # 单独给其他用户zzz加上文件/a.py的r读权限
    [root@ccc ~]# getfacl /a.py 
    getfacl: Removing leading '/' from absolute path names
    # file: a.py
    # owner: root
    # group: root
    user::rw-
    user:zzz:r--
    group::r--
    mask::r--
    other::---
    [root@ccc ~]# useradd cjx
    [root@ccc ~]# setfacl -m u:cjx:w /a.py   # 单独给其他用户cjx加上文件/a.py的w写权限
    [root@ccc ~]# su - zzz -c "cat /a.py"
    111
    [root@ccc ~]# su - cjx -c "echo 222 >> /a.py"
    [root@ccc ~]# su - zzz -c "cat /a.py"
    111
    222
    
    ==========================修改具体某一组的权限===========================
    [root@ccc ~]# setfacl -m g:nice:r /a.py
    setfacl: Option -m: 无效的参数 near character 3  # 设置的组必须存在
    [root@ccc ~]# groupadd nice
    [root@ccc ~]# setfacl -m g:nice:r /a.py  # 单独给组nice加上文件/a.py的r读权限
    [root@ccc ~]# setfacl -m g::- /a.py  # 将文件/a.py的主组权限全部拿掉,制作环境
    [root@ccc ~]# getfacl /a.py
    getfacl: Removing leading '/' from absolute path names
    # file: a.py
    # owner: root
    # group: root
    user::rw-
    user:zzz:r--
    user:cjx:-w-
    group::---
    group:nice:r--
    mask::rw-
    other::---
    [root@ccc ~]# useradd user01
    [root@ccc ~]# useradd user02
    [root@ccc ~]# gpasswd -a user01 root
    正在将用户“user01”加入到“root”组中
    [root@ccc ~]# gpasswd -a user02 nice
    正在将用户“user02”加入到“nice”组中
    [root@ccc ~]# su - user01 -c "cat /a.py"  # 主组root的用户user01没有任何权限
    cat: /a.py: 权限不够
    [root@ccc ~]# su - user02 -c "cat /a.py"  # 组nice的用户user02有读权限
    111
    222
    333
    
    ============================mask值的作用===============================
    [root@ccc ~]# chmod g=- /a.py   # chmod改权限会导致一系列问题,应用setfacl修改
    [root@ccc ~]# ll /a.py 
    -rw-------+ 1 root root 8 10月 30 09:38 /a.py
    [root@ccc ~]# getfacl /a.py 
    getfacl: Removing leading '/' from absolute path names
    # file: a.py
    # owner: root
    # group: root
    user::rw-
    user:zzz:r--			#effective:---
    user:cjx:-w-			#effective:---
    group::r--			#effective:---
    mask::---
    other::---
    [root@ccc ~]# su - zzz -c "cat /a.py"
    cat: /a.py: 权限不够
    [root@ccc ~]# su - cjx -c "echo 333 >> /a.py"
    -bash: /a.py: 权限不够
    [root@ccc ~]# setfacl -m m:rwx /a.py   # mask决定能达到的最高权限
    [root@ccc ~]# getfacl /a.py
    getfacl: Removing leading '/' from absolute path names
    # file: a.py
    # owner: root
    # group: root
    user::rw-
    user:zzz:r--
    user:cjx:-w-
    group::r--
    mask::rwx
    other::---
    [root@ccc ~]# su - cjx -c "echo 333 >> /a.py"
    [root@ccc ~]# 
    [root@ccc ~]# su - zzz -c "cat /a.py"
    111
    222
    333
    
  • default继承

    仅改用户对某文件夹的权限不会作用到以后创建的子文件或子文件夹

    要用d赋予继承权限

    注:仅作用到之后创建的文件,对已经创建的不做修改

    [root@ccc ~]# mkdir /test
    [root@ccc ~]# setfacl -m u:cjx:rwx /test/  # 仅改文件夹ACL
    [root@ccc ~]# getfacl /test
    getfacl: Removing leading '/' from absolute path names
    # file: test
    # owner: root
    # group: root
    user::rwx
    user:cjx:rwx  # 注意此行
    group::r-x
    mask::rwx
    other::r-x
    [root@ccc ~]# mkdir /test/aaa
    [root@ccc ~]# getfacl /test/aaa  # 可以看到对创建的文件没有继承ACL
    getfacl: Removing leading '/' from absolute path names
    # file: test/aaa
    # owner: root
    # group: root
    user::rwx
    group::r-x
    other::r-x
    
    [root@ccc ~]# setfacl -m d:u:cjx:rwx /test  # d赋予继承权限
    [root@ccc ~]# mkdir /test/bbb
    [root@ccc ~]# touch /test/1.py
    [root@ccc ~]# getfacl /test/bbb/  # 可以看到新创建的目录有ACL
    getfacl: Removing leading '/' from absolute path names
    # file: test/bbb/
    # owner: root
    # group: root
    user::rwx
    user:cjx:rwx
    group::r-x
    mask::rwx
    other::r-x
    default:user::rwx
    default:user:cjx:rwx
    default:group::r-x
    default:mask::rwx
    default:other::r-x
    [root@ccc ~]# getfacl /test/1.py  # 新建的文件也有ACL
    getfacl: Removing leading '/' from absolute path names
    # file: test/1.py
    # owner: root
    # group: root
    user::rw-
    user:cjx:rwx			#effective:rw-
    group::r-x			#effective:r--
    mask::rw-
    other::r--
    
    [root@ccc ~]# getfacl /test/aaa  # 对之前创建的目录或文件不做修改
    getfacl: Removing leading '/' from absolute path names
    # file: test/aaa
    # owner: root
    # group: root
    user::rwx
    group::r-x
    other::r-x
    

10.5.2 特殊属性

  • +a # 只允许追加

    +i # 禁止任何修改

    +A # 不更改访问时间

    去掉的方法:

    -a

    -i

    -A

    [root@ccc test]# touch {1..3}.txt
    [root@ccc test]# chmod 000 {1..3}.txt
    [root@ccc test]# lsattr /test/  # 查看文件属性
    ---------------- /test/1.txt
    ---------------- /test/2.txt
    ---------------- /test/3.txt
    [root@ccc test]# chattr +a 1.txt   # 只允许追加
    [root@ccc test]# chattr +i 1.txt   #
    [root@ccc test]# lsattr 1.txt 
    ----ia---------- 1.txt
    [root@ccc test]# chattr -i 1.txt   # 
    [root@ccc test]# lsattr 1.txt 
    -----a---------- 1.txt
    [root@ccc test]# chattr +i 2.txt   # 禁止任何修改
    [root@ccc test]# chattr +A 3.txt   # 不更改访问时间
    [root@ccc test]# lsattr /test/
    -----a---------- /test/1.txt
    ----i----------- /test/2.txt
    -------A-------- /test/3.txt
    [root@ccc test]# echo 111 >> 1.txt 
    [root@ccc test]# echo 111 >> 1.txt 
    [root@ccc test]# cat /test/1.txt 
    111
    111
    [root@ccc test]# rm -rf /test/1.txt 
    rm: 无法删除"/test/1.txt": 不允许的操作
    [root@ccc test]# echo 222 > 1.txt 
    -bash: 1.txt: 不允许的操作
    [root@ccc test]# echo 111 >> 2.txt 
    -bash: 2.txt: 权限不够
    [root@ccc test]# echo 222 > 2.txt 
    -bash: 2.txt: 权限不够
    [root@ccc test]# rm -rf /test/2.txt 
    rm: 无法删除"/test/2.txt": 不允许的操作
    [root@ccc test]# stat 3.txt 
      文件:"3.txt"
      大小:0         	块:0          IO 块:4096   普通空文件
    设备:803h/2051d	Inode:4831802     硬链接:1
    权限:(0000/----------)  Uid:(    0/    root)   Gid:(    0/    root)
    最近访问:2020-10-30 11:29:51.386353314 +0800
    最近更改:2020-10-30 11:29:51.386353314 +0800
    最近改动:2020-10-30 11:31:51.742208197 +0800
    创建时间:-
    [root@ccc test]# cat 3.txt 
    [root@ccc test]# stat 3.txt 
      文件:"3.txt"
      大小:0         	块:0          IO 块:4096   普通空文件
    设备:803h/2051d	Inode:4831802     硬链接:1
    权限:(0000/----------)  Uid:(    0/    root)   Gid:(    0/    root)
    最近访问:2020-10-30 11:29:51.386353314 +0800
    最近更改:2020-10-30 11:29:51.386353314 +0800
    最近改动:2020-10-30 11:31:51.742208197 +0800
    创建时间:-
    

10.6 su与sudo

root拥有所有权限 -------->sudo------分配部分管理权限 ------------->普通用户

普通用户在经过sudo授权后,执行命令时必须加上sudo前缀,如果需要输入密码,输入的是用户的密码

10.6.1 su

  • 切换用户身份:从一个用户切换到另一个用户

  • Linux中shell分为两种级别:

    登陆级别shell:

    输入账号密码登陆进来

    su - 用户名(管理员root切换到普通用户无需输入密码,反之需要)

    非登录级别shell:

    su 用户名

  • 登陆级别不同,加载的配置文件不一样

    登陆级别shell:/etc/profile--->/etc/profile.d/*.sh--->/.bash_profile--->/.bashrc--->/etc/bashrc

    非登录级别shell:~/.bashrc--->/etc/bashrc--->/etc/profile.d/*.sh

    如果想针对所有用户,以及登陆与非登录shell设置统一的配置,应写到/etc/bashrc,后加export PATH

    生效方式:①source /etc/bashrc ②重启

    /etc/profile---------------------------->登陆级别的所有用户

  • 切换身份执行命令

    su - 用户名 -c "命令"

10.6.2 sudo

  • 提权:不切换用户,即用户身份不变,但是可以获取root的部分权限

  • 在管理员下修改配置文件/etc/sudoers来分配

    vim /etc/sudoers # 风险高

    visudo # 不用接文件路径

    格式:用户 主机ip或主机名=(转换的用户身份) 管理命令

    如: ccc ALL=(ALL) /usr/sbin/ifconfig

    ​ ccc ALL=(ALL) NOPASSWD:/usr/ifconfig

    ​ ccc ALL=(ALL) NOPASsWD:命令的别名

    ​ ccc ALL=(ALL) ALL,!/usr/bin/vim /test/a.txt # 以root身份运行所有除了/test/a.txt

    ​ ALL代表的是服务端的IP地址,与客户端无关

    格式:组 主机ip或主机名=(转换的用户身份) 管理命令

    如:%devops ALL=(ALL) /usr/sbin/ifconfig # 系统里建组,将用户加进去

    ​ ADMINS ALL=(ALL) NOPASSWD:/usr/ifconfig # 别名,不用将用户加组

  • visudo -c # 检查配置是否正确

  • sudo -l # 查看权限

10.6.3 总结

  • su

    ①特点:直接切换到root账号下进行操作,输入的是root的密码

    ②优点:简单粗暴

    ③缺点:root密码泄露,普通用户获取了所有管理员权限

  • sudo

    ①特点:在当前普通用户下进行操作,不需要切换到root账号下,执行命令格式为:sudo 命令,输入的是普通用户自己的密码

    ②优点:root密码没有泄露,普通用户有部分root权限

    ③缺点:相对复杂

posted @ 2020-11-19 12:00  drrug  阅读(709)  评论(0编辑  收藏  举报