官方网站>专题杂项>Linux杂论Linux杂论
一、前言
vsftpd服务器在linux系统下,默认匿名用户,出于安全考虑,ftp根目录只能读,不能写;但是在虚拟用户下,不受此限制。这里在ubuntu 20.04和centos 8示例。网络上的要么太繁琐要么太简单,而且大坑很多,这里的是经过检验是可行的,记录以备后用。
二、搭建
1、安装vsftpd,db-util
sudo apt install vsftpd db-util
sudo yum install vsftpd
2、vsftpd配置
sudo vi /etc/vsftpd.conf或者sudo vi /etc/vsftpd/vsftpd.conf
保持默认,直接在最后添加:
guest_enable=YES
pam_service_name=vsftpd.virtual
user_config_dir=/etc/vsftpd/vu
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
3、虚拟用户配置
创建ftpuser虚拟用户,sudo useradd -s /usr/sbin/nologin ftpuser
创建用户目录,mkdir /home/xxx/1
创建vsftpd目录,sudo mkdir /etc/vsftpd
设置登录ftp的用户名test和密码test文件login.txt,sudo vi /etc/vsftpd/login.txt
test
test
对login.txt进行加密,sudo db_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db
虚拟用户相关配置,sudo mkdir /etc/vsftpd/vu,sudo vi /etc/vsftpd/vu/test
guest_username=ftpuser
local_root=/home/xxx/1
virtual_use_local_privs=YES
anon_umask=133
4、PAM验证配置
sudo vi /etc/pam.d/vsftpd.virtual
auth required pam_userdb.so db=/etc/vsftpd/login
account required pam_userdb.so db=/etc/vsftpd/login
5、重启服务
sudo systemctl restart vsftpd,或者sudo /etc/init.d/vsftpd restart
三、验证
浏览器或ftp客户端登录,过程省略
四、SSL/TLS配置
1、生成key和crt
openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
2、vsftpd配置
在vsftpd.conf中修改或添加:
rsa_cert_file=/etc/vsftpd/server.crt
rsa_private_key_file=/etc/vsftpd/server.key
ssl_enable=YES
3、验证
本地验证或局域网正常,lftp -u test localhost
布置在云端,用FillZilla,总是报220错误,若不开启TLS在明文下正常,具体还有待测试,初步预估由于经过路由等复杂网络环境,基于ftp自身不安全因素等导致。ftp用于局域网还可以,若用于互联网还是考虑其它协议吧。
五、限制用户访问上级目录
在vsftpd.conf中修改为:
chroot_local_user=YES
用户目录去掉写属性,如:
chmod 555 /home/xxx/1