Article January 23, 2024

vsftp

Words count 7.6k Reading time 7 mins. Read count 0

Very Secure FTP Daemon

install

sudo apt install vsftpd
sudo apt install db5.3-util yum install compat-db47

config

  • 用户
    • 本地用户
    • 虚拟用户(需映射到一个本地用户/宿主)
    • 匿名用户
  • 连接模式
    • 主动模式:客户端动态端口,服务器主动连接
    • 被动模式:服务器动态端口,客户端主动连接

virtual users

1.创建虚拟用户名

添加虚拟用户名和密码,一行用户名,一行密码
mkdir -p /etc/vsftpd
vi /etc/vsftpd/virtusers

1
2
3
4
ftp1
Mn30Bf68
ftp2
pz8sR2W6

使用db_load命令生成虚拟用户口令认证文件

1
2
db5.3_load -T -t hash -f virtusers virtusers.db
db_load -T -t hash -f virtusers virtusers.db

2.编辑PAM认证文件

/etc/pam.d/vsftpd
顶部插入规则。注释掉原有的规则

1
2
auth required  pam_userdb.so db=/etc/vsftpd/virtusers
account required pam_userdb.so db=/etc/vsftpd/virtusers

3.建立本地映射用户并设置宿主目录权限

useradd -d /home/vftpuser -s /sbin/nologin vftpuser

sudo mkdir -p /home/vftpuser/data
sudo chown vftpuser /home/vftpuser/data
sudo chmod 755 /home/vftpuser #调整权限以允许浏览目录,目录归属于root
–sudo chmod 555 /home/vftpuser/data #chroot_local_user为真时要求虚拟根目录不能写权限

4.配置项

vi /etc/vsftpd.conf (ubuntu)
vi /etc/vsftpd/vsftpd.conf (centos)

https://linux.die.net/man/5/vsftpd.conf
vsftpd/vsftpd.conf.5

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
listen=YES
#listen_port=2121
#ftp_data_port=2020
anonymous_enable=NO
local_enable=YES #禁止本地用户登录 #虚拟用户需启用
write_enable=YES
local_umask=022
chroot_local_user=YES # 限制用户离开指定的根目录
# vsftpd 版本 2.3.5 开始,如果用户的家目录是可写的,vsftpd 会拒绝运行,需启用
allow_writeable_chroot=YES # 允许chroot管理用户写操作,若为NO则用户根目录不能有写权限,需创建子目录
local_root=/home/ftp

# 默认Vsftpd.conf中不包含这些设定项目,需要自己手动添加配置
guest_enable=YES
guest_username=vftpuser
#设定虚拟用户配置 文件名必须和虚拟用户名相同
user_config_dir=/etc/vsftpd/vconf

5.设置虚拟用户个性配置

mkdir -p /etc/vsftpd/vconf
cd /etc/vsftpd/vconf

当virtual_use_local_privs=YES时,虚拟用户和本地用户有相同的权限;
当virtual_use_local_privs=NO时,虚拟用户和匿名用户有相同的权限,默认是NO。

vi ftp1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 用户 test 配置目录
local_root=/home/vftpuser/data/ftp1

#0 本地用户同权 写权限(上传、下载、删除、重命名)
write_enable=YES
virtual_use_local_privs=YES

#1 只下载用户
virtual_use_local_privs=NO
anon_upload_enable=NO

#2 只上传用户
virtual_use_local_privs=NO
anon_world_readable_only=YES #限制下载other可读文件
anon_upload_enable=YES #上传

#3其他权限
anon_mkdir_write_enable=YES #创建文件夹
anon_other_write_enable=YES #删除和重命名文件


touch /home/vftpuser/vconf/ftp2 #空文件,用户只读

https://www.cnblogs.com/ssrs-wanghao/articles/13751408.html

6.重启服务

service vsftpd restart
systemctl enable vsftpd
systemctl restart vsftpd.service
systemctl start vsftpd.service
systemctl status vsftpd.service

7.连接

ftp ftp1@192.168.137.111

8.日志

/var/log/xferlog

0%