评论

收藏

[Linux] Linux云计算集群架构师->第六章 Centos8 用户管理

服务系统 服务系统 发布于:2021-06-30 17:05 | 阅读数:442 | 评论:0

第六章 Centos8 用户管理

  (上课时间2021-6-21,笔记整理时间2021-06-25)
本节所讲内容:  6.1 用户和组的相关配置文件
  6.2 管理用户和组
6.3 实战:进入 centos8 紧急模式恢复 root 密码  ​        用户一般来说是指系统的使用者,使用者可以使用这些名称来登录使用计算机,除了使用者之外,一些系统服务也需要含有部分特权的用户账户运行;因此出于安全考虑,用户管理应运而生,它加以明确限制各个用户账户的权限,root 在计算机中用拥有至高特权,所以一般只作管理用,非特权用户可以通过SU 或 SUDO 程序来临时获得特权。
  ​        Linux 系统通过用户和用户组实现访问控制,包括对文件访问、设备使用的控制。
  1 人可以拥有很多账户,只不是彼此名称不同,比如 root 名称已经占用就不能再用了,此外,任意用户可能从属某个用户组,此用户可以加入某些已经存在的组来获得该组的特权。
  每 1 个文件的属性中都有一个文件拥有者和所属组。另外,还有三种类型的访问权限:读(read)、写(write)、运行(execute)。我们可以针对文件的属主、属组、而设置相应的访问权限。再次,我们可以通过 ll 或 stat 命令查询文件属主、属组和权限。
[root@Centos83 ~]# ll | tail -4
-rw-r--r--. 1 root root 2735 6月  20 15:36 a.txt
-rw-r--r--. 1 root root 2742 6月  20 16:45 mini.txt
-rw-------. 1 root root 4269 6月  20 15:45 sshd
drwxr-xr-x. 2 root root   22 6月  20 17:08 test    
[root@Centos83 ~]# stat mini.txt         # 查询文件属主、属组和权限
  文件:mini.txt
  大小:2742      块:8      IO 块:4096   普通文件
设备:fd00h/64768d  Inode:134444908   硬链接:1
权限:(0644/-rw-r--r--)  Uid:(  0/  root)   Gid:(  0/  root)
6.1 用户账号

6.1.1 用户的分类

  Linux 用户三种角色:超级用户,普通用户,虚拟用户。
  超级用户: root 拥有对系统的最高的管理权限,UID=0
  普通用户:
  系统用户 UID 范围:1-999(centos7/8 版本) 1-499(centos6 版本)
  本地用户 UID 范围:1000+(centos7/8 版本) 500+(centos6 版本)
  UID:即每个用户的身份标示,类似于每个人的身份证号码.
  虚拟用户:伪用户 一般不会用来登录系统的,它主要是用于维持某个服务的正常运行.如:ftp,apache
  用户基本信息保存位置:/etc/passwd
  下图是用户和组的关系:
  一对一:一个用户可以存在一个组中; 一对多:一个用户可以存在多个组中
  多对一:多个用户可以存在一个组中; 多对多:多个用户可以存在多个组中

DSC0000.png
6.1.2 配置文件

  | 名 称            | 文件路径    | 说 明                                                        |
  | ---------------- | ----------- | ------------------------------------------------------------ |
  | 用户配置文件     | /etc/passwd | 记录了每个用户的一些基本属性,并且对所有用户可读,每一行记录对应一个用户 |
  | 用户组文件       | /etc/group  | 用户组信息存放文件,并且组名不能重复                         |
  | 用户密码信息文件 | /etc/shadow | 因为 passwd 文件对所有用户是可读的,为安全起见把密码从 passwd 中分离出来放入这个单独的文件,该文件只有 root 用户拥有读权限,从而保证密码安全性 |

6.2 用户管理

6.2.1 用户命令

  命令:useradd
  useradd -d -u “UID” -g "初始组" -G "附加组" -s "登陆的 shell” 用户
  -u: 指定 uid
  -d: -d 用户主目录路径, 可以指定用户家目录
  -M: 不创建用户的家目录
  -g:设置用户初始组的名称或数字 ID;该组必须是存在的;如果没有设置该选项,useradd 会根据/etc/login.defs 文件中的 USERGROUPS_ENAB 环境变量进行设置。默认 USERGROUPS_ENAB yes会用和用户名相同的名字创建群组.
  -G:用户要加入的附加组列表;使用逗号分隔多个组,不要添加空格;如果不设置,用户仅仅加入初始组。(一个用户只允许有一个主组,可以有多个附属组)
  -s:用户默认登录 shell 的路径;启动过程结束后,默认启动的登录 shell 在此处设定;请确保使用的 shell 已经安装,默认是 Bash。有时候需要禁止某些用户执行登录动作,例如用来执行系统服务的用户。将 shell 设置成 /sbin/nologin 就可以禁止用户登录。

6.2.2 添加登录用户

  例:添加一个名为 harry 的用户,并使用 bash 作为登录的 shell
[root@Centos83 ~]# useradd harry        # 创建用户harry
[root@Centos83 ~]# tail -1 /etc/passwd      # 查看/etc/passwd文件最后一行
harry:x:1001:1001::/home/harry:/bin/bash
  ​        说明:此命令会自动创建 harry 组,并成为 harry 用户的默认主组,同时默认的登录 shell 是 bash用户帐户的全部信息被保存在/etc/passwd 文件。这个文件以如下格式保存了每一个系统帐户的所有信息 (字段以“:”分割)

DSC0001.png
  harry:x:1001:1001::/home/harry:/bin/bash     #每行含意如下:
  harry:用户名
  x:密码占位符
  1001:用户的 UID,使用正整数表示,范围可以是 0-65535
  1001:用户所属组的 GID,它都是用数字来表示的
  用户描述信息:对用户的功能或其它来进行一个简要的描述,此字段会出现在登录用户界面,可以通过点击输入对应密码进行登录,却并不能手动输入此字段代替用户名。
  /home/harry:用户主目录(shell 命令提示符中用“~”表示)
  /bin/bash:用户登录系统后使用的 shell
[root@Centos83 ~]# cat /etc/shells             # 查看系统中,支持哪些 shell
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
[root@Centos83 ~]# yum install zsh -y          # yum安装 zsh
[root@Centos83 ~]# zsh                   # 执行 zsh
[root@Centos83]~# cd /etc/sysconfig/network-scripts   
[root@Centos83]/etc/sysconfig/network-scripts#       # zsh运行结果,zsh会显示绝对路径的
6.2.3 指定用户 UID :

  useradd -u 用户 ID
[root@Centos83]~# useradd -u 2000 oracle        # 创建用户 oracle 指定uid为2000
[root@Centos83]~# id oracle                # 查看 oracle 用户UID和GID 组ID
uid=2000(oracle) gid=2000(oracle) 组=2000(oracle)
[root@Centos83]~# tail -1 /etc/passwd          # 查看/etc/passwd最后一行内容
oracle:x:2000:2000::/home/oracle:/bin/bash
[root@Centos83]~# ls -a /home/oracle 
.  ..  .bash_logout  .bash_profile  .bashrc  .mozilla  .zshrc
6.2.4 指定用户主目录
[root@Centos83]~# useradd -d /opt/ftp ftpuser      # 创建用户 oracle 指定uid为2000
[root@Centos83]~# ls -a /opt/ftp             # 查看 /opt/ftp 文件及隐藏文件
.  ..  .bash_logout  .bash_profile  .bashrc  .mozilla  .zshrc
[root@Centos83]~# tail -1 /etc/passwd          # 查看/etc/passwd最后一行内容
ftpuser:x:2001:2001::/opt/ftp:/bin/bash          # ftpuser主目录已经被指定为/opt/ftp
6.2.6 指定用户的附加组

  我们也可以把这个附属组称为补充组,用户可以有 0 个或多个附加组的成员
  如果一个组有多个成员,我们是可以在/etc/group 文件中最后一个字段看到的
