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

1,787 阅读1分钟

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

1、yum安装vsFtp

yum install -y vsftpd

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

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

# vsftpd.conf替换为以下配置
cat > /etc/vsftpd/vsftpd.conf << EOF
# 禁止匿名登录(默认为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=IP地址
# 数据传输最小端口
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=当前shell所在的系统用户(例如root)
# FTP进程服务名
pam_service_name=vsftpd
# 虚拟用户列表目录
user_config_dir=/etc/vsftpd/vconf
# logger
xferlog_enable=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
EOF

3、建立Ftp账号文件

# 一行账号,一行密码(可配置多个)
cat >> /etc/vsftpd/virtusers << EOF 
账号1
密码1 
账号2 
密码2
EOF

4、生成用户数据文件

db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
#设定PAM验证文件,并指定对虚拟用户数据库文件进行读取 
chmod 600 /etc/vsftpd/virtusers.db

5、修改user_list文件指定只有步骤三的用户可以使用 FTP 服务,其他用户不能使用(已注释的用户)

# 备份user_list
cp user_list user_list.bak
# 写入文件
cat > user_list << EOF
虚拟用户1
虚拟用户2
EOF

6、修改 /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

7、设置虚拟用户文件根目录

mkdir -p /data/用户1/video
mkdir -p /data/用户2/video

8、建立Ftp用户个人配置文件

# 创建虚拟用户1
sudo mkdir /etc/vsftpd/vconf

cat > /etc/vsftpd/vconf/用户1 << EOF 
# 设置虚拟用户文件根目录
local_root=虚拟用户1文件根目录
# 写操作
write_enable=YES
# 读操作
anon_world_readable_only=YES
# 上传操作
anon_upload_enable=YES
# 创建目录操作
anon_mkdir_write_enable=YES
# 删除、重名名操作
anon_other_write_enable=YES
EOF

## 创建虚拟用户2
cat > /etc/vsftpd/vconf/用户2 << EOF 
# 设置虚拟用户文件根目录
local_root=虚拟用户2文件根目录
# 写操作
write_enable=YES
# 读操作
anon_world_readable_only=YES
# 上传操作
anon_upload_enable=YES
# 创建目录操作
anon_mkdir_write_enable=YES
# 删除、重名名操作
anon_other_write_enable=YES
EOF

9、启动、停止、查看状态

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

##启动
systemctl start vsftpd.service

##查看状态
systemctl status vsftpd.service

##停止
systemctl stop vsftpd.service

10、553 operation failed问题

如果你改变了ftp的根目录(将local_root的值/home/oper/video换成了其他路径比如改成/datadir/ftpdata),有可能存在操作文件失败问题,
此时要关闭Selinux,关闭方法如下:
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config && setenforce 0

11、FTP测试

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

b75c39b09f2c46a4b984e47aa0beab0c_tplv-k3u1fbpfcp-watermark(1).png