文章目录
- 一、什么是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服务。
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.
授权之后:
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
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
结果显示:
2.7 配置防火墙和端口
- 配置防火墙(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
- 允许创建文件上传下载操作
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