1.1 SElinux概述html
SELinux(Security-Enhanced Linux) 是美國國家安全局(NAS)對於強制訪問控制的實現,在這種訪問控制體系的限制下,進程只能訪問那些在他的任務中所須要文件。大部分使用 SELinux 的人使用的都是SELinux就緒的發行版,例如 Fedora、Red Hat Enterprise Linux (RHEL)、Debian 或 Gentoo。它們都是在內核中啓用SELinux 的,而且提供一個可定製的安全策略,還提供不少用戶層的庫和工具,它們均可以使用 SELinux 的功能。java
1.1.1 SElinux特色mysql
1.MAClinux
對訪問的控制完全化,對全部的文件、目錄、端口的訪問都是基於策略設定的,可由管理員時行設定。web
2.RBACsql
對於用戶只賦予最小權限。用戶被劃分紅了一些role(角色),即便是root用戶,若是不具備sysadm_r角色的話,也不是執行相關的管理。哪裏role能夠執行哪些domain,也是能夠修改的。apache
3.安全上下文安全
當啓動selinux的時候,全部文件與對象都有安全上下文。進程的安全上下文是域,安全上下文由用戶:角色:類型表示。bash
(1)系統根據pam子系統中的pam_selinux.so模塊設定登陸者運行程序的安全上下文服務器
(2)rpm包安裝會根據rpm包內記錄來生成安全上下文,
(3)若是是手工他建的,會根據policy中規定來設置安全上下文,
(4)若是是cp,會從新生成安全上下文。
(5)若是是mv,安全上下文不變。
1.1.2 安全上下文格式
安全上下文由user:role:type三部分組成,下面分別說明其做用:
1.user identity:相似linux系統中的UID,提供身份識別,安全上下文中的一部分。
三種常見的user:
user_u-: 普通用戶登陸系統後預設;
system_u-:開機過程當中系統進程的預設;
root-: root登陸後預設;
在targeted policy中users不是很重要;
在strict policy中比較重要,的有預設的selinuxusers都以 "_u"結尾,root除外。
2.role
文件與目錄的role,一般是object_r;
程序的role,一般是system_r;
用戶的role,targetedpolicy爲system_r;
strict policy爲sysadm_r,staff_r,user_r
用戶的role,相似於系統中的GID,不一樣的角色具有不一樣的權限;用戶能夠具有多個role;可是同一時間內只能使用一role;
role是RBAC的基礎;
3.type
type:用來將主體與客體劃分爲不一樣的組,組每一個主體和系統中的客體定義了一個類型;爲進程運行提供最低的權限環境。
當一個類型與執行的進程關聯時,該type也稱爲domain,也叫安全上下文。
域或安全上下文是一個進程容許操做的列表,決字一個進程能夠對哪一種類型進行操做。
1.1.3 SElinux配置文件
vi/etc/selinux/config
# This filecontrols the state of SELinux on the system.
# SELINUX= cantake one of these three values:
# enforcing -SELinux security policy is enforced.
# permissive -SELinux prints warnings instead of enforcing.
# disabled -SELinux is fully disabled.
SELINUX=enforcing
#SELINUX=disabled
# SELINUXTYPE=type of policy in use. Possible values are:
# targeted -Only targeted network daemons are protected.
# strict -Full SELinux protection.
SELINUXTYPE=targeted
#SELINUX有「disabled」「permissive」,「enforcing」3種選擇。
1.模式的設置
enforcing:強制模式,只要selinux不容許,就沒法執行
permissive:警告模式,將該事件記錄下來,依然容許執行
disabled:關閉selinux;停用,啓用須要重啓計算機。
2.策略的設置
targeted:保護常見的網絡服務,是selinux的默認值;
stric:提供RBAC的policy,具有完整的保護功能,保護網絡服務,通常指令及應用程序。
策略改變後,須要從新啓動計算機。
也能夠經過命令來修改相關的具體的策略值,也就是修改安全上下文,來提升策略的靈活性。
3.策略的位置
/etc/selinux/<策略名>/policy/
1.2 SElinux命令介紹
1.2.1 查詢SElinux狀態命令
1.查詢selinux狀態
[root@redhat~]# sestatus
SELinux status: enabled
SELinuxfsmount: /selinux
Currentmode: enforcing
Mode fromconfig file: enforcing
Policyversion: 21
Policy fromconfig file: targeted
2.查詢selinux激活狀態
[root@redhat~]# selinuxenabled
[root@redhat~]# echo $?
0
若是爲-256爲非激活狀態。
1.2.2 切換SElinux類型
1.切換成警告模式
[root@redhat~]# setenforce 0或setenforce permissive
[root@redhat~]# sestatus
SELinuxstatus: enabled
SELinuxfsmount: /selinux
Currentmode: permissive
Mode fromconfig file: enforcing
Policyversion: 21
Policy fromconfig file: targeted
或
[root@redhat~]# getenforce
Permissive
2.切換成強制模式
[root@redhat~]# setenforce 1
[root@redhat~]# getenforce
Enforcing
注:使用setenforce切換enforcing與permissive模式不須要重啓計算機。
1.2.3 檢查安全上下文
1.檢查賬號的安全上下文
[root@redhat~]# id -Z
root:system_r:unconfined_t:SystemLow-SystemHigh
2.檢查進程的安全上下文
[root@redhathome]# ps -Z
LABEL PIDTTY TIME CMD
root:system_r:unconfined_t:SystemLow-SystemHigh2383 pts/0 00:00:00 bash
root:system_r:unconfined_t:SystemLow-SystemHigh2536 pts/0 00:00:00 ps
3.檢查文件與目錄的安全上下文
[root@redhathome]# ls -Z
drwx------ tom tom system_u:object_r:user_home_dir_ttom
1.2.4 修改文件/目錄安全上下文與策略
1.chcon命令
chcon -u[user] 對象
-r[role]
-t[type]
-R遞歸
示例:
chcon -R -tsamba_share_t /tmp/abc
注:安全上下文的簡單理解說明,受到selinux保護的進程只能訪問標識爲本身只夠訪問的安全上下文的文件與目錄。
例如:上面解釋爲使用smb進程可以訪問/tmp/abc目錄而設定的安全上下文。
2.getsebool命令
獲取本機selinux策略值,也稱爲bool值。
getsebool-a 命令同sestatus -b
[root@redhatfiles]# getsebool -a
NetworkManager_disable_trans--> off
allow_cvs_read_shadow--> off
allow_daemons_dump_core--> on
allow_daemons_use_tty--> off
allow_execheap--> off
allow_execmem--> on
allow_execmod--> off
allow_execstack--> on
allow_ftpd_anon_write--> off
allow_ftpd_full_access--> off
...
httpd_disable_trans--> off
說明:selinux的設置通常經過兩個部分完成的,一個是安全上下文,另外一個是策略,策略值是對安全上下文的補充。
3.setsebool命令
setsebool -Pallow_ftpd_anon_write=1
-P 是永久性設置,不然重啓以後又恢復預設值。
示例:
[root@redhatfiles]# setsebool -P allow_ftpd_anon_write=1
[root@redhatfiles]# getsebool allow_ftpd_anon_write
allow_ftpd_anon_write--> on
說明:若是僅僅是安全上下文中設置了vsftpd進程對某一個目錄的訪問,配置文件中也容許可寫,可是selinux中策略中不容許可寫,仍然不可寫。因此基於selinux保護的服務中,安全性要高於不少。
1.3 SElinux應用
selinux的設置分爲兩個部分,修改安全上下文以及策略,下面收集了一些應用的安全上下文,供配置時使用,對於策略的設置,應根據服務應用的特色來修改相應的策略值。
1.3.1 SElinux與samba
1.samba共享的文件必須用正確的selinux安全上下文標記。
chcon -R -t samba_share_t /tmp/abc
若是共享/home/abc,須要設置整個主目錄的安全上下文。
chcon -R -r samba_share_t /home
2.修改策略(只對主目錄的策略的修改)
setsebool -P samba_enable_home_dirs=1
setsebool -P allow_smbd_anon_write=1
getsebool 查看
samba_enable_home_dirs -->on
allow_smbd_anon_write --> on
1.3.2 SElinux與nfs
selinux對nfs的限制好像不是很嚴格,默認狀態下,不對nfs的安全上下文進行標記,並且在默認狀態的策略下,nfs的目標策略容許nfs_export_all_ro
nfs_export_all_ro
nfs_export_all_rw值爲0
因此說默認是容許訪問的。
可是若是共享的是/home/abc的話,須要打開相關策略對home的訪問。
setsebool -Puse_nfs_home_dirs boolean 1
getsebooluse_nfs_home_dirs
1.3.3 SElinux與ftp
1.若是ftp爲匿名用戶共享目錄的話,應修改安全上下文。
chcon -R -t public_content_t /var/ftp
chcon -R -t public_content_rw_t /var/ftp/incoming
2.策略的設置
setsebool -P allow_ftpd_anon_write =1
getsebool allow_ftpd_anon_write
allow_ftpd_anon_write--> on
1.3.4 SElinux與http
apache的主目錄若是修改成其它位置,selinux就會限制客戶的訪問。
1.修改安全上下文:
chcon -R -t httpd_sys_content_t /home/html
因爲網頁都須要進行匿名訪問,因此要容許匿名訪問。
2.修改策略:
setsebool -P allow_ftpd_anon_write = 1
setsebool -P allow_httpd_anon_write = 1
setsebool -P allow_<協議名>_anon_write =1
關閉selinux對httpd的保護
httpd_disable_trans=0
1.3.5 SElinux與公共目錄共享
若是ftp,samba,web都訪問共享目錄的話,該文件的安全上下文應爲:
public_content_t
public_content_rw_t
其它各服務的策略的bool值,應根據具體狀況作相應的修改。
1.3.6 SElinux配置總結
以上內容的selinux的配置實驗還須要進行相關驗證,以便在實際環境中可以直接應用,相關的內容還須要繼續補充。
對於多於牛毛的策略,能夠用過濾還查看一個服務至關開啓哪些策略。
------------------------------------------------------------------------------
SELinux主要配製文件
SELinux主要配製文件位於/etc/selinux/下。在網絡中的服務器,建議開啓SELinx,以提升系統的安全性。我這裏經過命令方式來改變SELinx的安全策略,就不在對SELinux的配製文件作具體說明。
SELinux經常使用的命令
ls –Z |ps –Z | id –Z
分別用於查看文件(夾)、進程和用戶的SELinx屬性。最經常使用的是ls -Z
sestatus
查看當前SELinux的運行狀態
setenforce
在SELinux爲啓動模式下,用此命令能夠暫時停用SELinux
getsebool
查看當前Policy(策略)的布爾值
setsebool
設置Policy的布爾值,以啓用或停用某項Policy
chcon
改變文件或文件夾的content標記
SELinux實用案例
SELinux對Apache的保護
新安裝的wordpress位於/vogins/share/wordpress下,按照系統的默認策略,/vogins,/vogins/share的SELinux屬性爲file_t,而這是不容許httpd進程直接訪問的。爲此,須要作以下高調整:
1) 改變/vogins,/vogins/share的SELinux屬性
Shell>chcon –t var_t /vogins
Shell>chcon –t var_t /vogins/share
2) 改變wrodpress目錄的SELinux屬性
Shell>chcon –R –t httpd_sys_content_t wordpress
3) 容許apache進程訪問mysql
setsebool -Phttpd_can_network_connect=1
4) 關於Apache裏虛擬主機的配製就裏就很少說,從新啓動apache,就能夠正常訪問wordpress
Shell>/etc/init.d/httpd start
注意:若是出現不能訪問的狀況,請查看/var/log/messages裏的日誌。通常來講,按照提示就能夠解決了。