Linux雲計算集羣架構師->第六章 Centos8 用戶管理

第六章 Centos8 用戶管理

(上課時間2021-6-21,筆記整理時間2021-06-25)html

本節所講內容:node

6.1 用戶和組的相關配置文件linux

6.2 管理用戶和組算法

6.3 實戰:進入 centos8 緊急模式恢復 root 密碼shell

​ 用戶通常來講是指系統的使用者,使用者可使用這些名稱來登陸使用計算機,除了使用者以外,一些系統服務也須要含有部分特權的用戶帳戶運行;所以出於安全考慮,用戶管理應運而生,它加以明確限制各個用戶帳戶的權限,root 在計算機中用擁有至高特權,因此通常只做管理用,非特權用戶能夠經過SU 或 SUDO 程序來臨時得到特權。apache

​ Linux 系統經過用戶和用戶組實現訪問控制,包括對文件訪問、設備使用的控制。vim

1 人能夠擁有不少帳戶,只不是彼此名稱不一樣,好比 root 名稱已經佔用就不能再用了,此外,任意用戶可能從屬某個用戶組,此用戶能夠加入某些已經存在的組來得到該組的特權。centos

每 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 用戶三種角色:超級用戶,普通用戶,虛擬用戶。bash

超級用戶: root 擁有對系統的最高的管理權限,UID=0

普通用戶:

系統用戶 UID 範圍:1-999(centos7/8 版本) 1-499(centos6 版本)

本地用戶 UID 範圍:1000+(centos7/8 版本) 500+(centos6 版本)

UID:即每一個用戶的身份標示,相似於每一個人的身份證號碼.

虛擬用戶:僞用戶 通常不會用來登陸系統的,它主要是用於維持某個服務的正常運行.如:ftp,apache

用戶基本信息保存位置:/etc/passwd

下圖是用戶和組的關係:

一對一:一個用戶能夠存在一個組中; 一對多:一個用戶能夠存在多個組中

多對一:多個用戶能夠存在一個組中; 多對多:多個用戶能夠存在多個組中

image-20210624192200239

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 文件。這個文件以以下格式保存了每個系統賬戶的全部信息 (字段以「:」分割)

image-20210624195444982

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:::

image-20210624205109262

格式以下:
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 系統

image-20210624214705889

#開機時按任意鍵,便可進入此界面,光標選擇第一條,e表示進入編輯模式

#在 linux 行尾添加 rd.break

#進入編輯模式後會看到這些信息,默認狀況,都是以 ro 只讀方式引導系統進入

改完以後,按下 Ctrl+X 進入緊急模式

image-20210624215333628

原理:打斷系統正常啓動,而後進一個 bash 環境,系統並無真正的啓動

image-20210624215548857

emergency [iˈmɜ:dʒənsi] 緊急

image-20210624220244943

發現是隻讀的。須要從新以 rw 方式掛載/sysroot 。

mount -o remount,rw /sysroot #從新掛載,使其擁有讀寫權限

image-20210625082638077

換根,修改密碼

chroot 命令用來在指定的根目錄下運行指令

chroot,即 change root directory (更改 root 目錄)。在 linux 系統中,系統默認的目錄結構都是以/,便是以根 (root) 開始的。而在使用 chroot 以後,系統的目錄結構將以指定的位置做爲/位置

在通過 chroot 命令以後,系統讀取到的目錄和文件將不在是舊系統根下的而是新根下(即被指定的新的位置)的目錄結構和文件。

image-20210624220524275

若是系統安裝的中文版顯示亂碼,輸入:LANG=en_US.UTF-8 #修改語言環境爲英文,這樣顯示亂碼。

passwd #開始修改密碼

image-20210624220747007

注:若是系統的 selinux 開啓着,則須要執行命令: touch /.autorelabel 以更新系統信息,否
則重啓以後密碼修改不會生效,先退出當前根,reboot 重啓系統。咱們已經關閉 selinux,不須要建立
/.autorelabel 。

image-20210624220939593

擴展:建立此文件:開啓 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 鍵進行編輯

image-20210625075234355

#進入編輯模式後會看到這些信息。找到「Linux16」開頭的行,在 Linux16 的行尾空格後添加「rd.break「

image-20210625075441365

image-20210625080513825

這裏改爲 rw,則不須要從新掛載,直接以讀寫掛載

改完以後,按下 Ctrl+X 進入緊急模式

原理:打斷系統正常啓動,而後進一個 bash 環境,系統並無真正的啓動

image-20210625080754796

emergency [iˈmɜ:dʒənsi] 緊急

查看系統根掛載狀況:

image-20210625080947682

若是是隻讀的。須要從新以 rw 方式掛載/sysroot ,剛纔進入添加rd.break,時已經修改了rw,就不用從新掛載了。

若是是隻讀,用 mount -o remount,rw /sysroot #從新掛載,使其擁有讀寫權限

image-20210625081143563

換根,修改密碼

chroot 命令用來在指定的根目錄下運行指令

chroot,即 change root directory (更改 root 目錄)。在 linux 系統中,系統默認的目錄結構都是以/,便是以根 (root) 開始的。而在使用 chroot 以後,系統的目錄結構將以指定的位置做爲/位置

在通過 chroot 命令以後,系統讀取到的目錄和文件將不在是舊系統根下的而是新根下(即被指定的新的位置)的目錄結構和文件。

若安裝操做系統時選擇的是中文版,輸入:LANG=en_US.UTF-8 #修改語言環境爲英文,就能夠解決顯示亂碼。

image-20210625081543980

passwd #開始修改密碼

image-20210625081749393

若是系統的 selinux 開啓着,則須要執行命令: touch /.autorelabel 以更新系統信息讓SELinux 生效,不然重啓以後密碼修改不會生效,先退出當前根,reboot 重啓系統。咱們已經關閉selinux,不須要建立/.autorelabel 。

image-20210625081945495

​ 建立此文件:開啓 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

image-20210625111055030

傳統的 Linux 在沒有 Selinux 保護的時候,假若運行於之上的服務器被駭客攻陷,其服務器最高權限就可能隨之喪失,可是假若有了 SElinux 的保護,***的也只有服務自己,整個服務器的最高權限依然還健在!

一句話熟悉 Selinux 的做用:加強 Linux 系統安全性,一個例子:那麼是我運行的 Apache 服務器被***,也只是***到了我 httpd 這個服務,能夠把它禁錮到這裏(至關於整個服務器運行了httpd,***了 httpd 而已),而系統的整個權限依然正常!

SELinux 模式

enforcing 強制模式,只要 selinux 不容許,就沒法執行;

permissive 警告模式,你能夠執行,但你所作事件所有記錄;

disabled 關閉 selinux

image-20210625104648307

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

相關文章
相關標籤/搜索