close
實驗目標
利用ACL(Acess Control List)對原有檔案/目錄權限,
做進階延展權限組態
使用setfacl [檔案名稱] 工具限定多個群組,使用者成員必須依照ACL規則約束
該使用者/群組權限(原始設定檔案權限不影響),權線範圍則影響到次要多個之使用者,群組
使用getfacl [檔案名稱] 可以查閱目前ACL變更後成果
在此次LAB中我們將組態 MASK 與 Default acl (預設ACL偵對目錄,具繼承權限特性)
<---聽老師說MASK 與 Default ACL 之應用會在RHCE考試擇一出現在考題(很重要)
使用SELINUX 佈建安全Linux環境
檢視現有不正確檔案安全脈絡(ls -lZd [檔案名稱]) ,並能夠使用chcon -t [安全脈絡名稱] [檔案]
修正為正確安全脈絡,若此目錄安全脈絡已定義,我們可以使用Restorecon -Rv [檔案]進行還原脈落
[使用自行建置目錄-手動配置其安全脈絡]
可以使用semanage 搭配參數替自行建立目錄指定預設安全脈絡
查尋SELINUX 內建 布林值(大部份規範-網路服務存取內容_
Ex: httpd開放使用家目錄網頁使用)並可查找問題原因,啟用相關布林值: Ex: setbool -P [布林項目] =1
使用 getbool [布林項目] 查驗該項次是否已啟用(由0關->1開)
由於系統有安裝setroubleshoot 套件啟動,當我們有不正常SELINUX權限存取問題產生,會寫到
/var/log/meeesage 裡,我們可以根據這些紀錄去追縱與修正 sealert -l [事件編號]
[ 環境 ]
建立目錄: /usr/near 權限: 770(drwx-rwx---) owner s1 near
建立群組: near(s1為成員) , s2(對/usr/near/ 可寫入)
(A) 首先,我們先查看一下我們目前系統 / 是否已支援ACL控制選項
mount -l
dumpe2fs /dev/mapper/vg_near1-lv_root | grep 'Default mount'
#從下圖中我們可以看到"根"已支援acl,user_xattr
若以下無顯示 acl,user_xattr 請使用以下指令將其寫入即可

(B.) 由於我們在前面題幹提到我們要建立一個ACL Lab 目錄故請參考一下配置步驟
mkdir /usr/near
chown s1.near /usr/near
chmod 2770 /usr/near #配置Set-Gid,使建立之檔案群組與上層目錄保持一致性
getfacl /usr/near # 使用getfacl 查看目前測試Lab目錄為空,等會我們會陸續,
配置ACL權限

(C.) 我們在此預先建立MASK值等於rwx,稍後我們將區分多個次要使用者與群組,當該群組或使用
者成員存取/usr/near時,給與ACL不同權限規範
setfacl -m m::rwx /usr/near #配置mask=rwx
(D.)Then,我們依照題幹設計,配置次要使用者與群組ACL規範權限
setfacl -m g:g2:rw /usr/near #可讀寫
setfacl -m g:g3:rw /usr/near #可讀寫
setfacl -m u:g4:rx /usr/near #可讀
=========================================
以上編寫完成後,我們再此使用getfacl /usr/near 檢查設定是用已OK

(E.)我們切換s2,後建立檔案到 /usr/near/s2.acl 發現權限錯誤訊息
由於在上一步我們對s2存取/usr/near/ 此目錄規範: 僅能rw但對象為目錄,
故我們必須回頭將s2,s3 對於/usr/near ACL 權限重設為rwx,這時才有權限進入該目錄並讀寫資料
setfacl -x g:s2: /usr/near #使用-x 參數刪除現有acl配置
setfacl -x g:s3 /usr/near

THEN 我們重新配置s1,s2正確ACL
setfacl -m g:s2:rwx /usr/near #表示位於s2群組成員,皆可以在/usr/near目錄下具rwx存取權限
setfacl -m g:s3:rwx/usr/near #配置修正後,我們再次建立對應檔案,這次可順利存取

THEN 我們再次測試配置user: s4 存取權限rx #其目前僅有rx權限,已符合我們LAB需要

