分类:
2012-03-12 18:30:17
原文地址:完整功能的FTP服务器配置 作者:gaogo
背景:原来是分成几个部分来介绍,现在觉得太麻烦了,就整合到一篇文章里吧
思路:把原来的文章整合到一起
功能:
1.基于SSL加密
2.基于Mysql虚拟用户认证,使用SSL认证
3.本地用户使用SSL认证
4.本地用户和虚拟用户共存,同时使用SSL认证
5.其它限速啊,根据配置自行修改
步骤:
一、 升级OpenSSL
1. 下载
去官方下载,地址为:
下载最新版本:openssl-1.0.0a.tar.gz
2. 安装
1
2
3
4
5
6 |
Tar xzvf openssl-1.0.0a.tar.gz
Cd openssl-1.0.0a
./config –prefix=/usr/local/openssl-1.0.0a
Make
Make test
Make install |
1. 验证
1
2 |
/usr/local/openssl-1.0.0a/bin/openssl version
OpenSSL 1.0.0a 1 Jun 2010 |
二、 升级OpenSSH
1. 下载
去官方下载,地址为:
下载最新版本:openssh-5.6.p1.tar.gz
1. 安装
1
2
3
4
5 |
Tar xzvf openssh-5.6.p1.tar.gz
Cd openssh-5.6.p1
./configure –prefix=/usr –with-pam –with-zlib –with-ssl-dir=/usr/local/openssl-1.0.0a --with-md5-passwords --mandir=/usr–hare/man –sysconfigdir=/etc/ssh
Make
Make install |
2. 验证
1
2 |
ssh -v
OpenSSH_5.6p1, OpenSSL 1.0.0a 1 Jun 2010 |
三、 安装基于SSL和PAM的VSFTPD
1. 下载
去官方下载,地址为:ftp://vsftpd.beasts.org
下载最新版本:vsftpd-2.3.2.tar.gz
2. 修改编译参数
修改编译参数,以支持SSL和PAM
把builddefs.h
1
2
3
4
5
6
7
8 |
#ifndef VSF_BUILDDEFS_H
#define VSF_BUILDDEFS_H
#undef VSF_BUILD_TCPWRAPPERS
#define VSF_BUILD_PAM
#undef VSF_BUILD_SSL
#endif /* VSF_BUILDDEFS_H */ |
改为
1
2
3
4
5
6
7
8 |
#ifndef VSF_BUILDDEFS_H
#define VSF_BUILDDEFS_H
#undef VSF_BUILD_TCPWRAPPERS
#define VSF_BUILD_PAM
#define VSF_BUILD_SSL
#endif /* VSF_BUILDDEFS_H */ |
3. 建立相应该的目录
1
2 |
Mkdir /etc/Vsftpd
Mkdir /etc/Vsftpd/ssl |
4. 安装
1
2
3
4 |
Make
Make install
Cp Vsftpd.conf /etc/Vsftpd/
Cp RedHat/Vsftpd.pam /etc/pam.d/vsftpd |
四、 配置Vsftpd
1. 配置本地用户
修改/etc/Vsftpd/Vsftpd.conf
1
2
3
4
5
6
7
8
9 |
Local_enable=YES
Dirmessages_enable=YES
Xferlog_enable=YES
Connect_from_port_20=YES
Xferlog_file=/var/log/vsftpd.log
Xferlog_std_format=YES
Chroot_local_user=YES
Listen=YES
Pam_service_name=vsftpd |
2. 配置虚拟用户
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 |
Anonymous_enable=NO
Write_enable=NO
Anon_upload_enable=NO
Anon_mkdir_write_enable=NO
Anon_other_write_enable=NO
Userlist_enable=YES
Userlist_deny=NO
Userlist_file=/etc/vsftpd/vsftpd.userlist
Ls_recurse_enable=NO
Ascii_upload_enable=YES
Ascii_download_enable=YES
Guest_enable=YES
Guest_username=virtual
User_config_dir=/etc/vsftpd/virtual_user_config
User_sub_token+$USER |
3. 配置SSL
1
2
3
4
5
6 |
Ssl_enable=YES
Ssl_tlsv1=YES
Allow_anon_ssl=YES //这里一定要设置为YES,否则虚拟用户验证不了
Force_local_data_ssl=YES
Force_local_logins_ssl=YES
Rsa_cert_file=/etc/vsftpd/ssl/vsftpd.pem |
4. 配置VSFTPD的SSL证书
1
2 |
/usr/local/openssl1.0.0a/bin/openssl req -new -x509 -nodes -out vsftpd.pem -keyout vsftpd.pem
Cp vsftpd.pem /etc/vsftpd/ssl |
5. 建立虚拟帐号映谢的本地帐与
1
2 |
Useradd –s /sbin/nologin –d /home/ftp virtual
Passwd virtual |
五、 配置Mysql
1. 建立数据库并授权virtual用户对vsftpd库有管理权限
1
2
3
4 |
mysql> CREATE DATABASE vsftpd;
Query OK, 1 row affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON vsftpd.* TO virtual@"%" IDENTIFIED BY 'virtual';
Query OK, 0 rows affected (0.00 sec) |
2. 建立用户信息表
1
2
3
4
5
6
7
8 |
mysql> use vsftpd;
Database changed
mysql> CREATE TABLE account (
>`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
>`user` VARCHAR(128) NOT NULL UNIQUE,
>`passwd` VARCHAR(128) NOT NULL
>);
Query OK, 0 rows affected (0.02 sec) |
3. 建立用户访问日志
1
2
3
4
5
6
7
8
9 |
mysql> CREATE TABLE log (
>`msg` VARCHAR(128),
>`user` VARCHAR(128),
>`pid` INT,
>`host` VARCHAR(128),
>`rhost` VARCHAR(128),
>`time` TIMESTAMP
>);
Query OK, 0 rows affected (0.00 sec) |
4. 建立触发器,自动把更新的密码用md5加密方式加密
1
2
3
4
5
6 |
mysql> CREATE 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) |
1
2
3
4
5
6 |
mysql> CREATE TRIGGER trigger_format_passwd_update
>BEFORE UPDATE
>ON account
>FOR EACH ROW
>SET NEW.passwd = md5(NEW.passwd);
Query OK, 0 rows affected (0.00 sec) |
5. 插入用户数据
1
2
3
4
5
6
7
8
9 |
mysql> INSERT INTO account (user, passwd) VALUES ("admin", "redhat");
Query OK, 1 row affected (0.00 sec)
mysql> select * from account;
+----+------------------+---------------------------------------------------+
| id | user | passwd |
+----+-------------------+---------------------------------------------------+
| 1 | admin | e2798af12a7a0f4f70b4d69efbc25f4d |
+----+--------------------+---------------------------------------------------+
1 row in set (0.01 sec) |
六、 安装pam_mysql
1. 下载
去官方下载,地址为:
下载最新版本:pam_mysql-0.7RC1.tar.gz
2. 安装
1
2
3
4
5 |
Tar xzvf pam_mysql-0.7RC1.tar.gz
Cd pam_mysql-0.7RC1
./configure –with-openssl
Make
Make install |
建立链接文件
1 |
Ln –s /usr/lib/security/pam_mysql.so /lib/security/pam_mysql.so |
七、 配置PAM
1. 配置虚拟用户通过PAM验证
把以下内容加入到 /etc/pam.d/vsftpd文件的最前面
1
2
3 |
#### Auth for Mysql virutal user with md5 passwd
auth sufficient pam_mysql.so user=virtual passwd=virtual host=localhost db=vsftpd table=account usercolumn=user passwdcolumn=passwd crypt=md5 sqllog=true logtable=log logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logrhostcolumn=rhost logtimecolumn=time
account sufficient pam_mysql.so user=virtual passwd=virtual host=localhost db=vsftpd table=account usercolumn=user passwdcolumn=passwd crypt=md5 sqllog=true logtable=log logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logrhostcolumn=rhost logtimecolumn=time |
这里的sufficient 是本地用户和虚拟用户共存的关键
2. 配置本地用户
在/etc/pam.d/vsftpd文件中已经存在对本地用户的配置,所以这里不需要更改配置。
八、 其它配置
1. 其它配置
建立本地登录FTP的用户
1
2 |
Useradd kevin
Passwd evin |
2. 建立/etc/vsftpd/vsftpd.userlist
把需要登录FTP用户加入到这个文件
1
2 |
Kevin
Admin |
3. FTP客户端配置
九、 验证
1. 虚拟用户验证
在客户端使用flashfxp以TLS方式连接FTP服务器输入帐号密码登录
如图:
登录成功,如图:
2. 本地用户登录验证
在客户端使用flashfxp以TLS方式连接FTP服务器输入帐号密码登录
如图:
登录成功,如图: