Centos7下Ftp服务器Vsftpd环境搭建(虚拟用户)

虚拟用户,所有虚拟用户会统一映射为一个指定的系统帐号,访问共享位置,即为此系统帐号的家目录,各虚拟用户可被赋予不同的访问权限,通过匿名用户的权限控制参数进行指定。

1.安装及启动等

##安装
yum install -y vsftpd

##设置开机启动
systemctl enable vsftpd.service

##启动
systemctl start vsftpd.service

##停止
systemctl stop vsftpd.service

##查看状态
systemctl status vsftpd.service

复制代码

2.配置/etc/vsftpd/vsftpd.conf

# 禁止匿名登录(默认为YES)
anonymous_enable=NO
# 允许linux系统用户登录
local_enable=YES
# 允许linux用户上传文件(默认已经有了该项)
write_enable=YES
dirmessage_enable=YES
#从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录#不能再具有写权限了!如果检查发现还有写权限,就会报该错误,加入如下配置则可解决此问#题
allow_writeable_chroot=YES
chroot_list_enable=NO
chroot_local_user=YES
# FTP传输模式分为主动、被动模式
# 主动模式下:服务端默认开启 21连接端口 20数据传输端口(客户端随机生成数据端口与20 # 端口进行数据交互)
# 被动模式下:服务端默认开启 21连接端口 数据传输端口(大于1024,小于5000区间的端# # 口,需开启指定范围内)在配置文件中自己维护
pasv_enable=YES
# 外网地址(如果允许外部访问FTP服务,则必须指定此属性,否则无法访问FTP文件目录)
pasv_address=47.111.147.12
# 数据传输最小端口
pasv_min_port=10011
# 数据传输最达端口
pasv_max_port=10020
listen=YES
# 与FTP服务端建立连接端口(默认21)
listen_port=10010
virtual_use_local_privs=NO
# 如果使用vsftp的是本地用户
#local_umask=022
# 如果使用vsftp的是虚拟用户
anon_umask=022
userlist_enable=NO
# 开启系统用户身份映射
guest_enable=YES
# 当前shell所在的系统用户
guest_username=admin
# FTP进程服务名
pam_service_name=vsftpd
# 虚拟用户列表目录
user_config_dir=/etc/vsftpd/vconf
# logger
xferlog_enable=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
复制代码

3. 建立Ftp账号文件

# 一行账号,一行密码(可配置多个)
cat >> /etc/vsftpd/virtusers << EOF 
ftpusertest1 
123456 
ftpusertest2 
123456
EOF
复制代码

4.生成用户数据文件

db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db

#设定PAM验证文件,并指定对虚拟用户数据库文件进行读取 chmod 600 /etc/vsftpd/virtusers.db
复制代码

修改 /etc/pam.d/vsftpd 文件

## 修改前先备份 
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak

cat > /etc/pam.d/vsftpd << EOF 
#%PAM-1.0 (添加前,注释掉/etc/pam.d/vsftpd文件里面的内容,否则登录失败)
auth    sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers 
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers 
EOF

复制代码

6.新建系统用户vsftpduser,用户目录为/home/vsftpduser(可选)

此步骤可选,可以直接使用常规的可以登陆的ssh用户,这里为了独立使用,才创建了专用的不可登陆用户vsftpduser来负责ftp的操作。如果直接使用普通的ssh登陆用户,则后续步骤中的vsftpduser改成相应的ssh用户即可。

#用户登录终端设为/bin/false(即:使之不能登录系统)

# 添加系统不可登录用户
sudo useradd vsftpduser -d /home/vsftpduser -s /bin/false 
# 目录权限设置
sudo chown -R vsftpduser:vsftpduser /home/vsftpduser
复制代码

7.建立Ftp用户个人配置文件

# 创建虚拟用户
sudo mkdir /etc/vsftpd/vconf
cd /etc/vsftpd/vconf
cat > /etc/vsftpd/vconf/ftpusertest1 << EOF 
# 设置虚拟用户文件根目录
local_root=/home/oper/video 
# 写操作
write_enable=YES
# 读操作
anon_world_readable_only=YES
# 上传操作
anon_upload_enable=YES
# 创建目录操作
anon_mkdir_write_enable=YES
# 删除、重名名操作
anon_other_write_enable=YES
复制代码

建立video根目录

mkdir -p /home/oper/video
复制代码

8.重启测试

systemctl restart vsftpd.service

553 operation failed问题

如果你改变了ftp的根目录(将local_root的值/home/oper/video换成了其他路径比如改成/datadir/ftpdata),有可能存在操作文件失败问题,

此时要关闭Selinux,关闭方法如下:
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config && setenforce 0
复制代码

FTP测试

注意:防火墙开放FTP数据传输端口、连接端口

image.png