[root@Centos83]~# useradd -G lenovo,oracle,root think  # 创建think用户并让lenovo,oracle,root加入think组
[root@Centos83]~# id think
uid=2003(think) gid=2003(think) 组=2003(think),2000(oracle),2002(lenovo),0(root)
[root@Centos83]~# cat /etc/group            # 查看用户组文件内容
root:x:0:think
………………中间部分内容省略………………
harry:x:1001:
oracle:x:2000:think
ftpuser:x:2001:
lenovo:x:2002:think
think:x:2003:
6.2.7 创建用户的另外一个命令
[root@Centos83]~# adduser thinkplus        # 创建thinkplus用户并让 
[root@Centos83]~# id thinkplus          # 查看thinkplus用户UID和GID 组ID
uid=2004(thinkplus) gid=2004(thinkplus) 组=2004(thinkplus)
[root@Centos83]~# which adduser          # 会在环境变量$PATH设置的目录里查找符合条件的文件
/usr/sbin/adduser
[root@Centos83]~# ll /usr/sbin/adduser      # adduser 是 useradd 的软链接
lrwxrwxrwx. 1 root root 7 8月  13 2020 /usr/sbin/adduser -> useradd
6.2.8 删除用户

  语法: userdel [options] 用户名
选项:-r 删除的时候,会同时删除用户的家目录和/var/mail 下的目录
[root@Centos83]~# userdel harry          # 删除用户harry
6.2.9 密码的文件
[root@Centos83]~# head -1 /etc/shadow
root:$6$mhuZmOQJAtrnoSfk$b52wXamQu2NE0bpEbZ9pcP.wkZLwAWD5tjG4LNqF/u3lMMaoPP85mMqcftjk1/u42yyyfNzvr/3PfcKDfZcKB0::0:99999:7:::
DSC0002.png
  格式如下:
  name 登录名称,这个必须是系统中的有效账户名
  password 已加密密码,分为三个部分,第一部分是表示使用哪种哈希算法;第二部分是用于加密哈希的 salt;第三部分是已加密的哈希
  哈希算法:$1 表示 MD5 ; $6 表示 SHA512 ; $5 表示 SHA256
  查看帮助说明: man 5 查看文件格式,man 3 查看库函数
  man 5 passwd
  man 5 shadow
  man 5 group
  lastchange 最近一次更改密码的日期,以距离 1970/1/1 的天数表示
  min-age 不能更改密码的最少天数,最近更改过后几天才可以更改;如果为 0 表示“最短期限要求”
  maxage 密码过期时间,必须更改密码前的最多天数
  warning 密码即将到期的警告期,以天数表示,0 表示“不提供警告”
  inactive 宽限天数,密码到期后
  expire 账号过期时间,以距离 1970/1/1 的天数计算 (千年虫)
  blank 预留字段
给用户添加密码:
[root@Centos83]~# passwd oracle             #交互式修改密码
Changing password for user oracle.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@Centos83]~# echo lenovo | passwd --stdin lenovo
passwd: all authentication tokens updated successfully.
  互动: 两个用户的密码都是 123456 一样的, 那么 shadow 中加密的 hash 值一样吗?
  答: 不一样。 因为 salt(撒盐加密)不一样
  把 2 段加密的互换还能登陆吗?salt 什么时候指定的?
  答:可以登录,salt 在加密过程中随机生成,保护了加密密码的机密性。

6.2.10 添加用户规则

  控制添加用户规则文件的两个文件:/etc/default/useradd 和 /etc/login.defs
