上一篇
场景引入:
小明最近接手了一个项目,需要为不同部门的同事配置独立的FTP账号,但又不想在服务器上创建一堆系统用户🤯,老板还特别强调:"权限要精细,安全要到位!" 别慌!今天我们就用Debian + vsftpd + MySQL实现基于数据库的虚拟用户方案,既安全又便于管理!✨
系统环境:
安装必要软件:
sudo apt update sudo apt install vsftpd mysql-server libpam-mysql -y
sudo mysql -u root -p
-- 创建专用数据库 CREATE DATABASE vsftpd; GRANT SELECT ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY '你的强密码'; FLUSH PRIVILEGES; -- 创建用户表 USE vsftpd; CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(100) NOT NULL, home_dir VARCHAR(100) NOT NULL, active BOOLEAN DEFAULT TRUE ); -- 示例:添加市场部用户(密码用ENCRYPT函数加密) INSERT INTO users (username, password, home_dir) VALUES ('marketing', ENCRYPT('market123'), '/srv/ftp/marketing'); -- 验证数据 SELECT * FROM users;
sudo nano /etc/pam.d/vsftpd-mysql ``` 注意替换密码字段名): ```plaintext auth required pam_mysql.so user=vsftpd passwd=你的强密码 host=localhost db=vsftpd table=users usercolumn=username passwdcolumn=password crypt=2 account required pam_mysql.so user=vsftpd passwd=你的强密码 host=localhost db=vsftpd table=users usercolumn=username passwdcolumn=password crypt=2
sudo nano /etc/vsftpd.conf
关键配置项:
# 启用虚拟用户 anonymous_enable=NO local_enable=YES write_enable=YES chroot_local_user=YES # PAM认证配置 pam_service_name=vsftpd-mysql guest_enable=YES guest_username=virtualftp # 需要先创建这个系统用户 user_sub_token=$USER local_root=/srv/ftp/$USER
sudo useradd -d /srv/ftp -s /bin/false virtualftp sudo mkdir -p /srv/ftp/{marketing,sales} sudo chown -R virtualftp:virtualftp /srv/ftp sudo chmod -R 750 /srv/ftp
sudo mkdir /srv/ftp/marketing/upload sudo chown virtualftp:virtualftp /srv/ftp/marketing/upload sudo chmod 770 /srv/ftp/marketing/upload
sudo systemctl restart vsftpd sudo systemctl enable vsftpd
使用FileZilla或其他FTP客户端:
成功登录后应该只能看到/srv/ftp/marketing
🎉
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \ -keyout /etc/ssl/private/vsftpd.key -out /etc/ssl/certs/vsftpd.crt
在vsftpd.conf
添加:
ssl_enable=YES rsa_cert_file=/etc/ssl/certs/vsftpd.crt rsa_private_key_file=/etc/ssl/private/vsftpd.key allow_anon_ssl=NO force_local_data_ssl=YES force_local_logins_ssl=YES
sudo ufw allow 21/tcp sudo ufw allow 40000:50000/tcp # 被动模式端口范围
❌ 登录失败:
/var/log/auth.log
中的PAM错误 ❌ 无法上传文件:
ls -ld /srv/ftp/marketing/upload
vsftpd.conf
中write_enable=YES
❌ 被动模式超时:
pasv_min_port=40000 pasv_max_port=50000 pasv_address=你的公网IP
通过这套方案,你实现了:
✅ 无需创建真实系统用户
✅ 账号集中存储在MySQL便于管理
✅ 每个用户独立隔离的目录
✅ 可灵活扩展用户属性(如配额、过期时间)
下次老板要加10个部门账号?只需一条SQL插入语句搞定!🚀
(本文配置基于Debian 12及vsftpd 3.0.5验证,2025年8月更新)
本文由 旗清晖 于2025-08-09发表在【云服务器提供商】,文中图片由(旗清晖)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/578344.html
发表评论