原文地址: http://vbird.dic.ksu.edu.tw/linux_basic/0440processcontrol_6.php
情境模擬題一:透過一個網路程式 vsftpd 的服務,來瞭解到程序與 SELinux 的相關限制行為:
- 目標:瞭解軟體、程式、程序、優先執行緒、網路程序與 SELinux 的相關性
- 需求:已經知道如何安裝軟體,否則就得要連上 Internet 才能進行 vsftpd 服務的安裝;
底下的流程先看看即可,很多資料如果當初忘記安裝的話,可能會無法進行。沒關係!後續的文章看完後,第二次讀到這裡後, 你就會知道如何處理了。
- 先察看有無安裝 vsftpd 這個軟體,如果有的話那就 OK ~沒有的話,可能需要線上安裝才行:
[root@www ~]# rpm -q vsftpd vsftpd-2.0.5-12.el5 <==出現這個才是對的!若沒有出現,就是沒安裝 # 如果沒有安裝的話,你又已經有 IP 可以上網了,那麼就這樣安裝: [root@www ~]# yum install vsftpd
- 啟動 vsftpd 這個服務:
[root@www ~]# /etc/init.d/vsftpd start
- 假設 vsftpd 這個服務並不是那麼重要,因此我想要在這次啟動期間,讓 vsftpd 的優先執行緒較不優先 10 分, 可以這麼做:
[root@www ~]# pstree -p | grep vsftpd |-vsftpd(2377) <==找到了 PID 為 2377 喔! [root@www ~]# renice 10 2377 [root@www ~]# top -p grep 2377 <==重點是在觀察!
- vsftpd 是個網路服務,他到底是啟動哪個埠口?可以這樣觀察:
[root@www ~]# netstat -tlunp | grep vsftpd tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 2377/vsftpd # 這樣的答案夠明顯了嗎?
- vsftpd 提供網路的 FTP 功能,有個使用者名為 vbird ,他卻無法登入自己的帳號!這是什麼原因呢? 由於 CentOS 的預設 vsftpd 是能夠允許一般用戶登入自己家目錄的,因此無法登入的可能原因是權限還是 SELinux 呢? 我們可以這樣測試看看:
# 1. 先用 vbird 的身份登入 vsftpd 看看: [root@www ~]# ftp localhost Connected to www.vbird.tsai. Name (localhost:root): vbird 331 Please specify the password. Password: <==這裡輸入 vbird 的密碼喔! 500 OOPS: cannot change directory:/home/vbird Login failed. <==見鬼了!竟然無法登入自己的家目錄 /home/vbird 哩! ftp> bye [root@www ~]# ls -ld /home/vbird drwx------ 4 vbird vbird 4096 8月 18 18:22 /home/vbird # 權限明明是對的嘛!怎麼會無法切換? # 2. 看看登錄檔有沒有什麼重要訊息的說明: [root@www ~]# tail /var/log/messages Sep 11 16:57:31 www setroubleshoot: SELinux is preventing the ftp daemon from reading users home directories (/). For complete SELinux messages. run sealert -l b8bdaf2d-b083-4e28-9465-91fae8df63b1 # 3. 照著作一下: [root@www ~]# sealert -l b8bdaf2d-b083-4e28-9465-91fae8df63b1 Summary: SELinux is preventing the ftp daemon from reading users home directories (/). ....(中間省略).... The following command will allow this access: setsebool -P ftp_home_dir=1 ....(底下省略)....
- 好了,現在讓我們處理一下上面的 vsftpd 相關的規則吧!因為是規則擋住了用戶的登入了!:
[root@www ~]# setsebool -P ftp_home_dir=1 [root@www ~]# ftp localhost Connected to www.vbird.tsai. Name (localhost:root): vbird 331 Please specify the password. Password: 230 Login successful. <==看吧!順利登入囉! Remote system type is UNIX. Using binary mode to transfer files. ftp> bye
二:
實體帳號的 SELinux 議題
在預設的情況下,CentOS 的 FTP 是不允許實體帳號登入取得家目錄資料的,這是因為 SELinux 的問題啦! 如果你在剛剛的 ftp localhost 步驟中,在 bye 離開 FTP 之前下達過『 dir 』的話,那你會發現沒有任何資料跑出來~ 這並不是你錯了,而是 SELinux 不太對勁的緣故。那如何解決呢?這樣處理即可:
[root@www ~]# getsebool -a | grep ftp allow_ftpd_anon_write --> off allow_ftpd_full_access --> off allow_ftpd_use_cifs --> off allow_ftpd_use_nfs --> off ftp_home_dir --> off <==就是這玩意兒!要設定 on 才行! ....(底下省略).... [root@www ~]# setsebool -P ftp_home_dir=1 |
這樣就搞定囉!如果還有其他可能發生錯誤的原因,包括檔案資料使用 mv 而非使用 cp 導致 SELinux 檔案類型無法繼承原有目錄的類型時,那就請自行查閱 /var/log/messages 的內容吧!通常 SELinux 沒有這麼難處理的啦!^_^