文章目录

  • 一、什么是FTP
  • 二、在CentOS安装vsftpd 服务
  • 2.1 校验是否安装
  • 2.2 yum方式安装vsftpd
  • 2.3. 创建匿名用户
  • 2.4. 更改配置
  • 2.5 vsftpd相关命令
  • 2.6 预先测试vsftpd服务配置除防火墙以外的问题
  • 2.7 配置防火墙和端口
  • 2.8 测试姿势
  • 2.9 配置优化


一、什么是FTP

FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。

二、在CentOS安装vsftpd 服务
2.1 校验是否安装

CentOS默认是不安装ftp服务的,需要自动手动安装。可以使用如下命令检查是否已经安装了FTP服务。如果啥都没显示,那就没安装。

rpm -qa | grep vsftpd 或者使用 vsftpd -v

如果有类似提示表示已经安装过ftp服务。

centos 7 重启vsft centos 7 vsftp_centos

2.2 yum方式安装vsftpd
  • 安装命令
yum -y install vsftpd

安装完成再使用上面的命令进行检测,查看是否安装成功。

2.3. 创建匿名用户
# 创建ftp上传的文件夹
mkdir /opt/ftpfile
# 创建匿名用户
useradd ftpuser -d /opt/ftpfile  -s /sbin/nologin 
-s /sbin/nologin 是让其不能登陆系统
-d 是指定用户目录为/opt/ftpfile ,这里可以替换成任何你需要的目录。
ftpuser是ftp用户名,在配置时把这个ftpuser换成你的ftp用户名。
# 文件夹授权
chown -R ftpuser.ftpuser /opt/ftpfile 
# 设置密码
passwd ftpuser

创建匿名用户的错误信息可以忽略:

useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.

centos 7 重启vsft centos 7 vsftp_CentOS_02


授权之后:

centos 7 重启vsft centos 7 vsftp_CentOS_03

2.4. 更改配置

默认的配置文件在/etc/vsftpd/vsftpd.conf

具体设置:

anonymous_enable=NO
write_enable=YES
local_umask=022
allow_ftpd_full_access
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
ftpd_banner=Welcome to FTP service.
local_root=/opt/ftpfile
use_localtime=yes
chroot_local_user=YES
chroot_list_enable=NO
chroot_list_file=/etc/vsftpd/chroot_list
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=NO
tcp_wrappers=YES
pasv_min_port=61001
pasv_max_port=62000
  • 创建用于指定用户列表文件
vim chroot_list
  • 新增用户,保存退出
  • 重启vsftpd服务
service vsftpd restart
  • 检查vsftpd服务状态
systemctl status vsftpd.service
或者
service vsftpd status

centos 7 重启vsft centos 7 vsftp_ftp_04

2.5 vsftpd相关命令
# 开启vsftpd服务
service vsftpd start
# 查看vsftpd运行状态
service vsftpd status
# 重启vsftpd服务
service vsftpd restart
或者
systemctl restart vsftpd.service
2.6 预先测试vsftpd服务配置除防火墙以外的问题
  • 使用ftp命令测试,需要安装ftp客户端命令,ftp是客户端的命令,和vsftpd没有多大关系。
  • ftp客户端安装yum install ftp
  • 测试vsftpd过程
显示:
[root@localhost /]# ftp localhost
Trying ::1...
Connected to localhost (::1).
220 Welcome to FTP service.

输入创建的的ftp用户ftpuser
Name (localhost:root): ftpuser
331 Please specify the password.

输入设置的密码:
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

退出ftp:
ftp> bye

结果显示:

centos 7 重启vsft centos 7 vsftp_重启_05

2.7 配置防火墙和端口
  1. 配置防火墙(firewall)
# 将ftp加入centOS的互联网服务
firewall-cmd --permanent --add-service=ftp
# 开放21/20端口
firewall-cmd --add-port=21/tcp
firewall-cmd --add-port=20/tcp
# 重新加载配置
firewall-cmd --reload
2.8 测试姿势
  • 打开浏览器测试:

    登陆成功:

    跟我们在控制台看到的是一致的。
  • 第三方工具测试,那就用最挫的FileZilla测试下
2.9 配置优化
  • 上面的连接之后,我们还可以看到上级目录,这是不符合要求的,只允许在ftp指定的目录下上传下载操作。
    配置说明:
# 如果chroot_list_enable=NO这个设置为NO,chroot_local_user=YES则表示所有的用户都不能切换到上级目录;
# 如果chroot_local_user=NO,chroot_list_enable=YES表示只有/etc/vsftpd/chroot_list这个文件列表中的用户不能切换到上级目录,其他这个文件列表之外的可以切换
# 如果这两个都是YES,表示chroot_list文件中的用户能切换上级目录,文件之外的用户不能切换上级目录
chroot_local_user=YES
chroot_list_enable=NO

centos 7 重启vsft centos 7 vsftp_centos_06

  • 允许创建文件上传下载操作
    550 Create directory operation failed.
    解决方案:SElinux配置问题
# 进入/etc/selinux,将config中的SELIUNX=disabled,保存退出,重启系统。不想重启,可以临时使用setenforce 0命令。
vim /etc/selinux/config
SELIUNX=disabled
  • vsftpd: refusing to run with writable root inside chroot()
    原因:用户主目录具有写权限,chmod a-w ,去除写权限

或在用户配置文件配置 allow-writeable_chroot=yes,

# 修改配置
allow_writeable_chroot=YES