(F.) ACL MASK值:
當我們配置次要使用者,群組規範於ACL存取該受限的目下權限,其權限必須與MASK值
比對後才是為最終該使用者最終有效權限.
EX: MASK = rx ; g:s1:rwx 比對後其最終有效權限為 g:s1:rx #只能read,execute
下圖中,near 將mask 值調整為rx , 故我們可以看到群組:s2 最右邊顯示一字串
#effective:r-x <==表示s2 與mask 值比對後有效權限,故下圖中我們重新寫入資料會無權限
mask 值在RHCEv6很重要,會考 !!!

(G.) Default ACL : 僅偵對"目錄"有效用,且所建立ACL權限下層將繼承上層ACL權限
我們使用另外一台電腦建立一個Default ACL Lab專用目錄/usr/near2 並配置ACL
setfacl -m d:g:s3:rw /usr/near2 #新建檔案或目錄將會依照權限之規範,具繼承效果
setfacl -m d:u:s4:r-x /usr/near2

THEN : 上一步Setup後,我們可以在/usr/near2目下建立多層子目錄
再使用getfacl /usr/near2 /usr/near2/s3y3/ 指令查看ACL子目錄是否權限繼承上層目錄
#下圖中顯示已成功繼承ACL權限,當我們配置ACL權限使用ls -ld [檔案/目錄] 最後一欄位會由
. 轉換為 + 符號表示此目錄或檔案具ACL設計

======================================================================
SELINUX
(A) 嘗試切換selinux 模式由 0 關閉 ->1 開啟
setenforce 1 #將selinux 模式由Permissive 轉換為 Enforcing
getenforce

(B.) 我們可以使用ls lZd [檔案/目錄] 查看系統預設配置之TYPE
ll -lZd /var/www/html /etc/init.d/httpd

(C.) 接者嘗試在 /tmp 下建立一檔案 kkk.txt ,我們利用mv指令將此檔案搬移到/var/www/html
之下,再次觀察其type會繼承搬移後目錄一樣type? Ans: No
#使用cp 指令複製檔案到異質目錄,其TYPE欄位將繼承搬移後的目錄之TYPE
使用cp -a , mv 指令 搬移檔案到異質目錄,其TYPE欄位將不會繼承搬移後的目錄之TYPE
由於檔案的TYPE格式與上層目錄不一致將導至該檔案,權限不足,無法存取之困境

由於httpd 套件安裝後已存在預設TYPE可供校正參考,故我們可以使用以下指令進行本文校正
restorecon -Rv /var/www/html/kkk.txt #使用restorecon指令可返還至預設該目錄TYPE做校正

在此我們將先前實驗的檔案kkk.txt 移除,重新在/tmp下建立一個檔案yum.log,再次搬移到
/var/www/html 目錄下. 比對/var/www/html 與yum.log selinux type 發現有不一致
我們使用links 指令查看該網頁目錄內容,吐露訊息為
links -dump http://192.168.11.88/yum.log
Forbidden .............You don't have permission to access /yum.log on this server
由於Enforcing 模式下type不一致導致無法正確瀏覽該文件,我們必須校正其type
chcon -t http_sys_content_t /var/www/html/yum.log
# -t http_sys_content_t ,我們可以從該檔案上曾目錄查找到其selinux type進行檔案套用
上述設定OK後,我們可以使用ls -lZd [檔案/目錄] 驗證TYPE是否效正OK

(D.) SELINUX 布林值 啟用與關閉
當我們同時啟用 Ex: Web(httpd)服務或FTP,Samba ....等與 Selinux(Enforcing)同時啟用時
SELNUX 布林值開關規範了許多網路服務存取項次,我們必須精明找到相關項次,然後啟用
才可能讓後許網路服務正常存取EX: 啟用httpd 網頁家目錄功能
下圖中我們試者設置s1 家目錄啟用正確,但閱覽時確發現權限不正確?
註:預設使用者群組權限rwx配置ok情況下
Ans: Selinux Boolean Value disable

解決方案
THEN 我們先使用getbool -l 搭配 | 與grep 指令查找布林資料"關鍵字"
getbool -l | grep --color 'http' | grep 'home' #查找符號啟用home dir 關鍵字,顯示如下
httpd_enable_homedirs -- off #罪魁禍首就是這個,我們試者啟用它
setbool -P httpd_enable_homedirs = 1 # -P =永久寫入生效, 布林0=關,1=開

