Vsftp搭建(一)与PAM验证 SSL加密 登陆

做~自己de王妃 提交于 2019-12-02 17:15:50

觉得有用请顶一下,谢谢


先上配置设置


Vsftp常用参数一览表:

参数选项

意义及用法

一、全局配置参数(同样用于本地用户、匿名用户、虚拟用户)

登录信息参数:

 

1

dirmessage_enable=YES

当切换目录时,显示该目录下.message隐藏文件的内容。

默认情况下有message_file=.message

2

ftpd_banner=welcome to simon’s ftp server

当登录服务器成功时显示的banner信息。

3

banner_file=/etc/vsftpd/banner_file

登录服务器成功后显示/etc/vsftpd/banner_file的信息

4

banner_fail=/etc/vsftpd/banner_fail

登录服务器失败后显示/etc/vsftpd/banner_fail的信息。

l 如果设置了ftp_banner=的值,登录服务器将覆盖vsftpd默认的连接后的信息。

l 如果同时设置了ftp_banner=banner_file=,那么banner_file将覆盖ftp_banner=的值。

日志文件参数:(用于开启本地用户匿名用户和虚拟用户的上传和下载的日志功能)

5

xferlog_enable=YES

xferlog_std_format=YES

xferlog_file=/var/log/vsftpd

激活上传和下载日志功能。

启用xferlog格式的日志。

指定日志的存放位置/var/log/vsftpd

性能参数:

6

设置空闲的用户会话中断时间:

idle_session_timeout=600

用户会话闲置10分钟后被中断

7

设置空闲的数据连接中断时间:

data_connection_timeout=120

将在数据连接空闲2分钟后被中断

8

设置客户端空闲时自动中断和激活的连接时间

accept_timeout=60

connect_timeout=60

 

将客户空闲一分钟后自动中断连接

并在中断一分钟后自动激活连接

9

设置被动连接时客户端连接时的端口范围

pasv_min_port=50000

pasv_max_port=60000

 

将客户连接时的端口范围在5000060000之间。

10

listen=YES

vsftpd处于独立的启动模式下工作开启ipv4支持

11

listen_port=21   默认21

Vsftpd监听的端口默认为21

12

listen_ipv6=YES

开启ipv6支持。

13

tcp_wrappers=YES

使用tcp_wrappers作为主机的访问控制。

14

pam_service_name=vsftpd

设置使用的pam验证的配置文件名称,默认路径在/etc/pam.d

15

nopriv_user=ftp |  nobody

指定vsftp服务运行时的账号。

16

ls_recurse_enable=YES |NO 默认 YES

是否允许用户使用ls R递归列表比较占用系统资源

17

dirlist_enable=YES |NO  默认YES

是否允许用户使用dirls 之类得列目录命令。

18

download_enable=YES |NO 默认 YES

是否允许用户下载文件

19

write_enable=YES | NO  默认NO

是否允许用户上传(包括本地用户、匿名用户上传的前提条件)

20

local_enable=YES | NO  默认YES

本地用户是否可以访问ftp服务器

21

deny_file={*.exe,*.dll}

设置不允许传输的文件类型{}包括上传下载。

22

max_clients=200

设置最大的连接数量

23

max_per_ip=3

同一IP地址最多的连接数量,超过将被拒绝。

24

use_localtime=YES

是否使用本地时间?默认使用GMT时间,文件时间比中国晚8个小时,建议设置为YES

 二、本地用户配置参数:

25

local_enable=YES | NO 默认 YES

是否允许本地用户访问,默认允许。

26

local_umask=xxxx ( 四位)

1.       不管源文件权限如何,上传后文件根据由xxxx决定。777-xxx

2.       不管源文件权限如何,也不管xxx是否屏蔽1可执行,上传文件都不可执行。上传后的文件永远不可执行。

3.       默认xxx1770077

4.       建立目录权限为700

27

local_max_rate=50000   50k

