登录后台

页面导航

本文编写于 772 天前,最后修改于 772 天前,其中某些信息可能已经过时。

常规方式搭建ftp服务

yum安装

yum -y install vsftpd

配置文件

cd /etc/vsftpd
vim vsftpd.conf

#是否允许匿名,默认no
anonymous_enable=NO

#这个设定值必须要为YES 时,在/etc/passwd内的账号才能以实体用户的方式登入我们的vsftpd主机
local_enable=YES

#具有写权限
write_enable=YES

#本地用户创建文件或目录的掩码
local_umask=022

#当dirmessage_enable=YES时,可以设定这个项目来让vsftpd寻找该档案来显示讯息!您也可以设定其它档名!
dirmessage_enable=YES

#当设定为YES时,使用者上传与下载日志都会被纪录起来。记录日志与下一个xferlog_file设定选项有关
xferlog_enable=YES
xferlog_std_format=YES

#上传与下载日志存放路径
xferlog_file=/var/log/xferlog 

#开启20端口
connect_from_port_20=YES

#关于系统安全的设定值:
#ascii_download_enable=YES(NO)
#如果设定为YES ,那么 client 就可以使用 ASCII 格式下载档案。
#一般来说,由于启动了这个设定项目可能会导致DoS 的攻击,因此预设是NO。
#ascii_upload_enable=YES(NO)
#与上一个设定类似的,只是这个设定针对上传而言!预设是NO。
ascii_upload_enable=NO
ascii_download_enable=NO

#通过搭配能实现以下几种效果: 
#①当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd.chroot_list文件中列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录。 
#②当chroot_list_enable=YES,chroot_local_user=NO时,在/etc/vsftpd.chroot_list文件中列出的用户,不能切换到其他目录;未在文件中列出的用户,可以切换到其他目录。 
#③当chroot_list_enable=NO,chroot_local_user=YES时,所有的用户均不能切换到其他目录。 
#④当chroot_list_enable=NO,chroot_local_user=NO时,所有的用户均可以切换到其他目录。
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

#这个是pam模块的名称,我们放置在/etc/pam.d/vsftpd
pam_service_name=vsftpd

#当然我们都习惯支持TCP Wrappers的啦!
tcp_wrappers=YES

#不添加下面这个会报错:500 OOPS: vsftpd: refusing to run with writable root inside chroot()
allow_writeable_chroot=YES

#ftp的端口号
listen_port=60021

#启动被动式联机(passivemode)
pasv_enable=YES

#下面两个是与passive mode 使用的 port number 有关,如果您想要使用65400到65410 这 11 个 port 来进行被动式资料的连接,可以这样设定
pasv_min_port=65400
pasv_max_port=65410

#FTP访问目录
local_root=/data/ftp/

# 注释掉ipv6
listen_ipv6=NO

# 把监听打开
listen=YES

注释参数

vim /etc/pam.d/vsftpd
#auth       required    pam_shells.so    注释掉

cd /etc/vsftpd/ 创建chroot_list文件

#user_list和chroot_list中的用户是不允许登录ftp的

添加防火墙开启相关端口

#添加主端口
firewall-cmd --permanent --zone=public --add-port=60021/tcp
success
#添加被动端口
irewall-cmd --permanent --zone=public --add-port=65400-65410/tcp
success
firewall-cmd --reload 
success

创建FTP用户,并授权

useradd -d /data/ftp/ -s /sbin/nologin ftpuser
passwd ftpuser
chown -R ftpuser /data/ftp #共享文件夹授权

关闭selinux

setenforce 0

启动vsftp

systemctl start vsftpd.service 
systemctl enable vsftpd.service

Docker部署ftp

拉取ftp容器

docker pull fauria/vsftpd

启动容器

docker run -d -v /home/shjs:/home/vsftpd \  #宿主机目录/home/shjs映射到容器/home/vsftpd
-p 20:20 -p 21:21 -p  21100-21110:21100-21110 \
-e FTP_USER=shjs1122 -e FTP_PASS=jsocn3388 \ # 设置ftp账户和密码
-e PASV_ADDRESS=219.233.219.72 \  #设置ftp服务器ip
-e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110 \
--name vsftpd --restart=always fauria/vsftpd

参数说明

/var/ftp:/home/vsftpd:映射 docker 容器 ftp 文件根目录(冒号前面是宿主机的目录,建议宿主机使用 /var 这样公共权限文件夹,如果使用类似 /home 这样的目录可能会造成客户端无法连接上服务器问题)
-p:映射 docker 端口(冒号前面是宿主机的端口)
-e FTP_USER=test -e FTP_PASS=test :设置默认的用户名密码(都为 test)
PASV_ADDRESS:宿主机 ip,当需要使用被动模式时必须设置。
PASV_MIN_PORT~ PASV_MAX_PORT:给客服端提供下载服务随机端口号范围,默认 21100-21110,与前面的 docker 端口映射设置成一样。

防火墙放通相关端口和服务器

firewall-cmd --permanent --add-port=20/tcp
firewall-cmd --permanent --add-port=21/tcp
firewall-cmd --permanent --add-port=21100/tcp
firewall-cmd --permanent --add-port=21101/tcp
firewall-cmd --permanent --add-port=21102/tcp
firewall-cmd --permanent --add-port=21103/tcp
firewall-cmd --permanent --add-port=21104/tcp
firewall-cmd --permanent --add-port=21105/tcp
firewall-cmd --permanent --add-port=21106/tcp
firewall-cmd --permanent --add-port=21107/tcp
firewall-cmd --permanent --add-port=21108/tcp
firewall-cmd --permanent --add-port=21109/tcp
firewall-cmd --permanent --add-port=21110/tcp
firewall-cmd --reload

新增ftp用户

docker exec -i -t vsftpd bash  #进入到容器中
mkdir /home/vsftpd/hangge  #创建新用户的文件夹:
vi /etc/vsftpd/virtual_users.txt  #编辑用户配置文件:
在文件中添加新用户的用户名和密码:一行用户名一行密码的格式
/usr/bin/db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db #保存退出后执行如下命令,把登录的验证信息写入数据库。
exit
docker restart vsftpd
最后退出容器,并重启容器可以使用新用户连接 FTP 服务了。