THEN
我們這次使用links 測試http://192.168.11.88/~s1 該使用者家網頁能否正常顯示頁面
links -dump http://192.168.11.88/~s1 #當我們打開上一步指定布林值後,網頁可以正常顯示了
`test selinux`

(E.) 使用者自行建立目錄,並指定其預設Type Record
由於使用者自行建立目錄,其TYPE無法使用restorecon -Rv 參考做依據校正為正確目錄
我們必須使用 semange 指令初始指定配置其type,那當我們下次就可以使用restorecon
指令還原在其目錄下建立檔案或目錄,故來DO吧
首先我在/底下自行建立一目錄名為/supernear
使用ll -Zd /supernear #觀察一下,預設自建目錄type為:default_t
現在我們假設將其type 指令為http_sys_context_t 可以這麼寫
semange -a -t http_sys_context_t '/supernear(/.*)?'
接者我們試者使用restorecon -Rv 指令做還原預設type將返還我們要的TYPE
restorecon -Rv /supernear
(F) 規納一下SELINUX 可能會安裝套件,請先將其裝好
policycoreutils-python <= semanage
setools & setroubleshoot & setroubleshoot-server
Final : setroubleshoot-server setroubleshoot 安裝完成後,當我們他日存取selinux 權限
有不足訊息時,追蹤紀錄將寫到 /var/log/messages 與 /var/log/audit/auditd.log
在/var/log/messages 裡會看到類似
"getattr" access to /var/www/html/index.html. For complete SELinux messages.
run sealert -l 6c927892-2469-4fcc-8568-949da0b4cf8d
我們可以執行 sealert -l 6c927892-2469-4fcc-8568-949da0b4cf8d 查找到解決selinux 權限方法
並加以解決它. 註: Near上課時使用Redhat Enterprise 6.0版本,sealert 訊息可以正常寫入
到/var/log/messeage 裡但使用CentOS 6.x版本發現無法正常寫入/var/log/message,Maybe 套件問題
這點就留給讀者腦力激盪一下. 本LAB 到此為止!!!.我要睡了!!!!晚安
利用ACL(Acess Control List)對原有檔案/目錄權限,
做進階延展權限組態
使用setfacl [檔案名稱] 工具限定多個群組,使用者成員必須依照ACL規則約束
該使用者/群組權限(原始設定檔案權限不影響),權線範圍則影響到次要多個之使用者,群組
使用getfacl [檔案名稱] 可以查閱目前ACL變更後成果
在此次LAB中我們將組態 MASK 與 Default acl (預設ACL偵對目錄,具繼承權限特性)
<---聽老師說MASK 與 Default ACL 之應用會在RHCE考試擇一出現在考題(很重要)
使用SELINUX 佈建安全Linux環境
檢視現有不正確檔案安全脈絡(ls -lZd [檔案名稱]) ,並能夠使用chcon -t [安全脈絡名稱] [檔案]
修正為正確安全脈絡,若此目錄安全脈絡已定義,我們可以使用Restorecon -Rv [檔案]進行還原脈落
[使用自行建置目錄-手動配置其安全脈絡]
可以使用semanage 搭配參數替自行建立目錄指定預設安全脈絡
查尋SELINUX 內建 布林值(大部份規範-網路服務存取內容_
Ex: httpd開放使用家目錄網頁使用)並可查找問題原因,啟用相關布林值: Ex: setbool -P [布林項目] =1
使用 getbool [布林項目] 查驗該項次是否已啟用(由0關->1開)
由於系統有安裝setroubleshoot 套件啟動,當我們有不正常SELINUX權限存取問題產生,會寫到
/var/log/meeesage 裡,我們可以根據這些紀錄去追縱與修正 sealert -l [事件編號]
[ 環境 ]
建立目錄: /usr/near 權限: 770(drwx-rwx---) owner s1 near
建立群組: near(s1為成員) , s2(對/usr/near/ 可寫入)
s3 (對/usr/near/ 可寫入)
建立使用者: s1 ,s2, s3, s4(對/usr/near/僅可讀取)
ACL MASK: rwx
帳號群組已配置圖如下:

(A) 首先,我們先查看一下我們目前系統 / 是否已支援ACL控制選項
mount -l
dumpe2fs /dev/mapper/vg_near1-lv_root | grep 'Default mount'
#從下圖中我們可以看到"根"已支援acl,user_xattr
若以下無顯示 acl,user_xattr 請使用以下指令將其寫入即可
tune2fs -o acl,user_xattr /dev/mapper/vg_near1-lv_root #適用centos 6.x

(B.) 由於我們在前面題幹提到我們要建立一個ACL Lab 目錄故請參考一下配置步驟
mkdir /usr/near
chown s1.near /usr/near
chmod 2770 /usr/near #配置Set-Gid,使建立之檔案群組與上層目錄保持一致性
getfacl /usr/near # 使用getfacl 查看目前測試Lab目錄為空,等會我們會陸續,
配置ACL權限

(C.) 我們在此預先建立MASK值等於rwx,稍後我們將區分多個次要使用者與群組,當該群組或使用
者成員存取/usr/near時,給與ACL不同權限規範
setfacl -m m::rwx /usr/near #配置mask=rwx

(D.)Then,我們依照題幹設計,配置次要使用者與群組ACL規範權限
setfacl -m g:g2:rw /usr/near #可讀寫
setfacl -m g:g3:rw /usr/near #可讀寫
setfacl -m u:g4:rx /usr/near #可讀
=========================================
以上編寫完成後,我們再此使用getfacl /usr/near 檢查設定是用已OK

(E.)我們切換s2,後建立檔案到 /usr/near/s2.acl 發現權限錯誤訊息
由於在上一步我們對s2存取/usr/near/ 此目錄規範: 僅能rw但對象為目錄,
故我們必須回頭將s2,s3 對於/usr/near ACL 權限重設為rwx,這時才有權限進入該目錄並讀寫資料
setfacl -x g:s2: /usr/near #使用-x 參數刪除現有acl配置
setfacl -x g:s3 /usr/near

THEN 我們重新配置s1,s2正確ACL
setfacl -m g:s2:rwx /usr/near #表示位於s2群組成員,皆可以在/usr/near目錄下具rwx存取權限
setfacl -m g:s3:rwx/usr/near #配置修正後,我們再次建立對應檔案,這次可順利存取

THEN 我們再次測試配置user: s4 存取權限rx #其目前僅有rx權限,已符合我們LAB需要

(F.) ACL MASK值:
當我們配置次要使用者,群組規範於ACL存取該受限的目下權限,其權限必須與MASK值
比對後才是為最終該使用者最終有效權限.
EX: MASK = rx ; g:s1:rwx 比對後其最終有效權限為 g:s1:rx #只能read,execute
下圖中,near 將mask 值調整為rx , 故我們可以看到群組:s2 最右邊顯示一字串
#effective:r-x <==表示s2 與mask 值比對後有效權限,故下圖中我們重新寫入資料會無權限
mask 值在RHCEv6很重要,會考 !!!

(G.) Default ACL : 僅偵對"目錄"有效用,且所建立ACL權限下層將繼承上層ACL權限
我們使用另外一台電腦建立一個Default ACL Lab專用目錄/usr/near2 並配置ACL
setfacl -m d:g:s3:rw /usr/near2 #新建檔案或目錄將會依照權限之規範,具繼承效果
setfacl -m d:u:s4:r-x /usr/near2

THEN : 上一步Setup後,我們可以在/usr/near2目下建立多層子目錄
再使用getfacl /usr/near2 /usr/near2/s3y3/ 指令查看ACL子目錄是否權限繼承上層目錄
#下圖中顯示已成功繼承ACL權限,當我們配置ACL權限使用ls -ld [檔案/目錄] 最後一欄位會由
. 轉換為 + 符號表示此目錄或檔案具ACL設計

======================================================================
SELINUX
(A) 嘗試切換selinux 模式由 0 關閉 ->1 開啟
setenforce 1 #將selinux 模式由Permissive 轉換為 Enforcing
getenforce

(B.) 我們可以使用ls lZd [檔案/目錄] 查看系統預設配置之TYPE
ll -lZd /var/www/html /etc/init.d/httpd

(C.) 接者嘗試在 /tmp 下建立一檔案 kkk.txt ,我們利用mv指令將此檔案搬移到/var/www/html
之下,再次觀察其type會繼承搬移後目錄一樣type? Ans: No
#使用cp 指令複製檔案到異質目錄,其TYPE欄位將繼承搬移後的目錄之TYPE
使用cp -a , mv 指令 搬移檔案到異質目錄,其TYPE欄位將不會繼承搬移後的目錄之TYPE
由於檔案的TYPE格式與上層目錄不一致將導至該檔案,權限不足,無法存取之困境