[root@Centos83]~# egrep -v "^$|^#" /etc/login.defs
MAIL_DIR  /var/spool/mail
UMASK    022
HOME_MODE  0700
PASS_MAX_DAYS  99999      #用户密码最长使用时间,多少天后会有提醒
PASS_MIN_DAYS  0        #用户密码最短使用时间,意思是多少天内不能修改密码,0 为不限制
PASS_MIN_LEN  5        #用户密码最小长度
PASS_WARN_AGE  7        #密码过期后会提醒多少天,这些天内还没有修改密码的用户,账户会被冻结
UID_MIN          1000  #用户 ID 开始的数字
UID_MAX         60000  #用户 ID 结束的数字
SYS_UID_MIN         201
SYS_UID_MAX         999
GID_MIN          1000
GID_MAX         60000  #组 ID 结束的数字
SYS_GID_MIN         201
SYS_GID_MAX         999
CREATE_HOME  yes          #是否为用户建立 home 目录
USERGROUPS_ENAB yes
ENCRYPT_METHOD SHA512      #shadow 文件的加密算法
[root@Centos83]~# cat /etc/default/useradd 
# useradd defaults file
GROUP=100            #新创建用户时默认初始组的 GID 号(公共组),现在使用的都是私有组机制(根据创建用户名称创建组)
HOME=/home            # /home 表示用户家目录的位置        
INACTIVE=-1            #是否启用帐号过期。passwd 文件中第7列,-1 表示不启用
EXPIRE=              #帐号终止日期 shadow 中第 8 字段,你可以直接设定账号在哪个日期后就直接失效,而不理会密码的问题。
SHELL=/bin/bash          #默认 shell 使用哪个
SKEL=/etc/skel          #模板目录
CREATE_MAIL_SPOOL=yes      #是否创建邮箱文件
  命令:chage 了解一下, 后期记不住时,可以直接 vim 修改 shadow 文件
  -m:密码可更改的最小天数。为 0 时代表任何时候都可以更改密码
  -M:密码保持有效的最大天数
  -W:用户密码到期前,提前收到警告信息的天数
  -E:帐号到期的日期。过了这天,此帐号将不可用
  -d:上一次更改的日期,为 0 表示强制在下次登录时更新密码
  例:修改用户 lenovo密码信息:让这个用户 lenovo首次登录系统时必须更改其密码
[root@Centos83]~# chage -d 0 lenovo
[root@Centos83]~#ssh lenovo@10.170.80.180
...
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.170.80.180' (ECDSA) to the list of known hosts.
lenovo@10.170.80.180's password: 123456
You must change your password now and login again!       #提示必须改密码
更改用户lenovo的密码 。
  互动: 两个用户的 UID 可以一样吗?
[root@Centos83]~# vim /etc/passwd      # 把 lenovo 的 UID 改成 0
[root@Centos83]~# id lenovo
uid=0(root) gid=0(root) 组=0(root)      # 用户 lenovo 已经变成超级用户了
[root@Centos83]~# su lenovo
[root@Centos83 root]# id lenovo
uid=0(root) gid=0(root) 组=0(root)
  查看用户相关命令:
[root@Centos83 ~]# id        #用户和组的信息
uid=0(root) gid=0(root) 组=0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@Centos83 ~]# whoami      #查看当前有效用户名
root
[root@Centos83 ~]# who        #显示目前登入系统的用户信息。
root   pts/0    2021-06-25 10:30 (10.170.80.200)
root   pts/1    2021-06-25 10:47 (10.170.80.200)
[root@Centos83 ~]# w        # w 命令用于显示已经登陆系统的用户列表   
 11:25:12 up 59 min,  2 users,  load average: 0.00, 0.00, 0.00
USER   TTY    FROM       LOGIN@   IDLE   JCPU   PCPU WHAT
root   pts/0  10.170.80.200  10:30   43:52   0.15s  0.15s -bash
root   pts/1  10.170.80.200  10:47  0.00s  0.64s  0.05s w
[root@Centos83 ~]# users      #用于显示当前登录系统的所有用户的用户列表
root root
  ​

6.2.11 修改用户信息

  语法:usermod 【参数】用户名
