一、SElinux(Secure Enhanced Linux):安全增強的Linux
SElinux是一個在內核中實踐的強制訪問控制(MAC)安全性機制,由美國國家安全局NSA(The National Security Agency)和SCC(Secure
Computing Corporation的)開發的針對計算機基礎結構安全開發的一個全新的Linux安全策略機制。SELinux可以允許系統管理員更加靈活的來定義安全策略。
SELinux是一個內核級別的安全機制,從Linux2.6內核之后就將SELinux集成在了內核當中,因為SELinux是內核級別的,所以我們對于其配置文件的修改都是需要重新啟動操作系統才能生效的。
現在主流發現的Linux版本里面都集成了SELinux機制,CentOS/RHEL都會默認開啟SELinux機制。
二、DAC和MAC的區別
DAC(Discretionary Access Control):自主訪問控制
DAC環境下的進程是無束縛的
MAC(Mandatory Access Control):強制訪問控制
MAC環境下的策略的規則決定控制的嚴格程度
MAC環境下的進程是可以被限制的
策略用來定義被限制的進程能夠使用哪些資源(文件和端口)
默認情況下,沒有被明確允許的行為將被拒絕
三、SElinux模式
Enforcing: 這個缺省模式會在系統上啟用并實施 SELinux 的安全性政策,拒絕訪問 及記錄行動
Permissive: 在 Permissive 模式下,SELinux 會被啟用但不會實施安全性政策,而 只會發出警告及記錄行動。Permissive 模式在排除 SELinux 的問題時很有用
Disabled: SELinux 已被停用
如何查看及設定當前系統上SElinux的工作模式:
查看:getenforce
設定:setenforce [0|1];0表示設置為Permissive模式,1表示設置為Enforcing模式。此設定方式當前有效,重啟系統后失效。
SElinux配置文件:
/etc/sysconfig/selinux。修改此文件后,需要重啟系統才生效。
四、Selinux策略
在SELinux中,我們是通過定義策略來控制哪些域可以訪問哪些上下文。SElinux策略分類:
minimum:CentOS7,修改過的targeted,只對選擇的網絡服務。
mls:提供MLS(多級安全)機制的安全性
minimum 和mls 穩定性不足,未加以應用
strict:每個進程都受到selinux的控制
targeted:目標型策略,僅有限個進程受到selinux的控制,只監控容易被入侵的進程。依賴保護常見的網絡服務。CentOS/RHEL中采用的默認策略。
使用sestatus命令查看當前使用的SElinux模式及配置文件中的配置:
五、SElinux安全上下文
在傳統的linux中,一切皆文件,有用戶、組、權限來進行訪問控制。
在SElinux中,一切皆對象,由存放在Inode的擴展屬性域的安全元素所控制其訪問。所有文件、資源端口和進程都具備叫做安全上下文(Security context)的標簽。
如何查看文件的安全上下文:
ll -Z /Path/to/somefile
如何查看進程的安全上下文:
ps -Z
安全上下文由五個元素組成:
user:role:type:sensitivity:category
user:指的是SElinux用戶,root表示root賬戶身份,user_u表示普通用戶無特權用戶,system_u表示系統進程,通過用戶可以確認身份類型,一般搭配角色使用。身份和不同的角色搭配時有權限不同,雖然可以使用su命令切換用戶但對于SElinux的用戶并沒有發生改變,賬戶之間切換時此用戶身份不變,在targeted策略環境下用戶標識沒有實質性作用。
role:object_r一般為文件目錄的角色、system_r一般為進程的角色,在targeted策略環境中用戶的角色一般為system_r。用戶的角色類似用戶組的概念,不同的角色具有不同的身份權限,一個用戶可以具備多個角色,但是同一時間只能使用一個角色。在targeted策略環境下角色沒有實質作用,在targeted策略環境中所有的進程文件的角色都是system_r角色。
type:文件和進程都有一個類型,SElinux依據類型的相關組合來限制存取權限。
Sensitivity: 限制訪問的需要,由組織定義的分層安全級別,如unclassified, secret,top,secret,一個對象有且只有一個sensitivity,分0-15 級,s0最低,Target策略默認使用s0
Category :對于特定組織劃分不分層的分類,如FBI Secret,NSA secret,一個對象可以有多個categroy,c0-c1023共1024個分類,Targeted策略不使用cateaory
六、SElinux的配置
1、臨時配置:setenforce
2、永久配置:vim /etc/sysconfig/selinux
3、給文件或目錄重新打安全標簽
chcon [OPTION]… [-u USER] [-r ROLE] [-t TYPE] FILE…
chcon [OPTION]… –reference=RFILE FILE…
常用選項
-R :遞歸打標
例:在/var/www/html,新建了一個目錄test,目錄下的index.html文件的安全上下文類型為httpd_sys_content_t,現在修改ks.cfg、hello.txt的安全類型與index.html的類型一致。
修改方法一:直接修改
]#chcon -t httpd_sys_content_t ks.cfg
修改方法二:參考index.html文件修改hello.txt文件
]#chcon –reference index.html hello.txt
將test目錄下的文件的角色都修改為system_u
]#chcon -R -u system_u test/
4、恢復目錄或文件默認的安全上下文:
estorecon [-R] /path/to/somefile
5、默認安全上下文查詢與修改
使用semanager來管理。需要安裝policycoreutils-python包
查看默認的安全上下文:]#semanage fcontext -l | grep httpd
修改默認安全上下文:
semanager fcontext -a -t type file
例:修改random.txt的默認類型為,httpd_sys_content_t,之后恢復安全類型至默認類型
刪除默認安全上下文
semanager fcontext -d -t type file
七、Selinux端口標簽
1、查看端口標簽
semanage port –l
2、添加端口
semanage port -a -t port_label -p tcp|udp PORT
例:將9812端口添加為http_port_t的默認端口
semanage port -a -t http_port_t -p tcp 9812
3、刪除端口
semanage port -d -t port_label -p tcp|udp PORT
例:將9812端口從為http_port_t的默認端口中刪除
semanage port -d -t http_port_t -p tcp 9812
4、修改
semanage port -m -t port_label -p tcp|udp PORT
例:將http_port_t的默認端口9812改為http_port_t的默認端口
semanage port -m -t http_port_t -p tcp 9812
八、SElinux的布爾值
可以通過布爾值微調 SELinux政策而不必重新編譯政策的源代碼。這些選項包括允許用戶在 Samba下分享他們的主目錄,或者允許Apache從用戶的主目錄伺服文件。否則這些都會被 SELinux 政策所拒絕。
1、查看bool 命令:
getsebool [-a] [boolean]
semanage boolean –l
semanage boolean -l –C 查看修改過的布爾值
2、設置bool 值命令:
setsebool [-P] boolean value
setsebool [-P] Boolean=value
實戰演練:
1、啟用SELinux策略并安裝httpd服務,改變網站的默認主目錄為/website,添加SELinux文件標簽規則,使網站可訪問。
查看是否啟用selinux
創建/website目錄,并設置安全上下文
編輯httpd.conf文件,修改默認目錄
]#vim /etc/httpd/conf/httpd.conf
2、修改上述網站的http端口為9527,增加SELinux端口標簽,使網站可訪問。
修改httpd服務監聽端口
]#vim /etc/httpd/conf/httpd.conf
將9527設置為httpd監聽端口
3、啟用相關的SELinux布爾值,使上述網站的用戶student的家目錄可通過http訪問。
配置完成,清空防火墻策略,做訪問測試。
附:一些常見的布爾類型釋義
allow_ftpd_full_access(FTP)
容許 ftpd 全權訪問系統
allow_ftpd_anon_write(FTP)
容許 ftpd 將文件上載到置標為 public_content_rw_t 的目錄
allow_ftpd_use_cifs(FTP)
容許 ftp 服務器在公開傳輸服務使用 cifs
allow_ftpd_use_nfs(FTP)
容許 ftp servers 在公開傳輸服務使用 nfs
allow_httpd_anon_write(HTTPD 服務)
容許 httpd 守護程序將文件寫入置標為 public_content_rw_t 的目錄
allow_httpd_mod_auth_pam(HTTPD 服務)
容許 Apache 使用 mod_auth_pam.
allow_httpd_sys_script_anon_write(HTTPD 服務)
容許 httpd 腳本將文件寫入置標為 public_content_rw_t 的目錄
allow_smbd_anon_write(Samba)
容許 Samba 將文件寫入置標為 public_content_rw_t 的目錄
allow_ssh_keysign(SSH)
容許 ssh 執行 ssh-keysign
ftp_home_dir(FTP)
容許 ftp 在用戶的主目錄讀/寫文件
httpd_builtin_scripting(HTTPD 服務)
容許 HTTPD 支持內置腳本
httpd_can_network_connect_db(HTTPD 服務)
容許 HTTPD 腳本及模塊通過網絡與數據庫連接
httpd_can_network_connect(HTTPD 服務)
容許 HTTPD 腳本及模塊與網絡連接
httpd_can_network_relay(HTTPD 服務)
容許 httpd 扮演中繼器的角色
httpd_disable_trans(HTTPD 服務)
SELinux 停止保護 httpd 守護程序
httpd_enable_cgi(HTTPD 服務)
容許 HTTPD 支持 cgi
httpd_enable_ftp_server(HTTPD 服務)
容許 HTTPD 以 ftp 服務器的身份去執行
httpd_enable_homedirs(HTTPD 服務)
容許 HTTPD 閱讀用戶的主目錄
httpd_rotatelogs_disable_trans(SELinux 服務保護)
SELinux 停止保護 httpd rotatelogs
httpd_ssi_exec(HTTPD 服務)
容許 HTTPD 在系統 CGI 腳本的同一本地里執行 SSI 執行檔
httpd_suexec_disable_trans(HTTPD 服務)
SELinux 停止保護 http suexec
httpd_tty_comm(HTTPD 服務)
統一 HTTPD 與終端機的溝通。處理憑證時需用
httpd_unified(HTTPD 服務)
統一 HTTPD 處理所有內容文件
原創文章,作者:M20-1鐘明波,如若轉載,請注明出處:http://www.www58058.com/46670
文章內容很完整,但是圖片都是損壞的文件,我已經幫你打回草稿了,你自己重新整理一下。
@馬哥教育:試了幾次,我預覽都能看見圖片,但是用手機看不了。
放棄。
@M20-1鐘明波:你這個問題是這樣的,你是從為知筆記復制過來的圖片吧?而這些鏈接我們的網站是禁止訪問的所以你這邊需要重新傳一下
@馬哥教育:老師,此篇博文及其他有錯誤的文章都已修改。