由於httpd 套件安裝後已存在預設TYPE可供校正參考,故我們可以使用以下指令進行本文校正
restorecon -Rv /var/www/html/kkk.txt #使用restorecon指令可返還至預設該目錄TYPE做校正

在此我們將先前實驗的檔案kkk.txt 移除,重新在/tmp下建立一個檔案yum.log,再次搬移到
/var/www/html 目錄下. 比對/var/www/html 與yum.log selinux type 發現有不一致
我們使用links 指令查看該網頁目錄內容,吐露訊息為
links -dump http://192.168.11.88/yum.log
Forbidden .............You don't have permission to access /yum.log on this server
由於Enforcing 模式下type不一致導致無法正確瀏覽該文件,我們必須校正其type
chcon -t http_sys_content_t /var/www/html/yum.log
# -t http_sys_content_t ,我們可以從該檔案上曾目錄查找到其selinux type進行檔案套用
上述設定OK後,我們可以使用ls -lZd [檔案/目錄] 驗證TYPE是否效正OK

(D.) SELINUX 布林值 啟用與關閉
當我們同時啟用 Ex: Web(httpd)服務或FTP,Samba ....等與 Selinux(Enforcing)同時啟用時
SELNUX 布林值開關規範了許多網路服務存取項次,我們必須精明找到相關項次,然後啟用
才可能讓後許網路服務正常存取EX: 啟用httpd 網頁家目錄功能
下圖中我們試者設置s1 家目錄啟用正確,但閱覽時確發現權限不正確?
註:預設使用者群組權限rwx配置ok情況下
Ans: Selinux Boolean Value disable

解決方案
THEN 我們先使用getbool -l 搭配 | 與grep 指令查找布林資料"關鍵字"
getbool -l | grep --color 'http' | grep 'home' #查找符號啟用home dir 關鍵字,顯示如下
httpd_enable_homedirs -- off #罪魁禍首就是這個,我們試者啟用它
setbool -P httpd_enable_homedirs = 1 # -P =永久寫入生效, 布林0=關,1=開

THEN
我們這次使用links 測試http://192.168.11.88/~s1 該使用者家網頁能否正常顯示頁面
links -dump http://192.168.11.88/~s1 #當我們打開上一步指定布林值後,網頁可以正常顯示了
`test selinux`

(E.) 使用者自行建立目錄,並指定其預設Type Record
由於使用者自行建立目錄,其TYPE無法使用restorecon -Rv 參考做依據校正為正確目錄
我們必須使用 semange 指令初始指定配置其type,那當我們下次就可以使用restorecon
指令還原在其目錄下建立檔案或目錄,故來DO吧
首先我在/底下自行建立一目錄名為/supernear
使用ll -Zd /supernear #觀察一下,預設自建目錄type為:default_t
現在我們假設將其type 指令為http_sys_context_t 可以這麼寫
semange -a -t http_sys_context_t '/supernear(/.*)?'
接者我們試者使用restorecon -Rv 指令做還原預設type將返還我們要的TYPE
restorecon -Rv /supernear

(F) 規納一下SELINUX 可能會安裝套件,請先將其裝好
policycoreutils-python <= semanage
setools & setroubleshoot & setroubleshoot-server

有不足訊息時,追蹤紀錄將寫到 /var/log/messages 與 /var/log/audit/auditd.log
在/var/log/messages 裡會看到類似
Jul 21 14:53:20 www setroubleshoot: SELinux is preventing /usr/sbin/httpd
"getattr" access to /var/www/html/index.html. For complete SELinux messages.
run sealert -l 6c927892-2469-4fcc-8568-949da0b4cf8d
並加以解決它. 註: Near上課時使用Redhat Enterprise 6.0版本,sealert 訊息可以正常寫入
到/var/log/messeage 裡但使用CentOS 6.x版本發現無法正常寫入/var/log/message,Maybe 套件問題
這點就留給讀者腦力激盪一下. 本LAB 到此為止!!!.我要睡了!!!!晚安
全站熱搜