虚拟用户,所有虚拟用户会统一映射为一个指定的系统帐号,访问共享位置,即为此系统帐号的家目录,各虚拟用户可被赋予不同的访问权限,通过匿名用户的权限控制参数进行指定。
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数据传输端口、连接端口