设置本地用户传输的最大速率(0为不限制

 囚监本地用户使其不能切换到自家目录外选项:

28

chroot_local_user=YES | NO   默认NO

chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list

是否囚监本地用户使其不能切换到自家目录。(默认可以切换)

表示转折开启囚监列表功能,在列表中的用户可是例外。

囚监列表文件的存放位置。

 

                                             

29

userlist_enable=YES

userlist_deny=YES | NO

userlist_file=/etc/vsftpd/userlist_file指定列表文件

 

是否开启userlist访问控制功能。

列表中的用户是否被禁止访问,YES禁止列表中的用户。NO除列表中用户外都被禁止。当NO时,只有在列表中加入“ftp”匿名用户才可以访问。或加入“anonymous,anonymous才可以访问。当最终文件拥有者仍为“ftp”用户。

30

local_root=

默认没有此参数,将本地用户引导到自家目录当中,也可加入此参数,指定本地用户来登录后进入其他目录中。

三、匿名用户选项参数:保证1#setsebool P allow_ftpd_anon_write=1  2#chcon R t public_content_rw_t  /var/ftp或第二项#setsebool p allow_ftpd_full_access=1

31

anonymous_enable=YES |NO 默认YES

匿名用户是否可以访问下载。默认可以

匿名用户上传选项 保证匿名用户有写的权限 如: chmod o+w /var/ftp/pub

32

anon_world_readable_only=YES | NO 默认NO

anon_upload_enable=YES |NO  默认NO

anon_mkdir_write_enable=YES |NO 默认NO

anon_other_write_enable=YES |NO 默认NO

 

匿名用户是否可以上传,默认不可以。

匿名用户是否可以建立目录,默认不可以。

匿名用户是否可以执行删除,重命名等

33

anon_max_rate= 单位B

设置匿名用户传输的最大速率(0为不限制

34

chown_uploads=YES |NO 默认NO

chown_username=

匿名用户上传文件是否更改文件的拥有者(拥有组仍是FTP)匿名用户建立文件夹,拥有者仍是FTP

更改后的拥有者。

35

anon_umask=xxxx(四位)

local_umask

四、虚拟用户选项参数:虚拟用户访问前提条件:local_enable=YES 默认为NO 不管anonymous_enable=YESNO

36

guest_enable=YES |NO

guest_username=

开启虚拟用户选项

指定虚拟用户执行FTP时,映射成的本地用户

37

user_config_dir=/etc/vsftpd/config设置放置虚拟用户各自的配置文件,以该用户名字命名

38

local_root= 设置虚拟用户各自的家目录

 

虚拟用户其他选项参数由匿名用户的选项参数决定。

五、FTPS配置参数:以下参数除allow_anon_ssl=外 ,其他对本地用和虚拟用户有效,但此参数组写进虚拟用户各自配置文件当中无效(user_config_dir=

39

ssl_enable=YES | NO 默认NO

ssl_sslv2=YES ssl_sslv3=YES ssl_tlsv1=YES

指定vsftpd支持加密协议

指定vsftpd支持安全套接字层v2,v3,tls加密方式v1

40

force_local_logins_ssl=YES |NO

 强制本地用户和虚拟用户 ssl 加密登录

41

force_local_data_ssl=YES | NO

强制本地用户和虚拟用户数据传输用ssl

42

rsa_cert_file=/etc/vsftpd/.sslkey/vsftp.pem

指定证书存放位置

43

allow_anon_ssl=YES |NO

允许匿名用户ssl加密登录


搭建

------------------------

基于SSL加密

(可以应用于任何用户验证。可以利用本博的博文抓包验证)

#mkdir  /etc/vsftpd/.sslkey        //建立存放证书的目录
#cd  /etc/vsftpd/.sslkey           //进入该目录以备建立证书
#openssl  req  –new  -x509  -nodes  -out vsftpd.pem  -keyout  vsftpd.pem  //生成证书,Common Name必须是客户端访问FTP服务器时的FQDN.


#chmod  -R 400  /etc/vsftpd/.sslkey  //保证证书安全,修改证书目录的权限。
在/etc/vsftpd/vsftpd.conf配置文件中添加:
ssl_enable=YES   ssl_sslv2=YES   ssl_sslv3=YES   ssl_tlsv1=YES
force_local_logins_ssl=YES   force_local_data_ssl=YES
rsa_cert_file=/etc/vsftpd/.sslkey/vsftpd.pem
#service  vsftpd  restart

------------------------


基于mysql验证

#setsebool –P ftp_connect_db=1
 mysql正常运行需要per-*软件包的支持
 pam_mysql需要安装mysql_devel
 


 

#useradd –d /var/ftp/vuser  -s /sbin/nologin    //在系统中增加一个本地用户vuser。

#chmod o+rwx /var/ftp/vuser    //让数据库中虚拟用户test1和test2具有可读写执行权限。
在vsftpd配置文件中加入两条:
guest_enable=YES     //允许虚拟用户登录
guest_username=vuser //把test1,test2虚拟用户映射成本地用户vuser.
(虚拟用户访问服务器必须保证前提条件local_enable=YES默认为NO,与anonymous_enable=是否为NO无关,
虚拟用户要上传文件必须保证前提条件write_enable=YES,虚拟用户的特殊参数user_config_dir=,在各自的配置文件中可以加入一条本地用户配置参数local_root=和userlist(chroot选项不起作用,虚拟用户不可以切换到虚拟目录外的目录),其它参数由匿名用户的各个参数和全局配置参数与决定如:
anon_umask= ,anon_upload_enable=,anon_mkdir_write=,anon_other_write_enable=)。


源码编译安装pam_mysql.模块路径为/usr/lib/security/pam_mysql.so


编辑/etc/pam.d/vsftpd注释掉原来的参数选项,添加:
auth    required  /usr/lib/security/pam_mysql.so  user=simon passwd=redhat host=loclahost db=vftpuser
table=users usercolumn=name passwdcolumn=pwd crypt=2
account required  /usr/lib/security/pam_mysql.so  user=simon passwd=redhat host=loclahost db=vftpuser
table=users usercolumn=name passwdcolumn=pwd crypt=2


------------------------

PAM_MYSQL 验证登陆实验

OS: Red Hat Enterprise Linux Server release 6.3 (Santiago) 64位系统
Network: 192.168.1.33/ 255.255.0.0
内核: 2.6.32-279.el6.x86_64
数据库: mysql-5.1.61-4.el6.x86_64
FTP服务器: vsftpd-2.2.2-11.el6.x86_64
相关联的其它软件:mysql-devel-5.1.61-4.el6.x86_64   pam-devel-1.1.1-10.el6_2.1.x86_64 
gcc-4.4.6-4.el6.x86_64            gcc-c++-4.4.6-4.el6.x86_64
注:本次实验系统配置基本上是默认安装,所需软件系统自带,除pam_mysql-0.7RC1.tar.gz另外下载,SELinux禁用,防火墙通过FTP功能。


第一步:安装pam_mysql
首先要说下,pam_mysql 在 RHEL6.3里目前还没有加入,需要自行编译.准备编译环境并编译 pam_mysql.so (mysql-devel pam-devel gcc gcc-c++系统默认安装自带)
wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz
#tar zxvf pam_mysql-0.7RC1.tar.gz
#cd pam_mysql-0.7RC1
#./configure
#make   
#make install
编译完的 pam_mysql.so 放在 /lib/security 下是 pam 的默认路径。
64位系统的所有pam模块都在/lib64/security/
#ln /lib/security/pam_mysql.* /lib64/security/    要做成硬链接


第二步:创建数据库信息
[root@shinegoo /]# service mysqld start   启动数据库服务器
[root@shinegoo /]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.1.61 Source distribution
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners. 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 
1、建立数据库
mysql> create database vsftp;
Query OK, 1 row affected (0.02 sec)
2、创建用户权限
mysql> grant all privileges on vsftp.* to virtual@"%" identified by '123456';
Query OK, 0 rows affected (0.00 sec)
切换数据库
mysql> use vsftp;
Database changed
3、创建用户帐号数据表
mysql> create table account (
-> id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> name VARCHAR(128) NOT NULL UNIQUE,
-> passwd VARCHAR(128) NOT NULL
-> )engine=myisam;  // engine=myisam是性能极高的引擎,支持全文本搜索,不支持事务。
Query OK, 0 rows affected (0.10 sec)
4、创建日志记录表,记录用户访问信息
mysql> create table log (
    -> msg varchar(128),
    -> user varchar(128),
    -> pid int,
    -> host varchar(128),
    -> rhost varchar(128),
    -> time timestamp
    -> )engine=innodb;  // engine=innodb支持事务处理,不支持全文本搜索,以上两项可不要。
Query OK, 0 rows affected (0.08 sec)
5、创建触发器,自动把更新的密码用 md5 加密方式加密(本次配置下没创建,因为md5不是很稳定!)
mysql> CREATE TRIGGER trigger_format_passwd (注删除:drop trigger trigger_format_passwd)
-> BEFORE INSERT
-> ON account
-> FOR EACH ROW
-> SET NEW.passwd = md5(NEW.passwd);
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE TRIGGER trigger_format_passwd_update (注删除:drop trigger 触发器名)
-> BEFORE UPDATE
-> ON account
-> FOR EACH ROW
-> SET NEW.passwd = md5(NEW.passwd);
Query OK, 0 rows affected (0.00 sec) 
mysql> quit
Bye
第三步:创建 pam 认证规则内容(注: 只能有两行不能有空格)
[root@shinegoo pam.d]# vim vsftpd_mysql    建vsftpd_mysql文件名
[root@shinegoo pam.d]# cat /etc/pam.d/vsftpd_mysql
auth required /lib64/security/pam_mysql.so user=virtual passwd=123456 host=192.168.1.33 db=vsftp table=account usercolumn=name passwdcolumn=passwd crypt=0 sqllog=true logtable=log logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logrhostcolumn=rhost logtimecolumn=time verbose=1
account required /lib64/security/pam_mysql.so user=virtual passwd=123456 host=192.168.1.33 db=vsftp table=account usercolumn=name passwdcolumn=passwd crypt=0 sqllog=true logtable=log logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logrhostcolumn=rhost logtimecolumn=time verbose=1


[root@localhost pam.d]#
user:连接 mysql 的用户
passwd:连接 mysql 的用户密码
host:mysql 服务器地址,格式可以是ip ip:port unix socket,比如/tmp/mysql.sock
db:存放 vsftp 验证信息的数据库
table:用户信息表
usercolumn:用户信息表用户名列
passwdcolumn:用户信息表密码列
logtable:日志表
logmsgcolumn:日志表消息列,记录日志消息主体。
logusercolumn:日志表用户列,记录访问 ftp 的用户。
logpidcolumn:日志表 pid 列,记录调用 pam_mysql.so 的进程的pid。
loghostcolumn:日志表 host 列,记录 ftp 服务器 ip。
logrhostcolumn:日志表 rhost 列,记录 ftp 客户端 ip.
logtimecolumn:日志表时间列,记录用户访问的时间。
crypt:加密方式,一共支持
0 / plain 明文密码。
1 / Y crypt 加密方式,在 mysql 查询语句中对应 encrypt 函数。
2 / mysql passwd 加密方式,在 mysql 查询语句中对应 password 函数。
3 / md5 md5 加密方式,在 mysql 查询语句中对应 md5 函数。
4 / sha1 sha1 加密方式,在 mysql 查询语句中对应 sha1 函数。
如果 RHEL6.3 上要使用 3 方式进行加密,务必把/etc/my.cnf 里面的 old_passwords=1 改成 old_passwords=0,否则 mysql 会使用老的加密算法,导致和 pam_mysql.so 密码验证不成功。
上面配置我不做过多解释。大家请看 pam_mysql 的 README,有很详尽的解释。
#chmod 600 vsftpd_mysql   //(注:vsftpd_mysql 含有密码信息,所以务必修改权限!)
#chown root.root vsftpd_mysql
第四步:创建虚拟用户
useradd -d /home/virtual -s /sbin/nologin virtual
chown –R virtual.virtual /home/virtual/ virtual
chmod  -R 700 /home/virtual


第五步:修改 vsftpd 配置文件,指定由pam 配置文件来进行用户身份验证
/etc/vsftpd/vsftpd.conf的配置如下
anonymous_enable=NO 
local_enable=YES    //允许本地用户访问(/etc/passwd中的用户)
write_enable=NO   //控制是否允许使用任何可以修改文件系统的FTP 的指令
local_umask=022 
dirmessage_enable=YES
message_file=.message          //目录提示信息的内容文件 
xferlog_enable=YES 
xferlog_std_format=YES 
connect_from_port_20=YES 
listen=YES 
#listen_port=21   //绑定到某个端口
#ftp_data_port=20   //数据传输端口
pam_service_name=vsftpd_mysql 
guest_enable=YES 
guest_username=virtual
user_config_dir=/etc/vsftpd/user_config 
userlist_enable=YES 
ftpd_banner=Welcome to 先谷科技 FTP service.
#chroot_local_user=YES  //限制用户在自己的主目录 整个其它目录都不能看到 全局性
#ls_recurse_enable=NO    //使用ls -R命令会消耗大量系统资源
#one_process_model=YES    //是否使用单进程模式,此项只有anonymous_enable=NO时才不会出错
idle_session_timeout=120   //空闲连接超时
data_connection_timeout=300    //数据传输超时
accept_timeout=60       //PAVS请求超时
connect_timeout=60      //PROT模式连接超时 
reverse_lookup_enable=NO  //解决登陆验证缓慢问题.〈新加进去的没实际测试过2011/12/15〉
anon_max_rate=2000000    //匿名用户的传输比率 (b/s) (2M)
local_max_rate=500000000   //本地用户的传输比率(b/s) (500M) 虚拟用户
max_clients=200    //可接受的最大client数目
max_per_ip=4    //每个ip的最大client数目
tcp_wrappers=YES
[root@localhost vsftpd]# service vsftpd start    重启 ftp 服务
Starting vsftpd for vsftpd: [ OK ]
[root@localhost vsftpd]#
第六步:添加用户权限配置文件
[root@shinegoo vsftpd]# mkdir user_config   //在目录下/etc/vsftpd/建立存放用户配置文件夹
[root@shinegoo vsftpd]#cd user_config
[root@shinegoo user_config]# vim admin (编辑用户权限)
#local_root=/mdraid5
#write_enable=YES
#anon_upload_enable=YES    //控制匿名用户文件上传, 只有在write_enable=YES时,此项才有效
#anon_mkdir_write_enable=YES  //控制文件夹的创建, 只有在write_enable=YES时,此项才有效
#anon_other_write_enable=YES  //控制对文件和文件夹的删除和重命名
#anon_world_readable_only=YES //文件下载, 具有全球读权限的文件(非目录)可以下载到本机阅读
#virtual_use_local_privs=YES  //加上这句用户能看到目录和文件显示信息
#chmod_enable=YES
#file_open_mode=0775  //上传档案的权限,与chmod 所使用的数值相同。如果希望上传的文件可以执行,设此值为0777。默认值为0666。
#local_max_rate=500000000  //本地用户的传输比率(b/s) (500M) 虚拟用户
第七步:创建用户数据添加用户名和密码
[root@shinegoo user_config]# mysql -u root –p
mysql> use vsftp;
mysql> insert into account (name, passwd) values ("admin", "12345678"); 
Query OK, 1 row affected (0.00 sec)
mysql> select * from account;
+----+-------+----------+
| id | name  | passwd   |
+----+-------+----------+
|  1 | admin | 12345678 |
+----+-------+----------+
1 row in set (0.00 sec) 
mysql> quit
Bye
第八步:测试登录
[root@shinegoo user_config]# ftp 192.168.1.33
Connected to 192.168.1.33
220 Welcome 
530 Please login with USER and PASS.
Name (192.168.1.33:root): admin
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 
ftp>
第九步:查看日志
[root@shinegoo vsftpd]# mysql -u root -p
mysql> use vsftp;
mysql> select * from log;
+------------------------------------+-------+------+-----------+--------------+---------------------+
| msg                                | user  | pid  | host      | rhost        | time                |
+------------------------------------+-------+------+-----------+--------------+---------------------+
| AUTHENTICATION FALURE (FIRST_PASS) | admin | 5854 | (unknown) | 172.31.0.110 | 2012-08-11 11:56:57 |
| AUTHENTICATION SUCCESS             | admin | 5854 | (unknown) | 172.31.0.110 | 2012-08-11 11:56:57 |
| QUERYING SUCCESS                   | admin | 5854 | (unknown) | 172.31.0.110 | 2012-08-11 11:56:57 |
+------------------------------------+-------+------+-----------+--------------+---------------------+
3 rows in set (0.00 sec) 
mysql> 
系统管理
OS:系统用户名 root 
密码:1
Mysql数据库:用户名root和vsftp
密码:空  和123456(virtual虚拟用户)
VSFTPD管理员:admin 
密码:12345678 



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!