一、selinux
1.說明
SELinux 是 Security-Enhanced Linux 的縮寫,意思是安全強化的 linux;
SELinux 主要由美國國家安全局(NSA)開發,當初開發的目的是為了避免資源的誤用
DAC(Discretionary Access Control)自主訪問控制系統 |
MAC(Mandatory Access Control)強制訪問控制系統 |
2.工作原理
SELinux 是通過 MAC 的方式來控制管理進程,它控制的主體是進程,而目標則是該進程能否讀取的文件資源
主體(subject):就是進程; |
目標(object):被主體訪問的資源,可以是文件、目錄、端口等; |
策略(policy):由于進程與文件數量龐大,因此 SELinux 會依據某些服務來制定基本的訪問安全策略。這些策略內還會有詳細的規則(rule)來指定不同的服務開放某些資源的訪問與否。目前主要的策略有:
|
安全上下文(security context):主體能不能訪問目標除了策略指定外,主體與目標的安全上下文必須一致才能夠順利訪問。 最終文件的成功訪問還是與文件系統的 rwx 權限設置有關 |
大部分網絡服務程序的進程訪問目標對象(目錄、文件、端口)進行標簽匹配。如果目標對象使用戶自定義的必須要更改標簽
查看文件的安全上下文:
[root@localhost ~]# ls -Z
安全上下文用冒號分為四個字段:
① unconfined_u ② object_r ③ admin_home_t ④ s0
① 身份標識(Identify):相當于賬號方面的身份標識,主要有以下三種常見的類型: root:表示root的賬號身份; system_u:表示程序方面的標識,通常就是進程; unconfined_u:代表的是一般用戶賬號相關的身份; |
② 角色(role):通過角色字段,可知道這個數據是屬于程序、文件資源還是代表用戶。一般角色有: object_r:代表的是文件或目錄等文件資源; system_r:代表的是進程; |
③ 類型(type):在默認的targeted策略中,Identify與role字段基本上是不重要的,重要的在于這個類型字段。而類型字段在文件與進程的定義不太相同,分別是: content標簽 type:在文件資源上面稱為類型; domain:在主體程序中則稱為域;xxxx_xxx_xxx_t domain需要與type搭配,則該程序才能夠順利讀取文件資源; |
④ 最后一個字段是和MLS和MCS相關的東西,代表靈敏度,一般用s0、s1、s2來命名,數字代表靈敏度的分級。數值越大、靈敏度越高 s0:不開啟級別控制; s1:開啟級別并嚴格執行; s2:相對 s1 而言較為寬松,不是很嚴格 |
3.啟動、關閉與查看
① selinux 的三種模式:
enforcing:強制模式,代表SELinux正在運行中,開始限制 domain/type; |
permissive:寬容模式,代表 SELinux 正在運行中,不過僅會有警告信息并不會實際限制 domain/type 的訪問; |
disabled:關閉,SELinux 并沒有實際運行 |
①
# 查看目前的selinux模式
[root@localhost ~]# getenforce
Enforcing # 強制模式②
# 查看目前selinux使用的策略
[root@localhost ~]# sestatus
SELinux status: enabled # SELinux已加載并運行,若為disabled,則完全關閉
SELinuxfs mount: /sys/fs/selinux # SELinux的虛擬文件系統掛載點
SELinux root directory: /etc/selinux # SELinux主配置目錄
Loaded policy name: targeted # 當前加載的策略名稱
Current mode: enforcing # 當前運行模式
Mode from config file: enforcing # 配置文件中設置的模式
Policy MLS status: enabled # 是否啟用多級安全(Multi-Level Security)
Policy deny_unknown status: allowed # 未知類型的操作默認處理方式
Memory protection checking: actual (secure) # 內存保護檢查級別
Max kernel policy version: 33 # 內核支持的最高策略版本③
# 查看selinux的策略
[root@localhost ~]# vim /etc/selinux/config
SELINUX=enforcing # 沒有啟動selinux模塊再次啟動selinux模塊時,系統每個文件都會設置selinux標簽
SELINUXTYPE=targeted改變策略之后需要重新啟動;如果由enforcing或permissive改成disabled,或由disabled改為其它兩個,也必須要重新啟動;將selinux模式在enforcing和permissive之間切換的方法為:setenforce 0 轉換成permissive寬容模式setenforce 1轉換成enforcing強制模式
② 實驗一:使用 httpd 服務演示安全上下文值的設定
臨時生效 (chcon = change context)chcon [-R] [-t type] [-u user] [-r role] 文件
-R:連同該目錄下的子目錄也同時修改;
-t:后面接安全上下文的類型字段;
-u:后面接身份識別;
-r:后面接角色
chcon [-R] --reference=范例文件 文件 將文件的安全上下文按照范例文件修改
# 原index.html安全上下文
[root@localhost ~]# ll -Z /www/index.html
-rw-r--r--. 1 root root unconfined_u:object_r:default_t:s0 12 5月 26 16:19 /www/index.html# 經過代碼更改:
[root@localhost ~]# ll -Z /usr/share/nginx/html/index.html
lrwxrwxrwx. 1 root root system_u:object_r:httpd_sys_content_t:s0 25 7月 16 20sr/share/nginx/html/index.html -> ../../testpage/index.html[root@localhost ~]# chcon -t httpd_sys_content_t /www/ -R # 修改后index.html安全上下文
[root@localhost ~]# ll -Z /www/index.html
-rw-r--r--. 1 root root unconfined_u:object_r:httpd_sys_content_t:s0 12 5月 269 /www/index.html# chcon [-R] --reference=范例文件 文件 將文件的安全上下文按照范例文件修改
[root@localhost ~]# chcon --reference /usr/share/nginx/html/ /test[root@localhost ~]# ll -Zd /test
drwxr-xr-x. 2 root root system_u:object_r:httpd_sys_content_t:s0 6 5月 26 17:00 /test
③ 重置指定文件或目錄的安全上下文
restorecon [-Rv] 文件或目錄
-R:連同子目錄一起修改;
-v:將過程顯示到屏幕上
restorecon怎么會知道每個目錄記載的默認selinux type類型呢?因為系統將每個目錄的默認selinux type類型記錄在/etc/selinux/targeted/contexts/目錄內。但是該目錄內有很多不同的數據,所以我們可以用semanage這個命令的功能來查詢與修改。
semanage {login|user|port|interface|fcontext|translation} -l # 永久更改
semanage fcontext -{a|d|m} [-frst] file_spec
-l為查詢;
-a:增加一些目錄的默認安全上下文的設置;
-m:修改;
-d:刪除;
-t:類型
restorecon [-Rv] 文件或目錄
# 原index.html安全上下文
[root@localhost ~]# ll -Z /www
-rw-r--r--. 1 root root unconfined_u:object_r:httpd_sys_content_t:s0 12 5月 269 /www# 經過代碼更改:
[root@localhost ~]# restorecon /www # 修改后index.html安全上下文
[root@localhost ~]# ll -Zd /www
drwxr-xr-x. 3 root root unconfined_u:object_r:default_t:s0 33 5月 26 16:33 /www
semanage {login|user|port|interface|fcontext|translation} -l # 永久更改
# 為SELinux添加一條持久化的文件上下文規則,確保/www目錄及其內容被標記為httpd可訪問的內容
[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t /www# 標簽未立刻改變是因為只是基于內核層做了更改,屬性依舊是原來的default
[root@localhost ~]# ll -Zd /www
drwxr-xr-x. 3 root root unconfined_u:object_r:default_t:s0 33 5月 26 16:33 /www# 進行回滾操作加載內核層信息
[root@localhost ~]# restorecon /www # 標簽永久生效
[root@localhost ~]# ll -Zd /www
drwxr-xr-x. 3 root root unconfined_u:object_r:httpd_sys_content_t:s0 33 5月 26 16:33 /www
semanage fcontext -{a|d|m} [-frst] file_spec(更改端口標簽)
[root@localhost ~]# semanage port -l | grep -w 80 # 查看80端口的SELinux規則
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 900[root@localhost ~]# semanage port -a -t http_port_t -p tcp 8909 # 添加新的HTTP端口規則[root@localhost ~]# semanage port -l | grep -w 80
http_port_t tcp 8909, 80, 81, 443, 488, 8008, 8009, 84400
總結:
selinux 訪問控制 |
1.服務配置時如果對服務程序的數據文件自定義路徑時,selinux開啟必須對數據文件的標簽進行修改; |
2.服務配置時自定義端口,需要更改端口的標簽 |
二、firewalld
1.什么是防火墻
① 防火墻:防火墻是位于內部網和外部網之間的屏障,它按照系統管理員預先定義好的規則來控制數據包的進出
② 防火墻又可以分為硬件防火墻與軟件防火墻
硬件防火墻: 由廠商設計好的主機硬件,這臺硬件防火墻的操作系統主要以提供數據包數據的過濾機制為主,并將其他不必要的功能拿掉 |