ftp多用户多目录配置
1.直接在宿主机上安装ftp
1、防火墙配置
systemctl stop firewalld.service #停止firewall(防火墙)
systemctl disable firewalld.service #禁止firewall开机启动
#修改SELINUX,否则ftp用户无新建文件权限
vi /etc/sysconfig/selinux
SELINUX=disabled
然后执行:setenforce 0
2、安装ftp
yum install vsftpd
3、增加用户
useradd test1
passwd test1
mkdir -p /ftpdata/test1ftp
chown -R test1.root /ftpdata/test1ftp(ftp主目录用于存放文件根据自己喜好自定义)
chmod -R 777 /ftpdata/test1ftp(给文件目录授予权限)
4、修改配置文件 /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
#local_enable=YES #设置是否允许本地用户登录 上面有
#write_enable=YES #是否允许用户有写权限 上面有
#local_umask=022 #设置本地用户创建文件时的umask值
#dirmessage_enable=YES
#xferlog_enable=YES
#connect_from_port_20=YES
#xferlog_std_format=YES
ascii_upload_enable=YES
ascii_download_enable=YES
#锁定用户到各自的根目录
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=YES
listen_port=21 #端口号自己定义
listen_ipv6=NO
pam_service_name=vsftpd
#local_root=/ftpdata/ #用户路径
user_config_dir=/etc/vsftpd/userconfig #用户根目录配置文件
allow_writeable_chroot=YES
当
chroot_local_user=YES
chroot_list_enable=YES(这行可以没有, 也可以有)
chroot_list_file=/etc/vsftpd.chroot_list
那么, 凡是加在文件vsftpd.chroot_list中的用户都可以切换到其他目录。
所以如果想限制用户只能访问自己的根目录,则需要以下几步:
1)chroot_local_user=YES,chroot_list清空用户名。
2)/etc/vsftpd/userconfig下以用户名为名建立文件,vim test1,内容为
设置的根目录
local_root=/ftpdata/test1ftp/
3) usermod -d /ftpdata/test1ftp -u 1002 test1
修改 /etc/passwd内的用户根目录。
至此,ftp用户登录后限制到自己的根目录。
4)重启vsftpd.service
systemctl restart vsftpd.service
截图如下。
否则ftp用户根目录默认为/home/test1
配置了user_config_dir就不用再配置local_root,否则连接不上。
2.使用Docker安装ftp
1.拉取镜像
docker pull fauria/vsftpd
2.启动容器
docker run -d -v /ftpdata/:/home/vsftpd \
-p 20:20 -p 21:21 -p 21100-21110:21100-21110 \
-e FTP_USER=test -e FTP_PASS=test \
-e PASV_ADDRESS=192.168.60.128 \
-e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110 \
--name vsftpd --restart=always fauria/vsftpd
/home/ftp:/home/vsftpd:映射 docker 容器 ftp 文件根目录(冒号前面是宿主机的目录),docker根目录固定写这个目录
-p也可以改成 --network=host
3.在单用户ftp基础上创建多用户
3.1 进入容器
docker exec -it vsftpd /bin/bash
3.2 编辑配置文件
[root@node69 /]# vi /etc/vsftpd/virtual_users.txt
test
test
test1
test1
3.3 创建用户文件夹
mkdir -p /home/vsftpd/test1
//此时目录所有者是root
//如果你想把test1账号指定其他目录的话,可以使用软链接
ln -s /data/list /home/vsftpd/test1
3.4 生成二进制文件
#生成二进制文件
db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db
3.5 重启docker容器
docker restart vsftpd
重启后目录的所有者变成ftp