2.04.2013

SELinux Brief Introduction

    Linux傳統的系統安全是以UserGroupPermission來完成。我們稱之為DAC (Discretionary Access Control,無條件存取控制) 。而SELinux則是將一些Rules (Policy,規則 / 方針)放入database之中,當某Process (程序 / 進程) 要對檔案進行存取時,將Process和檔案的tag送進Rule的database中進行審核。這叫做MAC (Mandatory Access Control,代理存取控制)

    最嚴僅的Policy是叫「Strict」,但RHEL (Red Hat Enterprise Linux)尚未使用全部的SELinux的Policy,其管理的Policy我們稱之為「targeted」,針對特定的Process進行管制。而RHEL中的SELinux模式有三種:DisabledPermissiveEnforcing。Enforcing就是啟動SELinux的機制;Permissive只會提出安全性警告,Disabled則是不啟動SELinux。

改變現行的SELinux狀態─我們可以編輯 / etc / sysconfig / selinux 檔案:
SELINUX = enforcing    # Or permissive / disabled
SELINUXTYPE = targeted    # RHEL目前僅支援targeted
重開機之後即可生效。
如果在Enforcing之下,要切換成Permissive,可用指令:
# setenforce 0    // 切換成Permissive
在Permissive下,setenforce 1便切換成Enforcing。
# getenforce    // 此一指令可以查看當下SELinux的狀態

所有的Process和檔案 (Files)都有一個安全的脈絡 (context)。Context有以下幾個欄位:User: Role: Type: Sensitivity: Category
例如:user_u: object_r: tmp_t: s0: c0 (s0和c0不見得都會出現)。
我們可以用ls –Zps –Z指令來檢視檔案及程序的Context。
Process的Type如果是unconfined_t,則表示尚未在SELinux的控管之下。

改變Context的方式:
要改變Context可以用chcon指令,如:
# chcon –t httpd_sys_content_t /var/www/station
就可以將 / var / www / station / 目錄的type改為httpd_sys_content_t的type。

如果要將某個目錄 (或檔案)的Context複製到另外一個目錄上,可以這麼做:
# chcon –reference /var/www/html/ /var/www/station/

如果要還原某個檔案或目錄的Context,我們可以:
# restorecon /root/*

要看各個服務的SELinux Boolean值:
# getsebool –a
設定SELinux的Boolean值,可用:
# setsebool –P    // 永久設定

查詢相關資訊:
我們如果要查某一個服務在SELinux下有那些控管的設定,可先用:
# man –k (service_name) | grep “selinux”
找出此相關的說明文件,再進去文件看說明。例:
# man –k ftpd | grep “selinux”

我們再使用以下指令來查看說明:
# man 8 ftpd_selinux

列出幾項SELinux對一些服務的管制範例:
SELinux對named的限制:
1. named_write_master_zones
   如果設定為1,DDNS及Zone Transfer就可以被執行。
   # setsebool –P named_write_master_zones=1

2. named_disable_trans
   如果設定為1,再重新啟動named,將使named不再受SELinux保護。
   # setsebool –P named_disable_trans=1
   # service named restart

SELinux對ftpd的管制:
1. 如果要開放目錄讓anonymous user可以上傳檔案,在建立好的目錄 (EX: / var / ftp / incoming /)後,要注意其Type及其權限開放。
   # chcon –t public_content_rw_t /var/ftp/incoming/
   # setsebool –P allow_ftpd_anon_write=1

2. 要讓使用者登入後可以進入自己的Home Directory,必須:
   # setsebool –P ftp_home_dir=1

3. 使SELinux不再管理ftpd:
   # setsebool –P ftpd_disable_trans=1

SELinux對nfs的管制:
1. 要將share出的目錄開放Read Only的權限,必須:
   # setsebool –P nfs_export_all_ro=1

2. 要開放Read / Write的權限,則是:
   # setsebool –P nfs_export_all_rw=1

3. 若要將遠端NFS Server分享的目錄當做本身User的Home Directory,須設:
   # setsebool –P use_nfs_home_dirs=1

SELinux對SAMBA的管制:
1. 要用SAMBA分享出的目錄,其Context須設成samba_share_t。
   # chcon –t samba_share_t /dira

2. 要讓User對SAMBA的File System有寫的權限,須設:
   # setsebool –P allow_smbd_anon_write=1

沒有留言:

張貼留言