一、前言
场景:公司需要搭建FTP服务器,供内网之前可以互相传递数据,安全稳定,需要满足开通多个账号,每个用户上传的文件有自己对应的文件目录。
这里建议:用户目录Disk尽量大一点,避免因为空间不足,导致上传失败
废话不说,直接上干货~
二、搭建步骤
利用docker部署,这里需要有docker环境,这里小编采用docker-compose进行部署,所以需要有docker-compose服务。
docker环境的搭建详见这里:
Centos7系统:
https://blog.csdn.net/xu710263124/article/details/115632708
docker-compose部署
// 安装docker-compose
wget https://github.com/docker/compose/releases/download/1.25.0-rc4/docker-compose-Linux-x86_64
cp docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose version
1、搭建ftp服务
step1:
# 1、拉取vsftpd镜像
docker pull fauria/vsftpd
step2:
注意:这里选择一个Disk较大的盘,进行ftp信息存储,
编辑vsftpd-compose.yml文件
cd /data1/vsftp
vim vsftpd-compose.yml
version: "3"
services:
vsftpd:
image: fauria/vsftpd
container_name: vsftpd
restart: always
ports:
- "20:20"
- "21:21"
- "20000:20000"
volumes:
- "/data1/vsftp/ftp_user:/home/vsftpd"
- "/data1/vsftp/log/vsftpd:/var/log/vsftpd/"
environment:
- FTP_USER=admin
- FTP_PASS=admin
- PASV_MIN_PORT=20000
- PASV_MAX_PORT=20000
- PASV_ADDRESS=xxx.xxx.xxx.xxx
- LOG_STDOUT=1
# 注:这里指定的FTP_USER为admin,以及密码,还有对应的PASV_ADDRESS需改为自己的宿主机ip。
# PASV_MIN_PORT和PASV_MAX_PORT映射的是被动模式下端口使用范围必须在服务器的防火墙中开启20、21、22和21100/21110端口
step3:这里需要提前创建好对应的ftp_user目录
// 不同用户上传的文件可在/data1/vsftp/ftp_user/下查询
mkdir -p /data1/vsftp/ftp_user
mkdir -p /data1/vsftp/log/vsftpd
step4:启动docker-compose文件
docker-compose -f vsftpd-compose.yml up -d
step5:启动成功后,通过文件夹形式访问
ftp://admin@xxx.xxx.xxx.xxx/
user: admin
passwd:admin
或者添加一个网络位置都可。
输入用户名密码即可 连接远程FTP服务器。
三、添加FTP普通用户
如果要创建多用户,可执行如下操作:
3. 创建多用户ftp
3.1 进入容器
docker exec -it vsftpd /bin/bash
3.2 编辑配置文件
提示:
注意使用vi编辑指令,其中奇数行为用户名,临近的下一个偶数行为密码,创建container时参数未加入用户名和密码,系统会默认创建admin和随机密码.
添加新用户的文件夹,以用户名命名
[root@huang /]# cat /etc/vsftpd/virtual_users.txt
admin
admin
ftp1
ftp1
ftp2
ftp2
3.3 创建用户目录
mkdir -p /home/vsftpd/ftp1
mkdir -p /home/vsftpd/ftp2
3.4 生产二进制文件
#生成二进制文件
db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db
3.5 重启docker
docker restart vsftpd
退出容器
就可以在宿主机的/data1/vsftp/ftp_user下看到创建的对应用户了
ok~这样就可以利用不同用户进行连接了
End~