本篇主要講解手動搭建FTP服務(wù)器并簡單使用FTP服務(wù)的整個過程,以及遇到的一些問題和解決辦法。環(huán)境配置為:CentOS 6.5(FTP server) + Windows 7(FTP client), 由于囊中羞澀,整個環(huán)境在VMware Workstation 12 Pro中搭建
1. 安裝vsftp服務(wù)器
有了yum,包的安裝簡直輕松加愉快,這里我們安裝的是vsftpd服務(wù)器。vsftpd是“Very Secure FTP Daemon”的縮寫,其是在類UNIX操作系統(tǒng)中廣受推崇的免費(fèi)開源服務(wù)器,其特點(diǎn)是小巧輕快,安全易用。類似的FTP服務(wù)器還有ProFTPD、PureFTPd和wuftpd等
yum install vsftpd
2. 將vsftpd服務(wù)設(shè)置為開機(jī)啟動
chkconfig vsftpd on
????查看服務(wù)啟動設(shè)置情況
chkconfig vsftpd --list | grep vsftpd
3. 配置防火墻規(guī)則
這里是值得注意的地方,如果想要短平快地搭建測試,完全可以直接關(guān)閉防護(hù)墻(service iptables stop)。如果模擬實(shí)際應(yīng)用場景,還是要根據(jù)vsftpd服務(wù)的需要配置相應(yīng)的防火墻規(guī)則
FTP服務(wù)的端口是21,這個菜鳥工程師都會知道,vsftpd是FTP服務(wù)器,所以在這個環(huán)境下正是它使用這個21端口。我們可以修改/etc/sysconfig/iptables配置文件,或者直接使用命令:
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
service iptables save
service iptables restart
值得注意的是,如果不執(zhí)行service iptables save,任何stop/restart命令會沖掉手動做的iptable的修改!
4. 創(chuàng)建FTP用戶
這一布的目的是指定FTP登錄的用戶,以及這個專屬用戶的home目錄,并限制這個用戶的登錄選項
useradd ftpuser -d /home/ftpuser -s /sbin/nologin
passwd ftpuser
這里的 -d 指定了該用戶的home目錄,而 -s 則指定了這個用戶的登錄shell。 這里的/sbin/nologin的意義在于不允許該用戶以shell的方式登錄系統(tǒng),哪怕這個用戶設(shè)置了登錄密碼。下面是和正常能登錄系統(tǒng)的用戶對比,在/etc/passwd 配置文件中是這個樣子:
這還沒完,新創(chuàng)建的ftpuser應(yīng)該對自己的home目錄有完全的訪問控制權(quán)限,我們整個過程中一直在使用root用戶在操作,所以要將目錄的權(quán)限做一個轉(zhuǎn)移
chown -R ftpuser:ftpuser /home/ftpuser
5. 修改vsftpd的配置文件
vsftpd的配置文件在/etc/vsftpd/vsftpd.conf,? vsftpd服務(wù)提供的配置參數(shù)非常多,因此用戶可以依據(jù)自身的需求靈活地控制服務(wù)訪問,關(guān)于vsftpd的配置參數(shù)可以單獨(dú)寫一篇文章來詳細(xì)闡述,這里就不一一探討了。以下是我的配置參數(shù):
anonymous_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
其中, chroot_local_user=YES 參數(shù)非常重要,在此先埋一個坑:P? 修改完成后重啟vsftpd服務(wù)
service vsftpd restart
6. 配置SELinux
這里是另一個需要注意的地方,不正確的SELinux設(shè)置會導(dǎo)致FTP client登錄FTP server 報錯。如果現(xiàn)在嘗試從Windows實(shí)驗機(jī)嘗試登錄FTP server,會遇到如下圖所展示的500 OOPS:cannot change directory 錯誤:
下面是RCA環(huán)節(jié):
默認(rèn)情況下,在CentOS 6.5, SElinux是打開的,這是鋪墊。我知道你想看SElinux的配置文件,它的位置在 /etc/selinux/config。Again,如果要短平快地搭建環(huán)境,可以通過以下命令暫時關(guān)閉SElinux,注意這個命令只在重啟前有效。想完全關(guān)閉的重啟也有效的話,只能修改配置文件
setenforce 0
那么為什么SElinux會影響FTP服務(wù)呢?我們先得把剛才埋的梗拿出來,對你猜到了,就是剛才vsftpd配置文件里的chroot_local_user=YES。這個參數(shù)的含義是,限定FTP登錄用戶的根目錄。在我們的實(shí)驗里,ftpuser的根目錄被限定在/home/ftpuser,如此,ftpuser便無法離開這個目錄,管理員就不必?fù)?dān)心這個用戶去到/etc等系統(tǒng)重要目錄里胡作非為啦。很安全很美好很和諧對不對?
如果Linux的安全設(shè)置有這么簡單,那它跟Windows還有什么區(qū)別(強(qiáng)行黑一把win嘿嘿嘿)。SElinux提供了基本配置之外的加強(qiáng)安全控制,在我們這個實(shí)驗里,正是因為SElinux限制了FTP daemon訪問用戶的/home目錄,所以才有了我們看到的cannot change directory 錯誤。想要查看SElinux對FTP daemon的控制,可以通過以下命令查看:
getsebool -a | grep ftp
這里的罪魁禍?zhǔn)资莂llow_ftpd_full_access,它被禁用了,而我們需要允許這個選項,命令如下,其中 -P 是保存選項,這樣就不必每次重啟都修改SElinux規(guī)則了。
setsebool -P allow_ftpd_full_access 1
7. 連接FTP server
所有的安裝配置工作已經(jīng)完成,現(xiàn)在就可以從客戶端連接訪問FTP服務(wù)器了。這里我們從Windows端登錄,輸入用戶名密碼后,成功登錄FTP服務(wù)器。然后我們用ls命令看到了事先放置在/home/ftpuser目錄下的兩個文件。接下來我們嘗試用binary模式下載文件,下載成功。大功告成Hooray!!