在Debian Buster中配置vsFtpd并使用虚拟用户 (ineko.cc)
首先贴上原贴,本文的内容都是受到这篇文章的启发,感谢这篇文章的作者,我找了两三个小时的资料,最后还是这篇文章完美的解决了我的问题,感谢。这里就记录下我在自己的环境下搭建的过程,因为本篇文章完完全全是参照上面这篇文章,所以投了转载,本文只是记录下我自己搭建服务的过程。以便之后参考。再次表达对作者的感谢。
###环境
Distributor ID: Debian
Description: Debian GNU/Linux 11 (bullseye)
Release: 11
Codename: bullseye
###安装vsftpd和db-util
apt install -y vsftpd db-util
###创建一个用户,之后需要将虚拟用户映射到这个用户上面,设置该用户不能登录系统
useradd -d /data/ftp_data -s /sbin/nologin virtftp
###修改/etc/shells文件,将/sbin/nologin追加到该文件中
echo /sbin/nologin >> /etc/shells
###创建用户的家目录
cd /
mkdir -p /data/ftp_data
chown virtftp:virtftp /data/ftp_data
###备份/etc/vsftpd.conf文件
mv vsftpd.conf vsftpd.conf_bak
###在/etc下创建vsftpd文件夹,用来存放后续的一些配置文件
mkdir /etc/vsftpd
###复制模板文件作为vsftpd.conf
cp /usr/share/doc/vsftpd/examples/VIRTUAL_USERS/vsftpd.conf /etc/vsftpd.conf
根据自己的需要对文件进行修改,这里贴上我的文件作为参考,我把一些暂时不需要的给注释掉了,因为后面需要为不同的用户设置不同的权限,所以这个地方就用一些通用的配置就可以了,后面对不同的用户可以在添加不同的配置
anonymous_enable=NO
local_enable=YES
#write_enable=NO #以下注释掉的四条语句可以单独分配给不同的虚拟用户
#anon_upload_enable=NO
#anon_mkdir_write_enable=NO
#anon_other_write_enable=NO
chroot_local_user=YES
allow_writeable_chroot=YES #设置了chroot_local_user=YES之后还需要加上这条,不然用户会无法登录
guest_enable=YES #开启虚拟用户
guest_username=virtftp #这里就填刚才新建的用户的用户名,后续会将虚拟用户映射到这个账户上
listen=YES
#listen_port=10021
#pasv_min_port=30000
#pasv_max_port=30999
pasv_enable=NO #禁用pasv安全验证
max_per_ip=3 #每个IP地址的最大连接数为3
max_clients=100 #最大连接数为100
###切换到/etc/vsftpd目录中,新建一个.txt文件,我这里新建了一个users.txt文件,里面写上虚拟用户的用户名和密码,这里贴上我的文件
ftpuser
123
ftpadmin
123
###然后使用db-util工具将这个.txt文件封装为db数据库文件,vlogin.db就是封装之后的文件了,vlogin.db文件放置在刚才创建的/etc/vsftpd文件夹中
db_load -T -t hash -f users.txt vlogin.db
###备份/etc/pam.d/vsftpd文件
mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd_bak
###然后复制模板文件作为新的/etc/pam.d/vsftpd
cp /usr/share/doc/vsftpd/examples/VIRTUAL_USERS/vsftpd.pam /etc/pam.d/vsftpd
###查看文件内容
auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd_login
###这里引用的pam_userdb.so并不在这个路径,所以需要我们手动去查找该文件所在的路径,然后修改为正确的路径
find / -name pam_userdb.so
###找到了文件的正确路径
/usr/lib/x86_64-linux-gnu/security/pam_userdb.so
###然后db=/etc/vsftpd_login,这里就修改为我们刚才创建的vlogin.db文件,但是不用加后缀
###修改/etc/pam.d/vsftpd文件,修改后的文件内容如下,修改了模块的路径和db数据库文件的路径
auth required /usr/lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/vlogin
account required /usr/lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/vlogin
###在/etc/vsftpd下新建一个目录用来存放虚拟用户的目录ftp_user
mkdir /etc/vsftpd/ftp_user
###新建完目录之后还需要添加下面一条语句到/etc/vsftpd.conf中,指定虚拟用户权限文件的存放目录
echo user_config_dir=/etc/vsftp/ftp_user >> /etc/vsftpd.conf
###切换到ftp_user目录下,然后新建虚拟用户配置文件,和虚拟用户同名
cd /etc/vsftpd/ftp_user
cp /etc/vsftpd.conf ./ftpuser
cp /etc/vsftpd.conf ./ftpadmin
###接下来编辑虚拟用户权限文件,给不同的用户配置不同的权限
###这里我给ftpuser的权限是可以下载和上传文件,给ftpadmin的权限是可以下载上传文件,以及删除重命名,上传文件的umask为022
###下面贴出两个配置文件的内容
###以下是ftpuser文件内容
write_enable=YES
anon_upload_enable=NO
###以下是ftpadmin文件内容
write_enable=NO
anon_upload_enable=NO
anon_other_write_enable=NO
local_umask=022
###然后重启vsftpd服务,让配置文件生效
systemctl restart vsftpd.service
###最后使用客户机登录ftp
root@debian:/etc/bind# ftp 172.16.0.3
Connected to 172.16.0.3.
220 (vsFTPd 3.0.3)
Name (172.16.0.3:whoami): ftpuser
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
root@debian:/etc/bind# ftp 172.16.0.3
Connected to 172.16.0.3.
220 (vsFTPd 3.0.3)
Name (172.16.0.3:whoami): ftpadmin
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
新建的两个虚拟用户都可以正常登录,这样就大功告成了