觉得有用请顶一下,谢谢
先上配置设置
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 |
将客户连接时的端口范围在50000到60000之间。 |
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 | 是否允许用户使用dir、ls 之类得列目录命令。 |
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. 默认xxx为177(0077) 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=YES或NO | ||
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