iT邦幫忙

DAY 27
4

邁向 RHCE 之路系列 第 27

邁向 RHCE 之路 (Day27) - vsftp 檔案傳輸伺服器

本篇將在 SELinux 安全機制及 IPTables 防火牆開啟的環境下實作,限制匿名者 FTP 登入後僅可下載檔案無法上傳並且被限制在 /home/user/guest 資料夾內 (chroot 機制),而一般使用者帳號則可以在自已的家目錄下新增刪除檔案及資料夾,關於 vsftp 檔案傳輸伺服器內容及更詳細設定參數可以參考官方文件 RedHat - Deployment Guide Chapter 17.2 FTP 。以下為 vsftp 檔案傳輸伺服器實作環境:

* OS: CentOS 6.0 (32 bit)
* vsftp 套件資訊: vsftpd-2.2.2-6.el6_0.1.i686
* vsftp 設定檔: /etc/vsftpd/vsftpd.conf
* IPTables 防火牆: TCP 協定 Port 21
* SELinux 權限: public_content_t、user_home_dir_t、ftp_home_dir=1
* vsftp 根目錄預設路徑: /var/ftp
* vsftp 根目錄變更後路徑: /home/user

---- 安裝 vsftp 網頁伺服器套件 -----
請使用 yum 指令搭配 vsftp 套件名稱 vsftpd 即可進行套件安裝。

#yum -y install vsftpd             //安裝 vsftp 套件
#rpm -qa vsftpd                    //查詢 vsftp 套件版本
 vsftpd-2.2.2-6.el6_0.1.i686
#rpm -qc vsftpd |grep vsftpd.conf  //查詢 vsftp 設定檔路徑
 /etc/vsftpd/vsftpd.conf

----- 設定 IPTables 防火牆規則 -----
vsftp 網頁伺服器屆時服務啟動時會 Listen TCP 協定 Port 21,因此我們必須修改 IPTables 防火牆規則以便等一下進行測試,請修改 IPTables 防火牆規則設定檔**「/etc/sysconfig/iptables」加上允許 TCP Port 21 的規則,除此之外還必須修改 IPTables防火牆模組設定檔「/etc/sysconfig/iptables-config」加上「ip_conntrack_ftp」**項目,否則屆時 FTP Client 將會發生連線逾時的錯誤,修改防火牆規則後請使用指令「service iptables restart」來重新啟動防火牆服務,以便防火牆規則套用生效,並且使用「service iptables status」指令來確定目前防火牆規則是否有允許 TCP Port 21。

#vi /etc/sysconfig/iptables         //修改防火牆規則(加入如下二行)
 -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
#vi /etc/sysconfig/iptables-config
IPTABLES_MODULES=""                 //預設值,未載入任何模組
IPTABLES_MODULES="ip_conntrack_ftp" //修改後
#service iptables restart           //重新啟動防火牆服務
 ...略...
 iptables: Loading additional modules: ip_conntrack_ftp     [  OK  ]  //載入成功
#service iptables status | grep 21  //查看防火牆規則是否套用生效
 4  ACCEPT tcp  --  0.0.0.0/0  0.0.0.0/0   state NEW tcp dpt:21
#chkconfig vsftpd on                //開機自動啟動 vsftp 服務

----- 修改 vsftp 設定檔 -----
修改 vsftp 設定檔「/etc/vsftpd/vsftpd.conf」,新增**「local_root=/home/user」內容,其意義為 /home/user 資料夾為所有登入 FTP 伺服器的使用者預設根路徑,匿名者登入家目錄由預設的「/var/ftp」改為「/home/user/guest」**只能下載無法上傳,下列為修改內容:

#vi /etc/vsftpd/vsftpd.conf     //修改 vsftp 設定檔
 local_root=/home/user          //加上此行
#vipw
 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin          //預設值(匿名者 FTP 家目錄)
 ftp:x:14:50:FTP User:/home/user/guest:/sbin/nologin  //修改後

由於先前便規劃使用者帳號都存放於 /home/user 下,所以僅建立匿名者 FTP 資料夾及設定權限即可。

#mkdir /home/user/guest
#ls -l /home/user/
 drwxr-xr-x.  2 root     root     4096 Oct 31 17:20 guest
 drwx------. 21 weithenn weithenn 4096 Oct 24 12:44 weithenn

