CentOS安裝vsftpd(ftp服務器)及配置詳解

小白一枚,第一次安裝vsftpd服務器,搞了一下午,各種糾結,各種報錯,網上雖然一大堆教程,也都是各種安裝方式都有,因此,特地寫下博客記錄下,以防止以後用到,希望能幫到有需要的朋友。

vsftpd 全稱是:very secure FTP daemon 非常安全的ftp後臺程序,及ftp 服務端!

 

一:安裝vsftpd

查看是否已經安裝vsftpd

rpm -qa | grep vsftpd

如果沒有,就安裝:

yum -y install vsftpd

執行完成後,就會看到Complete!表明安裝成功了!

設置開機啓動:

chkconfig vsftpd on

安裝完成後,查看服務啓動狀態:

service vsftpd start   啓動

service vsfptd status   狀態

service vsftpd restart   重啓

service vsftpd stop   停止

在這裏大家注意點:在centos7之後,查看服務啓動就改成了 :

systemctl stop vsftpd.service

systemctl start vsftpd.service

systemctl status vsftpd.service

本人調試的centos爲6.5的版本,請大家自行查看服務器版本!

命令查看後,最後 Started vsftpd ftp daemon 已經啓動成功了

檢查端口:

netstat -anp|grep 21

ftp服務啓動的是21端口,使用如下命令應該觀察到21端口正在處於監聽狀態,這反應了ftp服務器啓動成功了。

 

二:設置用戶

要連接上 vsftpd 服務器需要爲Linux創建專門的用戶, 接下來創建這個用戶:

1:用戶目錄

在Linux中,不同用戶是有不同目錄訪問權限的,所以首先創建一個目錄,作爲這個ftp用戶所擁有的目錄。

mkdir -p /home/ftproot/ftptest

2:創建用戶

創建用戶ftptest,並且指定其目錄爲用戶目錄中創建的/home/ftproot/ftptest 

useradd -d /home/ftproot/ftptest -g ftp -s /sbin/nologin ftptest

-g ftp 表示該用戶屬於ftp分組 (ftp分組是內置的,本來就存在,不需要自己創建)
-s /sbin/nologin 表示這個用戶不能用來登錄secureCRT這樣的客戶端,這種不能登陸的用戶又叫做虛擬用戶


創建過程給出的警告信息是正常的,不用理會

3:設置目錄權限

把目錄/home/ftproot/ftptest的擁有者設置爲ftptest

chown -R ftptest /home/ftproot/ftptest

使ftptest用戶擁有這個目錄的讀寫權限

chmod -R 775 /home/ftproot/ftptest

對設置權限不懂的,請查看:Linux常用命令

4:設置密碼

爲ftptest用戶設置密碼:

passwd ftptest

密碼修改成功後會如圖所示出現成功提示。

 

三:配置用戶

要在vsftpd服務器中配置該用戶

1:去掉匿名登錄

默認情況下vsftpd服務器是允許匿名登陸的,這樣非常不安全,所以要把這個選項關閉掉。
首先通過vi命令打開ftp服務器配置文件:

vi /etc/vsftpd/vsftpd.conf

然後把本來的

anonymous_enable=YES       修改爲       anonymous_enable=NO

修改完成之後,保存退出。
對使用vi命令不熟悉的請看:Linux中Vi編輯器之簡單常用命令

2:限制用戶訪問

創建的ftptest用戶所擁有的目錄是 /home/ftproot/ftptest,如果不做限制,那麼使用ftptest登陸之後可以切換到其他敏感目錄去,比如切換到/usr目錄去,這樣就存在巨大的安全隱患。 爲了規避這個隱患,需要限制ftptest用戶只能通過ftp訪問到 /home/ftproot/ftptest 目錄以及子目錄。
配置辦法:
首先通過vi命令打開ftp服務器配置文件:

vi /etc/vsftpd/vsftpd.conf

找到:

#chroot_list_enable=YES

# (default follows)

#chroot_list_file=/etc/vsftpd.chroot_list       或   #chroot_list_file=/etc/chroot_list  

並修改爲:

chroot_list_enable=YES

# (default follows)

chroot_list_file=/etc/vsftpd/chroot_list