常用参数:  -u UID
-d 宿主目录  -m 选项会自动创建新目录并且移内容到新目录里面
-g 起始组 #只能有一个  -G 附加组 #可以有多个
-s 登录 shell  -L 锁定
修改uid:
[root@Centos83]~# id oracle
uid=2000(oracle) gid=2000(oracle) 组=2000(oracle)
[root@Centos83]~# usermod -u 1111 oracle
[root@Centos83]~# id oracle
uid=1111(oracle) gid=2000(oracle) 组=2000(oracle)
修改shell:
[root@Centos83]~# usermod -s /sbin/nologin oracle
[root@Centos83]~# grep oracle /etc/passwd
oracle:x:1111:2000::/home/oracle:/sbin/nologin
更改用户主目录:
[root@Centos83]~# usermod -m -d /opt/think think   #-m 选项会自动创建新目录并且移内容到新目录里面
添加用户描述信息:
[root@Centos83]~# usermod -c "hell Linux" lenovo
[root@Centos83]~# grep lenovo /etc/passwd
lenovo:x:0:2002:hell Linux:/home/lenovo:/bin/bash
  总结:如果你记不住命令, 那么直接改 vim /etc/passwd 一样的

6.2.12 解决模板文件被删之后显示不正常的问题
[root@Centos83]~# useradd plume && echo 123456 | passwd --stdin plume   #创建用户plume,成功后给plume创建密码
[root@Centos83]~# echo 123456 |passwd --stdin plume           #给plume创建密码
[root@Centos83]~# ls -a /home/plume
.  ..  .bash_logout  .bash_profile  .bashrc  .mozilla  .zshrc
[root@Centos83]~# rm -rf /home/plume/.bash*                #删除模板文件
[root@Centos83]~# ls -a /home/plume  
[root@Centos83]~# su plume
bash-4.4$           #在 centos6 或 7 会出现这个不完整的 shell 提示符,如何处理?
bash-4.4$exit        
[root@Centos83]~# cp /etc/skel/.bash* /home/plume/      # 拷贝模版文件到用户目录下
[root@Centos83]~# chown plume:plume /home/plume/.bash*    # 给权限
[root@Centos83]~# su plume                  # 再次切换用户
[plume@Centos83 root]$                     #正常
[plume@Centos83 root]$
6.3 实战:进入紧急模式恢复 root 密码

6.3.1 实战场景找回 centos8 系统中 root 密码

  公司一台 Centos Stream系统,忘记 root 密码了,需要你快速把 root 密码修改为 dba@root,找回root 身份。
  实验环境:开启一台  Centos Stream 系统

DSC0003.png
开机时按任意键,即可进入此界面,光标选择第一条,e表示进入编辑模式

在 linux 行尾添加 rd.break

进入编辑模式后会看到这些信息,默认情况,都是以 ro 只读方式引导系统进入

  改完之后,按下 Ctrl+X 进入紧急模式

DSC0004.png
  原理:打断系统正常启动,然后进一个 bash 环境,系统并没有真正的启动

DSC0005.png
  emergency [iˈmɜ:dʒənsi] 紧急

DSC0006.png
  发现是只读的。需要重新以 rw 方式挂载/sysroot 。
  mount -o remount,rw /sysroot #重新挂载,使其拥有读写权限

DSC0007.png
  换根,修改密码
  chroot 命令用来在指定的根目录下运行指令
  chroot,即 change root directory (更改 root 目录)。在 linux 系统中,系统默认的目录结构都是以/,即是以根 (root) 开始的。而在使用 chroot 之后,系统的目录结构将以指定的位置作为/位置
  在经过 chroot 命令之后,系统读取到的目录和文件将不在是旧系统根下的而是新根下(即被指定的新的位置)的目录结构和文件。

DSC0008.png
  如果系统安装的中文版显示乱码,输入:LANG=en_US.UTF-8 #修改语言环境为英文,这样显示乱码。
  passwd #开始修改密码

DSC0009.png
  注:如果系统的 selinux 开启着,则需要执行命令: touch /.autorelabel 以更新系统信息,否
  则重启之后密码修改不会生效,先退出当前根,reboot 重启系统。我们已经关闭 selinux,不需要创建
  /.autorelabel 。