----- 修改 SELinux 設定值 -----
修改 SELinux 安全機制的設定值,因為將 FTP 使用者根目錄由 「/var/ftp」 修改至 「/home/user」,因此新的 /home/user 資料夾其 SELinux 安全機制的權限勢必與原來的 /var/ftp 資料夾不同,若不進行修改的話屆時啟動 vsftp 服務時便可能會因為 SELinux 權限問題造成無法啟動 vsftp 服務的狀況。

#ls -dZ /var/ftp /home/user
 drwxr-xr-x. root root unconfined_u:object_r:home_root_t:s0 /home/user
 drwxr-xr-x. root root system_u:object_r:public_content_t:s0 /var/ftp

接著透過**「semanage fcontext -a -t」指令配合 SELinux 權限「public_content_t」,指定「/home/user」資料夾設定此權限為「SELinux預設權限」,而使用者個人資料夾則設定為「user_home_dir_t」**,之後使用「restorecon -Rv」指令把 /home/user 相關資料夾還原至剛才設定的 SELinux 預設權限,若執行 semanage 指令發現系統中沒有此一指令請安裝 policycoreutils-python 套件即可(yum -y install policycoreutils-python)。

#semanage fcontext -a -t public_content_t "/home/user(/.*)?"  //設定 SELinux 預設權限
#semanage fcontext -a -t user_home_dir_t "/home/user/weithenn(/.*)?"
#restorecon -Rv /home/user          //還原 SELinux 權限       
#ls -dZ /var/ftp /home/user /home/user/{guest,weithenn}       //查看資料夾 SELinux 權限
 drwxr-xr-x. root     root     unconfined_u:object_r:home_root_t:s0 /home/user
 drwxr-xr-x. root     root     system_u:object_r:public_content_t:s0 /home/user/guest
 drwx------. weithenn weithenn system_u:object_r:user_home_dir_t:s0 /home/user/weithenn
 drwxr-xr-x. root     root     system_u:object_r:public_content_t:s0 /var/ftp

最後則是要將相關的 SELinux 安全機制的布林值打開,將「ftp_home_dir」設定為 1 也就是 Enable 功能,如此一來使用者才可讀寫自已的家目錄。

#setsebool -P ftp_home_dir=1     //開啟 SELinux 安全機制的布林值
#getsebool -a |grep ftp_home_dir //查詢是否設定成功
 ftp_home_dir --> on

----- 啟動 vsftp 服務 -----
完成修改 SELinux 安全機制權限設定後,我們可以放心啟動 vsftp 服務,請使用指令「service vsftpd start」來啟動 vsftp 服務,並且於服務啟動後使用「netstat」指令來查看系統是否開啟了 TCP Port 21,以及使用「ps」指令來查看 vsftp 執行序(vsftpd)是否運作。

#service vsftpd start        //啟動 vsftp 服務
 Starting vsftpd for vsftpd:                                [  OK  ]
#netstat -tunpl | grep :21  //查看是否開啟 Port 21
 tcp  0  0 0.0.0.0:21  0.0.0.0:*   LISTEN    1637/vsftpd
#ps aux |grep vsftpd         //查看 vsftpd 執行序
 root  1637  0.0  0.0  6572   576 ?  Ss  17:32  0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
#echo 'test' > /home/user/guest/test.txt  //建立匿名者可下載的測試檔案

啟動 vsftp 服務成功後,便可開啟 FTP Client (例如 FileZilla Client) 進行測試,以便驗證 vsftp 服務是否真的運作,如下操作中匿名者可順利下載其家目錄「/home/user/guest」內的檔案,而使用者 weithenn 可以在自已的家目錄「/home/user/weithenn」上傳下載檔案。

(上一篇)邁向 RHCE 之路 (Day26) - Apache 網頁伺服器
(下一篇)邁向 RHCE 之路 (Day28) - NFS 檔案分享伺服器
邁向 RHCE 之路系列文章連結


上一篇
邁向 RHCE 之路 (Day26) - Apache 網頁伺服器
下一篇
邁向 RHCE 之路 (Day28) - NFS 檔案分享伺服器
系列文
邁向 RHCE 之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言