在Ubuntu 22.04中搭建vsftpd并配置多用户FTP服务,安装、配置过程:
1、安装vsftpd
sudo apt update
sudo apt install vsftpd
这些命令会更新软件包列表并安装vsftpd服务器。
2、配置vsftpd
编辑主配置文件:
sudo vi /etc/vsftpd.conf
在文件中添加或修改以下内容:
# 禁用独立的IPv4监听套接字
listen=NO
# 启用独立的IPv6监听套接字
listen_ipv6=YES
# 禁用匿名登录
anonymous_enable=NO
# 允许本地用户登录
local_enable=YES
# 允许上传和其他写操作
write_enable=YES
# 设置上传文件的umask
local_umask=022
# 显示目录欢迎信息
dirmessage_enable=YES
# 使用本地时间而不是GMT时间
use_localtime=YES
# 启用日志记录
xferlog_enable=YES
# 在主动模式下使用端口20进行数据传输
connect_from_port_20=YES
# 将本地用户限制在其主目录中
chroot_local_user=YES
# 为chroot设置一个安全的空目录
secure_chroot_dir=/var/run/vsftpd/empty
# 设置PAM服务名称
pam_service_name=vsftpd
# 启用被动模式
pasv_enable=Yes
# 设置被动模式的端口范围
pasv_min_port=10000
pasv_max_port=10100
# 使用用户名作为替换令牌
user_sub_token=$USER
# 设置默认的本地根目录
local_root=/home/$USER/ftp
# 指定用户特定配置文件的目录
user_config_dir=/etc/vsftpd/user_conf
# 允许用户在其chroot目录中进行写操作
allow_writeable_chroot=YES
3、创建用户配置目录
sudo mkdir -p /etc/vsftpd/user_conf
这个目录将用于存储每个用户的特定配置文件。
4、重启vsftpd服务
sudo systemctl restart vsftpd
这将应用新的配置设置。
配置要求:多用户,每个用户可以有单独的ftp目录;
操作实例:
一、新增gdcool1和gdcool2两个用户并设置密码,gdcool1用户的ftp目录为/var/html,gdcool2用户的ftp目录为/data/file;
二、修改gdcool2用户的ftp目录为/home/file,修改gdcool2用户的密码;
三、删除gdcool2用户;
四、使ftp客户端隐藏/var/html只显示html中的内容,使ftp客户端隐藏/data/file只显示file中的内容。
具体操作:
一、新增gdcool1和gdcool2用户并设置密码,配置不同的FTP目录
1、创建gdcool1用户:
# 创建用户并设置家目录
sudo useradd -m gdcool1
# 设置密码
sudo passwd gdcool1
# 创建FTP目录
sudo mkdir -p /var/html
# 更改目录所有权
sudo chown gdcool1:gdcool1 /var/html
2、为gdcool1创建配置文件:
# 创建用户特定的配置文件
echo "local_root=/var/html" | sudo tee /etc/vsftpd/user_conf/gdcool1
这将gdcool1的FTP根目录设置为/var/html。
3、创建gdcool2用户:
# 创建用户并设置家目录
sudo useradd -m gdcool2
# 设置密码
sudo passwd gdcool2
# 创建FTP目录
sudo mkdir -p /data/file
# 更改目录所有权
sudo chown gdcool2:gdcool2 /data/file
4、为gdcool2创建配置文件:
# 创建用户特定的配置文件
echo "local_root=/data/file" | sudo tee /etc/vsftpd/user_conf/gdcool2
这将gdcool2的FTP根目录设置为/data/file。
二、修改gdcool2用户的FTP目录为/home/file,修改密码
1、修改FTP目录:
# 创建新的FTP目录
sudo mkdir -p /home/file
# 更改目录所有权
sudo chown gdcool2:gdcool2 /home/file
# 更新用户特定的配置文件
echo "local_root=/home/file" | sudo tee /etc/vsftpd/user_conf/gdcool2
2、修改密码:
# 修改用户密码
sudo passwd gdcool2
三、删除gdcool2用户
# 删除用户及其家目录
sudo userdel -r gdcool2
# 删除用户特定的配置文件
sudo rm /etc/vsftpd/user_conf/gdcool2
这将完全删除gdcool2用户,包括其家目录和FTP配置文件。
四、隐藏FTP客户端中的根目录,只显示内容
1、对于gdcool1用户(/var/html):
sudo vi /etc/vsftpd/user_conf/gdcool1
添加以下行:
local_root=/var/html
dirlist_enable=NO
dirlist_enable=NO
将禁止显示目录列表,effectively隐藏根目录。
2、对于gdcool2用户配置方法一样。
3、重启vsftpd服务以应用更改:
sudo systemctl restart vsftpd
这将使所有配置更改生效。
额外说明:
- 每次修改配置后,都建议重启vsftpd服务。
- 确保防火墙允许FTP流量(通常是21端口和被动模式端口范围)。
- 定期检查/var/log/vsftpd.log以监控FTP活动。
- 考虑使用SSL/TLS加密来增强安全性。
备注:
在尝试将已经提前存在的目录设置(或者修改)为用户的FTP目录时,FTP客户端会连接失败,具体原因还在摸索中。暂时的解决方法是,将已经提前存在的目录复制一份,然后再删除存在的目录,FTP设置完成后再将内容复制过来即可。