近來一直研究如何在linux下搭建ftp服務器,在搭建過程中走了很多彎路,一直遲遲不能搭建成功,終於通過網友提供的方法,搭建成功
現在講搭建過程分享一下
第一步:首先判斷是否已安裝vsftpd, 執行命令:
rpm -qa | grep vsftpd
已安裝返回vsftpd版本號,未安裝沒有提示。
第二步:安裝vsftpd
命令:yum -y install vsftpd
第三步:安裝vsftpd后,開始搭建vsftpd
1.首先創建ftp文件夾根目錄,位置任意,我創建在/home/下創建ftproot文件夾。在ftproot文件夾下可以創建多個用戶對應自己的根目錄文件夾
mkdir -p /home/ftproot/ftptest
2.創建用戶
創建用戶時要並且指定其目錄為用戶目錄中創建的 /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,后期可以通過vsftpd.conf的配置文件直接對應到此文件夾下
chown -R ftptest /home/ftproot/ftptest
使ftptest用戶擁有這個目錄的讀寫權限
chmod -R 775 /home/ftproot/ftptest
4:設置密碼
passwd ftptest
輸入兩次密碼,密碼設置成功
第四步:配置vsftpd.conf文件
vi /etc/vsftpd/vsftpd.conf
修改配置文件如下:
anonymous_enable=NO 禁止匿名用戶登錄
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里面指定的用戶進行限制
創建的ftptest用戶所擁有的目錄是 /home/ftproot/ftptest,如果不做限制,那么使用ftptest登陸之后可以切換到其他敏感目錄去,比如切換到/usr目錄去,這樣就存在巨大的安全隱患。 為了規避這個隱患,需要限制ftptest用戶只能通過ftp訪問到 /home/ftproot/ftptest 目錄以及子目錄。
vsftpd.conf配置文件增加如下幾行:
allow_writeable_chroot=YES 打開用戶上傳文件的的讀寫權限(必須)
以下三行新增配置,我本人測試后,不添加三行,也不影響用戶文件的上傳,,姑且保留,如有哪位網友知道原因,可以給我留言
pasv_enable=YES
pasv_min_port=3000
pasv_max_port=30010
這表示使用被動模式,用於傳輸數據的端口分配從30000-30010之間。
配置用戶列表
在/etc/vsftpd/下新增文件chroot_list ,此文件和上面的路徑對應
命令:vi /etc/vsftpd/chroot_list
插入用戶:ftptest,如果有其他用戶可以在此文件中添加,新添加的用戶訪問根目錄同上面的第二步
保存文件退出。
五:用戶鑒權
因為用戶 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
到此vsftpd服務器搭建完成,可以通過上面創建的用戶進行測試
總結:最好將selinux和防火牆都關閉,要不開發的開端口的還需要在防火牆上做規則,關閉后,就不需要做啥規則了。
關閉selinux方法,參考https://www.cnblogs.com/liuzgg/p/11656532.html
關閉防火牆方法:systemctl stop firewalld
在連接過程中,有時報530 login incorrect 錯誤,看看
vi /etc/pam.d/vsftpd 文件是否已注釋掉鑒權。
參考:https://blog.csdn.net/zwd926/article/details/89884089