观看前说明
文档阅读说明,本篇文档主要讲解在工作中如何使用ftp虚拟用户替代系统用户实现文件传输等。
1、Vsftpd的安装
vsftp安装通过yum进行安装,yum具体配置方式就不再本文档中体现。
# vsftpd是ftp server服务,用于ftp服务
# ftp是ftp client命令,用户可通过此命令登陆到对端的ftp server上
yum install -y vsftpd ftp
2、创建虚拟用户映射用户
使用虚拟用户需要在系统上创建一个系统用户,将所有的虚拟用户映射到此系统用户上(此系统用户需要修改成不可登陆用户,安全考虑!)
由于系统的特殊性,对虚拟用户创建有不同的要求(各系统自定义)
# useradd Linux系统创建用户命令
# -d 指定用户家目录
# -s 指定用户登陆shell,nologin代表用户不可登陆
# -g 指定用户归属组(系统要求,否则文件传输时权限会出现问题)
# iotdn_virftp 虚拟用户所映射的系统用户,该用户可不设置密码,如安全要求,可设置一个比较长的密码
useradd -d /cbbsiot_virftp -s /sbin/nologin -g wlwjf iotdn_virftp
3、Vsftpd服务配置
# 切换到vsftpd目录
cd /etc/vsftpd/
# 将默认的vsftpd配置文件备份
mv vsftpd.conf vsftpd.conf.$(date +%Y%m%d)
# 将相关的ftp配置写入配置文件,如需要特殊配置项请自行添加
echo "
#禁止匿名用户登录
anonymous_enable=NO
#允许本地用户登录
local_enable=YES
#开放本地用户写权限
write_enable=YES
#记录FTP的传输过程
xferlog_enable=YES
#指定FTP传输日志的路径和名字
xferlog_file=/var/log/vsftpd_xfer.log
#启用虚拟账户
guest_enable=YES
#把虚拟账户映射到系统账户iotdn_virftp
guest_username=iotdn_virftp
#使用虚拟用户验证(PAM验证)
pam_service_name=vsftpd
#设置存放各虚拟用户配置文件的目录(此目录下与虚拟用户名相同的文件为它的配置文件)
user_config_dir=/etc/vsftpd/iotdn_virftp_config
#启用chroot时,虚拟用户根目录允许写入
allow_writeable_chroot=YES
#被动模式,文件传输端口的最大最小范围
pasv_min_port=30000
pasv_max_port=35000" >> /etc/vsftpd/vsftpd.conf
4、虚拟用户配置
此处创建ftp虚拟用户,虚拟用户创建要求如下:
- [ftp_cbbs ] 用户为告警传输用户,外部通过该用户访问系统内部的/cbbsiot_file_interface_mfs03/data/monitor目录;
- [ftp_cbbsiot ] 用户为其他业务传输用户,外部通过该用户需要访问系统内部的/cbbsiot_file_interface_mfs03/data/tap3/lte和/cbbsiot_file_interface_mfs03/data/tap3/sms目录
由于为了保护系统内部目录结果,对外部展示目录如下:
- [ ftp_cbbs ] 展示目录 :/monitor
- [ ftp_cbbsiot ] 展示目录:/lte和/sms
创建ftp虚拟用户
# /etc/vsftpd/iotdn_virftp文件为虚拟用户账号和口令文件
# 奇数为ftp虚拟用户,偶数为ftp虚拟用户密码
# 由于系统要求,命令行不能出现明文密码,所以通过密文解密的方式写入iotdn_virftp文件内
echo "ftp_cbbs" >> /etc/vsftpd/iotdn_virftp
pd=$(echo 'eVB2RHBJUSM2TUFlSGEjUAo=' | base64 -d)
echo $pd >> /etc/vsftpd/iotdn_virftp
# db_load命令的作用是将用户信息文件转换为数据库并使用 hash 加密,如果需要保存虚拟帐号和密码的文本文件且不让被系统帐号直接调用,我们就需要使用db_load 命令生成db数据库
db_load -T -t hash -f /etc/vsftpd/iotdn_virftp /etc/vsftpd/iotdn_virftp.db
# 修改iotdn_virftp文件权限,除root外其他用户不可查看等
chmod 600 /etc/vsftpd/iotdn_virftp
修改vsftpd的PAM验证配置
# 此处需要修改/etc/pam.d/vsftpd文件
# 将原文件的auth和account行全部注释,新增最后两行
# db=/etc/vsftpd/iotdn_virftp 该文件时vsftp账号口令文件,需要注意以下
cat /etc/pam.d/vsftpd
#%PAM-1.0
session optional pam_keyinit.so force revoke
#auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth required pam_shells.so
#auth include password-auth
#account include password-auth
session required pam_loginuid.so
session include password-auth
auth required pam_userdb.so db=/etc/vsftpd/iotdn_virftp
account required pam_userdb.so db=/etc/vsftpd/iotdn_virftp
虚拟用户目录配置
前面我们提到不同用户有不同的需求,所以我们分开来说这两个用户;
- [ ftp_cbbs ]
# 创建vsftpd虚拟用户配置文件目录,需要和vsftpd的配置保持一致
mkdir /etc/vsftpd/iotdn_virftp_config
# 写入虚拟用户配置
echo "
# 允许写入
write_enable=YES
#允许浏览FTP目录和下载
anon_world_readable_only=NO
#允许用户下载
download_enable=YES
# 允许虚拟用户上传文件
anon_upload_enable=YES
# 允许虚拟用户创建目录
anon_mkdir_write_enable=YES
# 允许虚拟用户执行其他操作(如改名、删除)
anon_other_write_enable=YES
# 上传文件的掩码,如022时,上传目录权限为755,文件权限为644
anon_umask=002
# 指定虚拟用户的虚拟目录(虚拟用户登录后的主目录,即登录ftp后访问的根目录)
local_root=/cbbsiot_file_interface_mfs03/data/" >> /etc/vsftpd/iotdn_virftp_config/ftp_cbbs
- [ ftp_cbbsiot ]
# 由于虚拟用户不支持配置多个目录,此处需要通过挂在目录的形式实现虚拟用户访问多个不同的目录
# 创建对应的目录(参考上面写的)
mkdir /cbbsiot_virftp/lte
mkdir /cbbsiot_virftp/sms
# 修改目录权限,由于主机配置可能不要一样,需要各位根据不同情况来修改权限,/cbbsiot_virftp及子级目录一定要有相应的权限,源目录也是如此
# 挂载目录需要配置守护进程,防止设备宕机或其他原因导致目录未挂载影响业务
chown iotdn_virftp:iotdn_virftp -R /cbbsiot_virft
mount --bind /cbbsiot_file_interface_mfs03/data/tap3/lte /cbbsiot_virftp/lte
mount --bind /cbbsiot_file_interface_mfs03/data/tap3/sms /cbbsiot_virftp/sms
# 写入虚拟用户配置
echo "
# 允许写入
write_enable=YES
#允许浏览FTP目录和下载
anon_world_readable_only=NO
#允许用户下载
download_enable=YES
# 允许虚拟用户上传文件
anon_upload_enable=YES
# 允许虚拟用户创建目录
anon_mkdir_write_enable=YES
# 允许虚拟用户执行其他操作(如改名、删除)
anon_other_write_enable=YES
# 上传文件的掩码,如022时,上传目录权限为755,文件权限为644
anon_umask=002
# 指定虚拟用户的虚拟目录(虚拟用户登录后的主目录,即登录ftp后访问的根目录)
local_root=/cbbsiot_virftp/" >> /etc/vsftpd/iotdn_virftp_config/ftp_cbbs
配置完成后,需要重启vsftpd服务
# 重启vsftpd服务
systemctl restart vsftpd
# 开机自动启动
systemctl enable vsftpd
验证的过程就不再文档里面体现了,请各位自行验证吧,如果有问题,可以联系我沟通。
来源:oschina
链接:https://my.oschina.net/u/4366887/blog/4919384