linux 的文件传输可以使用 sftp,sftp 基于 openssh 通过 ssh 通道进行数据传输,使用 linux 的系统用户来鉴权,访问操作权限也与系统用户一致。
有时我们需要提供虚拟用户来供他人访问,本文总结sftp/ftp搭建与虚拟用户的配置方法。
Linux 下的 ftp 服务器
vsftpd:apt install vsftpd
proftpd:apt install proftpd-basic
pure-ftpd:apt install pure-ftpd
mysecureshell:apt install mysecureshell
下面只记录使用过的一个。
vsftpd - 搭建 ftp 服务
安装
apt install vsftpd -y
apt install db-util -y
推荐配置
nano /etc/vsftpd.conf
listen=YES
anonymous_enable=NO
local_enable=YES
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=YES
utf8_filesystem=YES
listen_port=2222
pasv_min_port=30000
pasv_max_port=30999
idle_session_timeout=120
data_connection_timeout=300
accept_timeout=60
connect_timeout=60
anon_max_rate=50000
# use virtual users
guest_enable=YES
# virtual users's host username
guest_username=www-data
# virtual users's privs is like its host username
virtual_use_local_privs=YES
# virtual users's config (one file each virtual user)
user_config_dir=/etc/vsftpd/vconf
新建文件夹
mkdir /etc/vsftpd/
mkdir /etc/vsftpd/vconf/
新建虚拟用户
nano /etc/vsftpd/vir_user
username_1
passwd_1
username_2
passwd_2
# 奇数行用户名、偶数行密码
生成数据库
db_load -T -t hash -f /etc/vsftpd/vir_user /etc/vsftpd/vir_user.db
设置验证方式
编辑 /etc/pam.d/vsftpd
nano /etc/pam.d/vsftpd
# 注释掉其他内容,添加下面2行:
auth required pam_userdb.so db=/etc/vsftpd/vir_user
account required pam_userdb.so db=/etc/vsftpd/vir_user
创建虚拟用户的配置
nano /etc/vsftpd/vconf/username_1
# 文件名要与前面新建的用户名一致
local_root=/usr/username_1 # 虚拟用户的个人目录
anonymous_enable=NO
write_enable=NO
#local_umask=022
anon_upload_enable=NO
anon_world_readable_only=NO
anon_mkdir_write_enable=NO
#idle_session_timeout=600
#data_connection_timeout=120
max_clients=10
max_per_ip=5
local_max_rate=10485760 # 限速 100M/s
登录验证
使用 客户端 filezilla,或者 FlashFXP,进行登录测试。
若设置了ssl_enable=YES
,则在登录方式处可选择 ftp over tls
或 ftp over ssl(主动被动均可)
。这一点很灵活,反正都是加密传输。