注:
chroot_list_enable=YES: 表示對用戶訪問進行限制
chroot_list_file=/etc/vsftpd/chroot_list 表示對chroot_list裏面指定的用戶進行限制 

修改完成之後,保存退出。

3:用戶列表

在chroot_list中添加ftptest用戶,首先通過vi命令打開chroot_list文件(此文件本來是空的):

vi /etc/vsftpd/chroot_list
然後增加一行:

ftptest


修改完成之後,保存退出。

4:允許寫權限

vsftpd服務器,一旦某個用戶被限制訪問了,那麼默認情況下,該用戶的寫權限也被剝奪了。 這就導致ftp客戶端連接上服務器之後無法上傳文件。這個時候,就需要打開此用戶的寫權限,請按照如下辦法操作:
首先通過vi命令打開ftp服務器配置文件:

vi /etc/vsftpd/vsftpd.conf

在最後面新加一行:allow_writeable_chroot=YES
修改完成之後,保存退出。

在這一塊當時糾結很久,通過百度找到一篇講解,不懂的朋友可以查看這篇博客,講解的通俗易懂!

vsftpd 配置:chroot_local_user與chroot_list_enable詳解

 

四:配置端口

vsftpd有兩種端口:

一種是21端口,用來監聽客戶端連接請求的。 這個一般說來是固定的,就一直使用21端口。
一種是,一旦獲取到請求之後,再專門用戶服務端和客戶端傳輸數據的端口。 (安裝用的這種)
 

1:配置端口

打開配置文件:

vi /etc/vsftpd/vsftpd.conf


在最後添加:

pasv_enable=YES

pasv_min_port=30000

pasv_max_port=30010

這表示使用被動模式,用於傳輸數據的端口分配從30000-30010之間。
在後續的Linux開放端口教程中也會做相應的配合工作。

 

五:用戶鑑權

因爲用戶 ftptest 是 nologin的,所以存在鑑權的問題。 如果鑑權問題不解決,就是永不停息的 530錯誤。。。搞死寶寶了
解決辦法有如下兩種:

1:方式一: pam.d/vsftpd 文件

vi /etc/pam.d/vsftpd

註釋掉/etc/pam.d/vsftpd文件裏這一行:#auth required pam_shells.so
這樣不去鑑權,從而允許 ftptest 這種 nologin用戶登錄 ftp 服務器.

2:方式二:shells 文件

vi /etc/shells

在/etc/shells文件裏面增加一行:/sbin/nologin
這樣允許不能登錄系統的用戶通過鑑權

六:重啓服務器

service vsftpd restart


但是centos7之後,改用的命令是如下方式:

systemctl restart vsftpd.service

最後執行查看狀態,以查看重啓成功了

service vsftpd status

systemctl status vsftpd.service

 

bug解決方案:開啓selinux權限

VSFTPD是一個FTP服務器程序,然後SELinux是CentOS的防火牆組件。由於 vsftpd 默認被 SELinux 攔截,所以會遇到的FTP以下的問題:

1.226 Transfer done (but failed to open directory).(傳輸完成,但是打開路徑失敗)

2.550 Failed to change directory(更改路徑失敗)

3.553 Could not create file.

4.或者乾脆在發送了LIST命令以後,服務器沒響應,超時斷開。

遇到這樣的問題,通常是vsftpd 沒有足夠的權限,很有可能是被SELinux阻止了。

查看命令:getsebool -a | grep ftp

getsebool -a | grep ftpd

#以下是顯示出來的權限,off是關閉權限,on是打開權限

allow_ftpd_anon_write --> off

allow_ftpd_full_access --> off

allow_ftpd_use_cifs --> off

allow_ftpd_use_nfs --> off

ftp_home_dir --> off

ftpd_connect_db --> off

httpd_enable_ftp_server --> off

sftpd_anon_write --> off

sftpd_enable_homedirs --> off

sftpd_full_access --> off

sftpd_write_ssh_home --> off

tftp_anon_write --> off

其中,ftp_home_dirallow_ftpd_full_access必須爲on 才能使vsftpd 具有訪問ftp根目錄,以及文件傳輸等權限。

設置命令:setsebool -p xxxxxx on

setsebool -P allow_ftpd_full_access on

setsebool -P ftp_home_dir on

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章