DSC00010.png
  扩展:创建此文件:开启 selinux 的情况下需要创建此文件,因为在 rd.break 环境下 SELinux 是不生效的。在不生效的情况下我们修改了用户的密码,也就是修改了/etc/shadow 文件,所以密码文件的安全上下文的特性会被取消。如果没有让系统在启动时自动恢复 SELinux 的安全上下文,系统会报错“无法登录”,所以 SELinux 在 Enforcing 模式下的时候(如在 disabled 模式下则不用),在根目录下touch 隐藏文件 autorelabel 会让系统在重启时以 SELinux 默认类型重新写入 SELinux 安全上下文。

6.3.2 实战场景找回 centos7 系统中 root 密码

  公司一台 Centos7 系统,忘记 root 密码了,需要你快速把 root 密码修改为 dba@root,找回 root身份。
  实验环境:开启一台 Centos7 系统
  首先重启,按↑↓键,进入如下界面,选择第一项,按下 e 键进行编辑

DSC00011.png
进入编辑模式后会看到这些信息。找到“Linux16”开头的行,在 Linux16 的行尾空格后添加“rd.break“

  
DSC00012.png


DSC00013.png
  这里改成 rw,则不需要重新挂载,直接以读写挂载
  改完之后,按下 Ctrl+X 进入紧急模式
  原理:打断系统正常启动,然后进一个 bash 环境,系统并没有真正的启动

DSC00014.png
  emergency [iˈmɜ:dʒənsi] 紧急
  查看系统根挂载情况:

DSC00015.png
  如果是只读的。需要重新以 rw 方式挂载/sysroot ,刚才进入添加rd.break,时已经修改了rw,就不用重新挂载了。
  如果是只读,用 mount -o remount,rw /sysroot     #重新挂载,使其拥有读写权限

DSC00016.png
  换根,修改密码
  chroot 命令用来在指定的根目录下运行指令
  chroot,即 change root directory (更改 root 目录)。在 linux 系统中,系统默认的目录结构都是以/,即是以根 (root) 开始的。而在使用 chroot 之后,系统的目录结构将以指定的位置作为/位置
  在经过 chroot 命令之后,系统读取到的目录和文件将不在是旧系统根下的而是新根下(即被指定的新的位置)的目录结构和文件。
  若安装操作系统时选择的是中文版,输入:LANG=en_US.UTF-8 #修改语言环境为英文,就可以解决显示乱码。

DSC00017.png
  passwd #开始修改密码

DSC00018.png
  如果系统的 selinux 开启着,则需要执行命令: touch /.autorelabel 以更新系统信息让SELinux 生效,否则重启之后密码修改不会生效,先退出当前根,reboot 重启系统。我们已经关闭selinux,不需要创建/.autorelabel 。

DSC00019.png
  ​        创建此文件:开启 selinux 的情况下需要创建此文件,因为在 rd.break 环境下 SELinux 是不生效的。在不生效的情况下我们修改了用户的密码,也就是修改了/etc/shadow 文件,所以密码文件的安全上下文的特性会被取消。如果没有让系统在启动时自动恢复 SELinux 的安全上下文,系统会报错“无法登录”,所以 SELinux 在 Enforcing 模式下的时候(如在 disabled 模式下则不用),在根目录下touch 隐藏文件 autorelabel 会让系统在重启时以 SELinux 默认类型重新写入 SELinux 安全上下文。

6.4扩展内容(了解即可):SELinux

  SELinux( Security Enhanced Linux 安全性增强的 Linux),由美国国家安全局 NSA(National
  Security Agency)开发,构建与 Kernel 之上,拥有灵活的强制性访问控制结构,主要用在提高Linux 的安全性,提供强健的安全保证,可以防御未知***。
  SELinux 是用于确定哪个进程可以访问哪些文件、目录和端口的一组安全规则。每个文件、进程、目录和端口都具有专门的安全标签,称为 SELinux 上下文。
  SELinux 标签具有多种上下文:User 用户、Role 角色、Type 类型和 Level 敏感度级别。目标策略会根据第三个上下文(即 Type 类型上下文)来制定自己的规则,通常以_t 结尾
  ls -Z

