鸟哥的 selinux 之 vsftp


原文地址:  http://vbird.dic.ksu.edu.tw/linux_basic/0440processcontrol_6.php  


情境模擬題一:透過一個網路程式 vsftpd 的服務,來瞭解到程序與 SELinux 的相關限制行為:


  • 目標:瞭解軟體、程式、程序、優先執行緒、網路程序與 SELinux 的相關性
  • 需求:已經知道如何安裝軟體,否則就得要連上 Internet 才能進行 vsftpd 服務的安裝;

底下的流程先看看即可,很多資料如果當初忘記安裝的話,可能會無法進行。沒關係!後續的文章看完後,第二次讀到這裡後, 你就會知道如何處理了。

  1. 先察看有無安裝 vsftpd 這個軟體,如果有的話那就 OK ~沒有的話,可能需要線上安裝才行:
    [root@www ~]# rpm -q vsftpd
    vsftpd-2.0.5-12.el5   <==出現這個才是對的!若沒有出現,就是沒安裝
    
    # 如果沒有安裝的話,你又已經有 IP 可以上網了,那麼就這樣安裝:
    [root@www ~]# yum install vsftpd 
    

  2. 啟動 vsftpd 這個服務:
    [root@www ~]# /etc/init.d/vsftpd start
    

  3. 假設 vsftpd 這個服務並不是那麼重要,因此我想要在這次啟動期間,讓 vsftpd 的優先執行緒較不優先 10 分, 可以這麼做:
    [root@www ~]# pstree -p | grep vsftpd
            |-vsftpd(2377)   <==找到了 PID 為 2377 喔!
    [root@www ~]# renice 10 2377
    [root@www ~]# top -p grep 2377 <==重點是在觀察!
    

  4. vsftpd 是個網路服務,他到底是啟動哪個埠口?可以這樣觀察:
    [root@www ~]# netstat -tlunp | grep vsftpd
    tcp  0 0 0.0.0.0:21     0.0.0.0:*  LISTEN   2377/vsftpd
    # 這樣的答案夠明顯了嗎?
    

  5. 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
    ....(底下省略)....
    

  6. 好了,現在讓我們處理一下上面的 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 沒有這麼難處理的啦!^_^


你可能感兴趣的:(centos,command,System,Access,internet,login)