首页 > 代码库 > vsftpd安装与配置

vsftpd安装与配置

一、需求(Requirements)

用途:更新网站页面

要求:只能访问网站根目录及其子目录,且不能切换到其他目录;不暴露任何系统账户

二、安装(Install)

1. 安装vsftpd

1
yum install vsftpd

2. 安装db4-utils

该工具包用于生成虚拟用户列表数据库文件

1
yum install db4-utils

三、配置(How to do it)

1. 创建虚拟用户列表

格式:一行用户名,一行密码

1
2
3
4
5
[root@daojoo vsftpd]# cat ftp_v_users
test01
123456
test02
654321

2. 生成虚拟用户数据库文件

1
2
3
[root@daojoo vsftpd]# db_load -T -t hash -f ftp_v_users ftp_v_users.db
[root@daojoo vsftpd]# ls ftp_v_users*
ftp_v_users  ftp_v_users.db

3. 配置pam

1
2
3
[root@daojoo vsftpd]# cat /etc/pam.d/vsftpd_vu
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/ftp_v_users
account required /lib/security/pam_userdb.so db=/etc/vsftpd/ftp_v_users

4. 添加虚拟用户宿主用户

1
useradd nginx_www -s /sbin/nologin

5. 创建虚拟用户个性化配置目录

1
mkdir /etc/vsftpd/vconf

6. 修改vsftpd配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 禁用匿名登录
anonymous_enable=NO
# 允许系统账户登录
local_enable=YES
# 将本地用户锁定到根目录中
chroot_local_user=YES
# vsftpd使用的PAM服务名称
pam_service_name=vsftpd_vu
# 是否启用userlist_file指定的文件中的用户列表
userlist_enable=YES
# YES 仅允许userlist_file指定的文件中的用户列表之外的用户登录ftp
# NO 仅允许userlist_file指定的文件中的用户列表中的用户登录ftp
userlist_deny=YES
 
# 改变控制连接端口
listen_port=8060
 
# 启用虚拟用户
guest_enable=YES
# 虚拟用户宿主用户
guest_username=nginx_www
# YES 虚拟用户权限=宿主用户权限
# NO 虚拟用户权限=匿名用户权限
virtual_use_local_privs=YES
# 虚拟用户个性化配置目录
user_config_dir=/etc/vsftpd/vconf
 
# 启用被动模式
pasv_enable=YES
# YES 不检查控制连接与数据连接是否来自同一ip
pasv_promiscuous=no
# 数据端口上限
pasv_max_port=40010
# 数据端口下限
pasv_min_port=40001

7. 虚拟用户个性化配置

1
2
3
[root@daojoo vsftpd]# cat /etc/vsftpd/vconf/test01
# test01登录后会切换到该目录,并作为其根目录
local_root=/var/www/html


四、原理(How it works)

1. 虚拟用户与宿主用户之间的关系

可以简单的理解为宿主用户是虚拟用户登录ftp服务器的代理

2. vsftpd软件包安装完成之后,默认的pam服务名为vsftpd,文件为/etc/pam.d/vsftpd。不能直接在该文件中添加以用于虚拟用户认证的配置项,否则你就会在/var/log/secure日志文件中看到类似下面的提示。

1
219 Jun  3 17:14:37 interface vsftpd: pam_unix(vsftpd:auth): check pass; user unknown

3. 宿主用户可以不能登录系统,但一定要有home目录。我们可以通过抓包查看其连接过程来看为什么一定要有home目录。

先将宿主用户的home目录权限和所有者改成如下

1
drwx------ 4 root root 4096 6月   4 16:25 /home/nginx_www/

然后通过抓包工具可以抓到类似如下的包


能过抓包可以知道连接过程如下:

  1. 客户端发起连接

  2. 服务器接受连接

  3. 服务器要求客户端提供用户名

  4. 客户端提交用户名

  5. 服务器要求客户端提供密码

  6. 客户端提交密码

  7. 服务器告诉客户端登录成功

  8. 进入宿主用户home目录

  9. 进入local_root指定的目录

  10. 客户端选择主被动模式

  11. ?传输数据

4. 改变控制命令连接端口号,由21改为8060,你会发现不使用默认端口/var/log/secure日志文件就会清静很多。

5. 如果开着防火墙,记得放行vsftpd服务所用到的命令端口和数据端口。

1
2
3
iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t filter -A INPUT -p tcp -m multiport --dports 40001:40010 -m state --state NEW -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 8060 -m state --state NEW -j ACCEPT




来自为知笔记(Wiz)