之前我都是通过 scp
传输文件,实在不是很方便。
scp -P 1022 /Users/xxx/ftp/vsftpd.conf [email protected]:/etc/vsftpd
于是一步步根据腾讯云的文档 Linux 云服务器搭建 FTP 服务 ,记录如下:
安装和配置 vsftpd
-
登录服务器,安装 vsftpd。
yum install -y vsftpd
-
设置 vsftpd 开机自启动。
systemctl enable vsftpd
-
启动 FTP 服务。
systemctl start vsftpd
-
确认服务是否启动。
netstat -antup | grep ftp
如显示结果如下,则说明 FTP 服务已成功启动。
此时,vsftpd 已默认开启匿名访问模式,无需通过用户名和密码即可登录 FTP 服务器。匿名方式登录 FTP 服务器的用户没有权修改或上传文件的权限。
-
为 FTP 服务创建一个 Linux 用户,本文以 ftpuser 为例。
useradd ftpuser
-
设置 ftpuser 用户的密码。
passwd ftpuser
输入密码后请按 Enter 确认设置,密码默认不显示,本文以
tf7295TFY
为例。 -
创建 FTP 服务使用的文件目录,本文以
/var/ftp/test
为例。mkdir /var/ftp/test
-
修改目录权限。
chown -R ftpuser:ftpuser /var/ftp/test
-
编辑
vsftpd.conf
文件。vim /etc/vsftpd/vsftpd.conf
-
修改以下配置参数,设置匿名用户和本地用户的登录权限,设置指定例外用户列表文件的路径,并开启监听 IPv4 sockets。
anonymous_enable=NO #禁止匿名用户登录 local_enable=YES #支持本地用户登录 chroot_local_user=YES #全部用户被限制在主目录 chroot_list_enable=YES #启用例外用户名单 chroot_list_file=/etc/vsftpd/chroot_list #指定用户列表文件,该列表中的用户不被锁定在主目录 listen=YES
-
在行首添加
#
,注释listen_ipv6=YES
配置参数,关闭监听 IPv6 sockets。#listen_ipv6=YES
-
被动模式配置
local_root=/var/ftp/test #设置本地用户登录后所在的目录 allow_writeable_chroot=YES pasv_enable=YES pasv_address=xxx.xx.xxx.xx #请修改为您的 Linux 云服务器公网 IP pasv_min_port=40000 pasv_max_port=45000
-
主动模式配置
# 只添加下列参数,无需pasv开头的那几个 local_root=/var/ftp/test #设置本地用户登录后所在的目录 allow_writeable_chroot=YES
按 Esc 后输入 :wq 保存后退出
-
创建并编辑
chroot_list
文件。vim /etc/vsftpd/chroot_list
按 i 进入编辑模式,输入用户名,一个用户名占据一行,设置完成后保存并退出。
您若没有设置例外用户的需求,可跳过此步骤,输入 :wq 退出文件。-
重启 FTP 服务。
systemctl restart vsftpd
-
安全组设置
如主动模式则不需放通40000-45000端口(vsftpd.conf
中设置的 pasv_min_port 到 pasv_max_port 之间的所有端口),即无需添加如图第一条规则
-
验证 FTP 服务,打开客户端的计算机,在路径栏中访问以下地址。若是MacOS,则是在访达的前往中选择“连接服务器”并输入以下地址:
ftp://云服务器公网IP:21
在弹出的“登录”窗口中输入 配置 vsftpd 中已设置的用户名及密码。
但是用Finder访问只能下载,不能上传和编辑服务器的文件就挺鸡肋。还是得整上Transmit 或 ForkLift (App Store 就可以下载)这些工具。
vsftpd启动报错处理
作为一个bug天选之人,我无一例外地遇上了摸不着头脑的vsftpd启动/重启报错:
Job for vsftpd.service failed because the control process exited with error code. See "systemctl status vsftpd.service" and "journalctl -xe" for details.
根据提示
systemctl status vsftpd.service
后,又告诉我们加上-l
才能查看全部错误报告。
Hint: Some lines were ellipsized, use -l to show in full.
那就加上。
systemctl -l status vsftpd.service
原来是自己在
vim /etc/vsftpd/vsftpd.conf
注释的时候不小心多加了空格...大家下次碰到可以参考下
卸载vsftpd
# 1. 查看vsftpd的状态
service vsftpd status
# 2. 如果vsftpd在运行中,需要先停止它才能卸载
service vsftpd stop
# 3. 查找软件包名
rpm -aq vsftpd
# 4. 根据返回的具体包名进行删除
rpm -e vsftpd-3.0.2-28.el7.x86_64