DSC00020.png
  传统的 Linux 在没有 Selinux 保护的时候,倘若运行于之上的服务器被骇客攻陷,其服务器最高权限就可能随之丧失,但是倘若有了 SElinux 的保护,***的也只有服务本身,整个服务器的最高权限依然还健在!
  一句话熟悉 Selinux 的作用:增强 Linux 系统安全性,一个例子:那么是我运行的 Apache 服务器被*,也只是***到了我 httpd 这个服务,可以把它禁锢到这里(相当于整个服务器运行了httpd,*了 httpd 而已),而系统的整个权限依然正常!
  SELinux 模式
  enforcing 强制模式,只要 selinux 不允许,就无法执行;
  permissive 警告模式,你可以执行,但你所做事件全部记录;
  disabled 关闭 selinux

DSC00021.png
  selinux 控制的文件类型权限非常细,httpd 无权限访问其他文件类型,*即使*了 httpd,也没有权限访问其他类型文件,不管你是不是属组属主有 rwx 权限,都没用。
[root@Centos83 ~]# mkdir /abc
[root@Centos83 ~]# touch /abc/index.html
[root@Centos83 ~]# ls -Z /abc
unconfined_u:object_r:default_t:s0 index.html
[root@Centos83 ~]# semanage fcontext -a -t  httpd_sys_content_t '/abc(/.*)?'
  semanage 管理
  fcontext 声明文件的默认标签
-a 添加  -t 类型
  /abc(/.*)?是递归匹配/abc 目录下子文件和子目录
[root@Centos83 ~]# restorecon -RFvv /abc
Relabeled /abc from unconfined_u:object_r:default_t:s0 to system_u:object_r:default_t:s0
Relabeled /abc/index.html from unconfined_u:object_r:default_t:s0 to system_u:object_r:default_t:s0
  restorecon 应用 fcontext 所声明的文件的标签
-R 递归  -F 强制
-vv 显示详细信息
[root@Centos83 ~]# ls -Z /abc/
system_u:object_r:default_t:s0 index.html
[root@Centos83 ~]# semanage fcontext -d -t httpd_sys_content_t '/abc(/.*)?'
-d 删除  -t 类型
[root@Centos83 ~]# restorecon -RFvv /abc
[root@Centos83 ~]# ls -Z /abc/
system_u:object_r:default_t:s0 index.html
[root@Centos83 ~]# semanage fcontext -l
  -l 查看类型
实验 httpd 服务没有权限访问其他类型的文件
[root@Centos83 ~]# yum -y install httpd
[root@Centos83 ~]# systemctl start httpd
[root@Centos83 ~]# echo hello httpd >>/var/www/html/hell.txt
[root@Centos83 ~]# ls -Z /var/www/html/hell.txt 
unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/hell.txt
[root@Centos83 ~]# curl 10.170.80.180/hell.txt
hello httpd     # 打开网页可以访问这个 hell.txt 的内容
[root@Centos83 ~]# semanage fcontext -a -t default_t '/var/www/html/hell.txt'
[root@Centos83 ~]# restorecon '/var/www/html/hell.txt' 
[root@Centos83 ~]# ls -Z '/var/www/html/hell.txt' 
unconfined_u:object_r:default_t:s0 /var/www/html/hell.txt
[root@Centos83 ~]# curl 10.170.80.180/hell.txt
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
Forbidden
<p>You don't have permission to access this resource.</p>
</body></html>      # 打开网页没有权限访问这个 hell.txt 的内容
[root@Centos83 ~]# semanage fcontext -d -t default_t '/var/www/html/hell.txt'
[root@Centos83 ~]# restorecon '/var/www/html/hell.txt' 
[root@Centos83 ~]# curl 10.170.80.180/hell.txt
hello httpd        # 打开网页可以访问这个 hell.txt 的内容
总结:  6.1 用户和组的相关配置文件
  6.2 管理用户和组
  6.3 实战:进入 centos8 紧急模式恢复 root 密码
6.3 扩展内容(了解即可):SELinux
关注下面的标签,发现更多相似文章