先說說前置準備工作。
用root 進入系統
使用命令 rpm -qa|grep vsftpd 查看系統是否安裝了ftp,若安裝了vsftp,使用這個命令會在屏幕上顯示vsftpd的版本
使用命令rpm -e vsftpd 即可卸載ftp
再使用rpm -qa|grep vsftpd 查看系統是否已刪除ftp,若刪除成功,屏幕上顯示vsftpd的版本
安裝vsftpd
查看是否已經安裝vsftpd
rpm -qa | grep vsftpd
如果沒有,就安裝,並設置開機啓動
yum -y install vsftpd chkconfig vsftpd on
安裝時發現錯誤:
Loaded plugins: fastestmirror, refresh-packagekit, security Loading mirror speeds from cached hostfile Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=6&arch=x86_64&repo=os error was 14: PYCURL ERROR 6 - "Couldn't resolve host 'mirrorlist.centos.org'" Error: Cannot find a valid baseurl for repo: base
是因爲缺少DNS,解決如下:到/etc目錄下配置resolv.conf加入nameserver IP:
[root@localhost ~]# vi /etc/resolv.conf
#下面地址是福建電信DNS nameserver 218.85.157.99
管理vsftpd相關命令
啓動vsftpd:
service vsftpd start
停止vsftpd:
service vsftpd stop
重啓vsftpd:
service vsftpd restart
配置防火牆
打開/etc/sysconfig/iptables文档
vi /etc/sysconfig/iptables
在REJECT行之前添加如下代碼,如果提示代碼不正確無法啓動iptables了,那就按照原來的配置文档前幾行的ACCEPT命令搬運過來。
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
保存和關閉文档,重啓防火牆
service iptables start
配置vsftpd服務器
1.默認的配置文档是/etc/vsftpd/vsftpd.conf,你可以用文本編輯器打開。
vi /etc/vsftpd/vsftpd.conf
2.添加ftp用戶
重頭戲來了, 下面是添加ftpuser用戶,設置根目錄爲/home/wwwroot/ftpuser, 禁止此用戶登錄SSH的權限,並限制其訪問其它目錄。
#chroot_list_enable=YES # (default follows) #chroot_list_file=/etc/vsftpd.chroot_list
改爲
chroot_list_enable=YES # (default follows) chroot_list_file=/etc/vsftpd/chroot_list
網上有人四處抄文章抄錯了,說這個chroot_list_enable=YES代表意思是,寫到chroot_list指定文档裡的用戶名單是注入特權的,可以隨便到主機裡處瞧文档的,這弄反了。chroot_list_enable代表是否啓用目錄鎖定的用戶名單。
vsftpd.conf這個配置文档等號後邊寫著大寫的YES就不要夾帶空格或者其他小寫字母,避免不能正確讀取配置。
3.增加用戶ftpuser和對應的用戶組,指向目錄/home/wwwroot/ftpuser,禁止登錄SSH權限。
groupadd 用戶組名
這一步指定-s參數/sbin/nologin會在centos 8.0會引起問題,報530登錄錯誤。但請不要用/usr/bin/bash這種方式放行,相見本篇尾部對應解決方案。
useradd -d /home/wwwroot/ftpuser -g 用戶組名 -s /sbin/nologin ftpuser
4.設置用戶口令
passwd ftpuser
5、編輯目錄受限用戶名單chroot_list:
vi /etc/vsftpd/chroot_list
内容爲ftp用戶名,每個用戶佔一行,如:
peter john
6、修改ftp耑口
在/etc/vsftpd/vsftpd.conf當中加入一項:
listen_port=新耑口號
7、重新啓動vsftpd
service vsftpd restart
疑難錯誤解決
正常的流程說完了, 現在說一下錯誤故障解決的。
centos 8.0在客戶耑報錯530 login incorrect
vim打開/etc/pam.d/vsftpd
發現有一行配置代碼
auth required pam_shells.so
OK,就是它的問題,注釋掉。
配置好了, 賬號密碼正確, 還是報錯 530 permission denied
vim打開/etc/vsftpd/vsftpd.conf這個文档
找到
userlist_enable=YES
改爲
userlist_enable=NO
和上文說的一樣, 這個也是個黑白名單機制,我們已經有了chroot_list白名單機制了, 調這個何用。
客戶耑報錯 500 Illegal PORT command
如果你使用filezilla軟體可能會報這個錯誤, 需要在客戶耑裡配置一下, 把傳輸模式從默認改爲“主動模式”。
關於錯誤的原理,勞煩兄台自己上網搜一搜吧,這裡就不細講解了。
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
vim打開/etc/vsftpd/vsftpd.conf,增加一段配置代碼:
對於標準的vsftpd build (vsftpd):
allow_writeable_chroot=YES
對於擴展的vsftpd build (vsftpd-ext):
allow_writable_chroot=YES