觉得有用请顶一下,谢谢
先上配置设置
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=vftpusertable=users usercolumn=name passwdcolumn=pwd crypt=2account required /usr/lib/security/pam_mysql.so user=simon passwd=redhat host=loclahost db=vftpusertable=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 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 vsftpd]# service vsftpd start 重启 ftp 服务 Starting vsftpd for vsftpd: [ OK ] [root 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