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/ 可寫入)  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 


     
   Final :  setroubleshoot-server  setroubleshoot 安裝完成後,當我們他日存取selinux 權限

                 有不足訊息時,追蹤紀錄將寫到 /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

我們可以執行   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 到此為止!!!.我要睡了!!!!晚安

arrow
arrow
    全站熱搜

    終極.凱因斯 發表在 痞客邦 留言(0) 人氣()