selinux實戰手冊
#selinux實戰手冊
#SELinux的策略與規則管理相關命令:seinfo命令、sesearch命令、getsebool命令、setsebool命令、semanage命令。
#selinux簡介
SELinux(Security-Enhanced Linux) 是美國國家安全域性(NSA)對於強制訪問控制的實現,是 Linux歷史上最傑出的新安全子系統。
NSA是在Linux社群的幫助下開發了一種訪問控制體系,在這種訪問控制體系的限制下,程式只能訪問那些在他的任務中所需要檔案。
RHEL、CENTOS、UBUNTU等Linux發行版系統預設都開啟了selinux安全功能,如果不熟悉用法,可直接將selinux關閉。
#selinux狀態設定
查狀態:getenforce
臨時開啟/關閉selinux:setenforce 1/0 [1開啟,0關閉]
#配置檔案:
cat /etc/selinux/config //有效配置如下:
SELINUX=enforcing //狀態為強制
SELINUXTYPE=targeted
說明:狀態有enforcing強制,permissive自由(寬容),disable禁用。
Enforcing狀態,就是你違反了策略,你就無法繼續操作下去。
permissive狀態,就是Selinux有效,但是即使你違反了策略的話它讓你繼續操作,但是把你的違反的內容記錄下來。在我們開發策略的時候非常的有用。
相當於Debug模式。
技巧:在核心載入過程中關閉selinux,grub介面執行:
kernel /boot/vmlinuz-2.6.15-1.2054_FC5 ro root=LABEL=/ rhgb quiet selinux=0
-----------------
查詢所有布林設定狀況:getsebool -a
檢視檔案的selinux上下檔案屬性:ls -Z /etc/hosts
檢視目錄的:ls -dZ /etc
chcon:更改檔案的selinux標籤
mkdir /sea
ls -dZ /sea
chcon -t etc_t /sea //給目錄/sea設定selinux安全型別
cp -Z /etc/passwd /sea/pa //複製檔案及其selinux屬性
ls -Z /sea/pa //檢視檔案的selinux屬性
-----------------
chcon命令
功能:修改物件(檔案)的安全上下文,比如:使用者、角色、型別、安全級別。也就是將每個檔案的安全環境變更至指定環境。
使用–reference選項時,把指定檔案的安全環境設定為與參考檔案相同。chcon命令位於/usr/bin/chcon。
語法:chcon [選項]… 環境 檔案…
chcon [選項]… [-u 使用者] [-r 角色] [-l 範圍] [-t 型別] 檔案…
chcon [選項]… –reference=參考檔案 檔案…
選項:–help:顯示此幫助資訊並退出。
-h, –no-dereference:影響符號連線而非引用的檔案。
–reference=參考檔案:使用指定參考檔案的安全環境,而非指定值。
-R, –recursive:遞迴處理所有的檔案及子目錄。
-v, –verbose:為處理的所有檔案顯示診斷資訊。
-u, –user=使用者:設定指定使用者的目標安全環境。
-r, –role=角色:設定指定角色的目標安全環境。
-t, –type=型別:設定指定型別的目標安全環境。
-l, –range=範圍:設定指定範圍的目標安全環境。
以下選項是在指定了-R選項時被用於設定如何穿越目錄結構體系。如果您指定了多於一個選項,那麼只有最後一個會生效。
-H:如果命令列引數是一個通到目錄的符號連結,則遍歷符號連結。
-L:遍歷每一個遇到的通到目錄的符號連結。
-P:不遍歷任何符號連結(預設)。
–version:顯示版本資訊並退出。
例項 如果你想把這個ftp共享給匿名使用者的話,需要開啟以下:
chcon -R -t public_content_t /var/ftp
如果你想讓你設定的FTP目錄可以上傳檔案的話,SELINUX需要設定:
chcon -t public_content_rw_t /var/ftp/incoming
允許使用者HHTP訪問其家目錄,該設定限僅於使用者的家目錄主頁:
setsebool -P httpd_enable_homedirs 1
chcon -R -t httpd_sys_content_t ~user/public_html
如果你希望將samba目錄共享給其他使用者,你需要設定:
chcon -t samba_share_t /directory
共享rsync目錄時:
chcon -t public_content_t /directories
-----------------
##查詢SElinux策略內各項規則的布林值。getsebool
語法:getsebool [-a] [布林值條款]
選項:-a 列出目前系統上面的所有布林值條款設定為開啟或關閉值。
例項 查詢本系統內所有的布林值設定狀況:
getsebool -a //部分結果如下
allow_ftpd_anon_write –> off //是否允許ftpd匿名寫操作,off為關,on為開
allow_ftpd_full_access –> off //是否允許ftpd完全訪問
allow_ftpd_use_cifs –> off //允許ftpd使用cifs通用網際網路檔案系統
allow_ftpd_use_nfs –> off //允許ftpd使用nfs
ftp_home_dir –> off //允許訪問ftp家目錄
ftpd_connect_db –> off //允許ftpd連線資料
ftpd_use_fusefs –> off //允許ftpd使用fusefs
ftpd_use_passive_mode –> off //允許ftpd被動模式
httpd_enable_ftp_server –> off //在httpd上啟用ftp服務
tftp_anon_write –> off //允許tftp匿名寫許可權
tftp_use_cifs –> off //允許tftp使用cifs
tftp_use_nfs –> off //允許tftp使用nfs
allow_httpd_anon_write –> off //允許httpd匿名寫許可權
httpd_enable_homedirs –> off //允許httpd訪問使用者家目錄
getsebool httpd_enable_homedirs
setsebool -P httpd_enable_homedirs=0 //0是關閉 1是開啟
——————-
##SELinux的策略與規則管理相關命令:
seinfo命令、sesearch命令、getsebool命令、setsebool命令、semanage命令。
##setsebool命令
功能:用來修改SElinux策略內各項規則的布林值。
語法:setsebool [-P] 布林值=[0|1]
選項:-P:直接將設定值寫入配置檔案,該設定資料將來會生效的。
例項 允許vsvtp匿名使用者寫入許可權:
setsebool -P allow_ftpd_anon_write=1
如果你希望你的ftp使用者可以訪問自己的家目錄的話,需要開啟:
setsebool -P ftp_home_dir 1
如果你希望將vsftpd以daemon的方式執行的話,需要開啟:
setsebool -P ftpd_is_daemon 1
你可以讓SElinux停止保護vsftpd的daemon方式動行:
setsebool -P ftpd_disable_trans 1
HTTP被設定允許cgi的設定:
setsebool -P httpd_enable_cgi 1
允許使用者HHTP訪問其家目錄,該設定限僅於使用者的家目錄主頁:
setsebool -P httpd_enable_homedirs 1
chcon -R -t httpd_sys_content_t ~user/public_html
允許httpd訪問終端: setsebool -P httpd_tty_comm 1
關閉Selinux的關於httpd程式守護的保護:
setsebool -P httpd_disable_trans 1 service httpd restart
關於named、master更新selinux設定:
setsebool -P named_write_master_zones 1
關閉named的程式守護保護:
setsebool -P named_disable_trans 1
service named restart Selinux
將本機的NFS共享設定成只讀:
setsebool -P nfs_export_all_ro 1 SElinux
將本機的NFS共享設定成可讀可寫:
setsebool -P nfs_export_all_rw 1
如果你想要將遠端NFS的家目錄共享到本機,需要開啟:
setsebool -P use_nfs_home_dirs 1
如果samba伺服器共享目錄給多個域,則需要:
setsebool -P allow_smbd_anon_write=1
samba伺服器要共享家目錄時:
setsebool -P samba_enable_home_dirs 1
如果你需在本機上使用遠端samba伺服器的家目錄:
setsebool -P use_samba_home_dirs 1
關閉selinux關於samba的程式守護的保護:
setsebool -P smbd_disable_trans 1
service smb restart
允許rsync其他使用者寫入時:
setsebool -P allow_rsync_anon_write=1
停止rsync的程式保護
setsebool -P rsync_disable_trans 1
允許系統使用kerberos:
setsebool -P allow_kerberos 1
系統工作在nis環境時:
setsebool -P allow_ypbind 1
--------------------
restorecon命令
功能:用來恢復SELinux檔案屬性即恢復檔案的安全上下文。
語法 restorecon [-iFnrRv] [-e excludedir ] [-o filename ] [-f filename | pathname…]
選項 -i:忽略不存在的檔案。
-f:infilename 檔案 infilename 中記錄要處理的檔案。
-e:directory 排除目錄。 -R/-r:遞迴處理目錄。
-n:不改變檔案標籤。
-o/outfilename:儲存檔案列表到 outfilename,在檔案不正確情況下。
-v:將過程顯示到螢幕上。
-F:強制恢復檔案安全語境。
例項:假設CentOS安裝了apache,網頁預設的主目錄是/var/www/html,我們經常遇到這樣的問題,
在其他目錄中建立了一個網頁檔案,然後用mv移動到網頁預設目錄/var/www/html中,但是在瀏覽器中
卻打不開這個檔案,這很可能是因為這個檔案的SELinux配置資訊是繼承原來那個目錄的,
與/var/www/html目錄不同,使用mv移動的時候,這個SELinux配置資訊也一起移動過來了,從而導致
無法開啟頁面,具體請看下面的例項: /*使用CentOS舉例,如果預設沒有安裝apache,確保網路連線,
使用下面的命令安裝
*/ [root@linuxde.net ~]# yum install httpd /*
我們在root的家目錄新建一個html檔案
*/ [root@linuxde.net ~]# pwd /root [root@linuxde.net ~]# vi index.html /*
隨便輸入一段文字,儲存退出
*/ welcome to www.linuxde.net /*將這個檔案mv到網頁預設目錄下*/
[root@linuxde.net ~]# mv index.html /var/www/html/
/*
* 這個時候我們使用firefox瀏覽器輸入127.0.0.1/index.html發現打不開,
* 檢視一下SELinux的日誌檔案,發現了下面這一段報錯資訊,從這個報錯資訊不難看出,
* 程式httpd訪問網頁主目錄中的index.html時被SELinux阻止,原因是因為,SELinux配置資訊不正確,
* 正確的SELinux配置資訊應該是scontext=後面的部分,
* 而index.html檔案的SELinux配置資訊卻是tcontext=後面的部分,
* 從tcontext=的第三段“admin_home_t”不難看出,這個檔案的SELinux配置資訊是root使用者家目錄的。
*/ type=AVC msg=audit(1378974214.610:465): avc: denied { open } for pid=2359
comm=”httpd” path=”/var/www/html/index.html”
dev=”sda1″ ino=1317685 scontext=system_u:system_r:httpd_t:s0
tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file
/* 使用ls -Z也可以看出,檔案和目錄的SELinux資訊不匹配*/
[root@linuxde.net html]# ls -Z /var/www/html/
…. unconfined_u:object_r:admin_home_t:s0 index.html
[root@linuxde.net html]# ls -Zd /var/www/html/
…. system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
/*使用restorecon來恢復網頁主目錄中所有檔案的SELinux配置資訊(如果目標為一個目錄,可以新增-R引數遞迴)*/
[root@linuxde.net html]# restorecon -R /var/www/html/
-------------------
seinfo命令
功能:是用來查詢SELinux的策略提供多少相關規則,一個主體程式能否讀取到目標檔案資源的重點是在於SELinux的策略以及策略內的各項規則,
然後再通過該規則的定義去處理各專案標檔案的安全上下文,尤其是“型別”部分。
語法 seinfo(選項)
選項 -A:列出SELinux的狀態、規則布林值、身份識別、角色、型別等所有資訊。
-t:列出SELinux所有型別(type)的種類。
-r:列出SELinux所有角色(role)的種類。
-u:列出SELinux所有身份識別(user)的種類。
-b:列出所有規則的種類(布林值)。
例項 列出與httpd有關的規則:
seinfo -b | grep httpd
-------------------
semanage命令
功能:是用來查詢與修改SELinux預設目錄的安全上下文。
SELinux的策略與規則管理相關命令:seinfo命令、sesearch命令、getsebool命令、setsebool命令、semanage命令。
語法:semanage {login|user|port|interface|fcontext|translation} -l
semanage fcontext -{a|d|m} [-frst] file_spec
選項 -l:查詢。 fcontext:主要用在安全上下文方面。
-a:增加,你可以增加一些目錄的預設安全上下文型別設定。
-m:修改。 -d:刪除。
例項 查詢一下/var/www/html的預設安全性本文的設定:
semanage fcontext -l SELinux fcontext type Context
….(前面省略)…. /var/www(/.*)? all files system_u:object_r:httpd_sys_content_t:s0 ….(後面省略)….
說明:如上面例子所示,我們可以查詢的到每個目錄的安全性本文!而目錄的設定可以使用正規表示式去指定一個範圍。
那麼如果我們想要增加某些自定義目錄的安全性本文呢?舉例來說,我想要色設定/srv/samba成為 public_content_t的型別時,
應該如何設定呢? 用semanage命令設定/srv/samba目錄的預設安全性本文為public_content_t:
mkdir /srv/samba ll -Zd /srv/samba drwxr-xr-x root root root:object_r:var_t /srv/samba
如上所示,預設的情況應該是var_t這個咚咚的!
semanage fcontext -l | grep `/srv` /srv/.*
all files system_u:object_r:var_t:s0 /srv/([^/]*/)?ftp(/.*)?
all files system_u:object_r:public_content_t:s0 /srv/([^/]*/)?www(/.*)?
all files system_u:object_r:httpd_sys_content_t:s0 /srv/([^/]*/)?rsync(/.*)?
all files system_u:object_r:public_content_t:s0 /srv/gallery2(/.*)?
all files system_u:object_r:httpd_sys_content_t:s0 /srv directory system_u:object_r:var_t:s0
//看這裡! 上面則是預設的/srv底下的安全性本文資料,不過,並沒有指定到/srv/samba。
semanage fcontext -a -t public_content_t “/srv/samba(/.*)?”
semanage fcontext -l | grep `/srv/samba` /srv/samba(/.*)?
all files system_u:object_r:public_content_t:s0
cat /etc/selinux/targeted/contexts/files/file_contexts.local
# This file is auto-generated by libsemanage
# Please use the semanage command to make changes /srv/samba(/.*)?
system_u:object_r:public_content_t:s0 #寫入這個檔案 restorecon -Rv /srv/samba*
#嘗試恢復預設值 ll -Zd /srv/samba
drwxr-xr-x root root system_u:object_r:public_content_t /srv/samba/
#有預設值,以後用restorecon命令來修改比較簡單!
semanage命令的功能很多,這裡主要用到的僅有fcontext這個選項的用法而已。
如上所示,你可以使用semanage來查詢所有的目錄預設值,也能夠使用它來增加預設值的設定!
-------------------------
seinfo命令
功能:使用seinfo命令可以查詢SELinux的策略提供多少相關規則,如果查到的相關型別或者布林值,想要知道詳細規則時,使用sesearch命令查詢。
語法:sesearch [-a] [-s 主體型別] [-t 目標型別] [-b 布林值]
選項:-a:列出該型別或布林值的所有相關資訊
-t:後面還要接型別,例如 -t httpd_t
-b:後面還要接布林值的規則,例如 -b httpd_enable_ftp_server
例項 找出目標檔案資源型別為httpd_sys_content_t的有關資訊:
sesearch -a -t httpd_sys_content_t
找出主體程式為httpd_t且目標檔案型別為httpd相關的所有資訊:
sesearch -s httpd_t -t httpd_* -a
檢視布林值httpd_enable_homedirs設定了多少規則:
sesearch -b httpd_enable_homedirs -a
本文轉自rshare 51CTO部落格,原文連結:http://blog.51cto.com/1364952/1952219,如需轉載請自行聯絡原作者
相關文章
- LINKERD 2.11 中文實戰手冊
- [譯] Vue Router 實戰手冊Vue
- Flutter移動端實戰手冊Flutter
- F5 api介面開發實戰手冊(二)API
- Vue第三方庫與外掛實戰手冊Vue
- SELinux: 如何讓selinux對某些命令放行,自定義selinux規則。Linux
- switch_selinux.sh | 開啟或禁用SELinuxLinux
- 巨量算數:2022汽車直播價值及實戰手冊(附下載)
- 電子創客案例手冊 Arduino和Raspberry Pi電子製作實戰UI
- 手冊
- 微軟:2020零售趨勢戰術手冊微軟
- 網路應用扛把子Netty!騰訊高工手寫“Netty速成手冊”,3天帶你走向實戰Netty
- xlam外掛製作實驗手冊
- 如何遷移開源 Flink 任務到實時計算Flink版?實戰手冊來幫忙!
- [填坑手冊]小程式新版訂閱訊息+雲開發實戰與跳坑
- 【晶片手冊開發】Sil9136音訊開發詳細分析+原始碼實戰晶片音訊原始碼
- SELinux 安全模型——TELinux模型
- SELinux如何永久禁用Linux
- Spring Cloud 實戰一:服務註冊中心SpringCloud
- Redis手冊Redis
- SparkSQL手冊SparkSQL
- MongoDB手冊MongoDB
- 前端手冊前端
- 什麼是seLinux?Linux關閉seLinux有什麼影響?Linux
- Linux中selinux是什麼意思?SELinux的主要作用有哪些?Linux
- 前端學習實用工具及手冊自取前端
- Netflix 混沌工程手冊 Part 3:實踐方法
- Android SELinux許可權AndroidLinux
- CentOS 8 禁用 SELinux 教程CentOSLinux
- 在 Linux 上用 SELinux 或 AppArmor 實現強制訪LinuxAPP
- RPA 快速手冊
- CMD命令手冊
- Nmap速查手冊
- JVM指令手冊JVM
- TypeScript中文手冊TypeScript
- JS速查手冊JS
- Walk手冊(一)
- 微服務實踐手冊-服務的拆分策略微服務
- ProxySQL實現Mysql讀寫分離 - 部署手冊MySql