vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序。特点是小巧轻快,安全易用。
vsftpd 的名字代表"very secure FTP daemon", 安全是它的开发者 Chris Evans 考虑的首要问题之一。在这个 FTP 服务器设计开发的最开始的时候,高安全性就是一个目标。
一、安装vsftpd
使用本地yum源安装:
# yum -y install vsftpd
开启服务:
# service vsftpd start
二、安装pam_mysql-0.7RC1
# tar zxvf pam_mysql-0.7RC1.tar.gz
# cd pam_mysql-0.7RC1
# ./configure --with-mysql=/usr/local/mysql --with-openssl
# make
# make install
三、安装数据库
1、准备数据存放的文件系统
新建一个逻辑卷,并将其挂载至特定目录
新建分区的步骤省略,将分区创建成逻辑卷:
# pvcreate /dev/sda5
# vgcreate myvg /dev/sda5
# lvcreate -L 2G -n mydata myvg
# mke2fs -j /dev/myvg/mydata
这里假设其逻辑卷的挂载目录为/mydata,而后需要创建/mydata/data目录做为mysql数据的存放目录。
# mkdir -pv /mydata/data
# vim /etc/fstab
编辑此文件,添加如下行,以实现开机自动挂载:
/dev/myvg/mydata /mydata ext3 defaults 0 0
# mount -a
2、新建用户以安全方式运行进程:
# groupadd -r mysql
# useradd -g mysql -r -s /sbin/nologin -M -d /mydata/data mysql
# chown -R mysql:mysql /mydata/data
3、安装并初始化mysql-5.5.20
首先下载平台对应的mysql版本至本地,这里是32位平台,因此,选择的为mysql-5.5.20-linux2.6-i686.tar.gz,下载此rpm包。
解压缩mysql,并指定其目录:
# tar xf mysql-5.5.20-linux2.6-i686.tar.gz -C /usr/local
# cd /usr/local/
# ln -sv mysql-5.5.20-linux2.6-i686 mysql
# cd mysql
# chown -R mysql:mysql .
初始化mysql:
# scripts/mysql_install_db --user=mysql --datadir=/mydata/data
# chown -R root .
4、为mysql提供主配置文件:
# cd /usr/local/mysql
# cp support-files/my-large.cnf /etc/my.cnf
并修改此文件中thread_concurrency的值为你的CPU个数乘以2,比如这里使用如下行:
thread_concurrency = 2
另外还需要添加如下行指定mysql数据文件的存放位置:
datadir = /mydata/data
5、为mysql提供sysv服务脚本:
# cd /usr/local/mysql
# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
添加至服务列表:
# chkconfig --add mysqld
# chkconfig mysqld on
而后就可以启动服务测试使用了。
# service mysqld start
为了使用mysql的安装符合系统使用规范,并将其开发组件导出给系统使用,这里还需要进行如下步骤:
6、输出mysql的man手册至man命令的查找路径:
编辑/etc/man.config,添加如下行即可:
MANPATH /usr/local/mysql/man
7、输出mysql的头文件至系统头文件路径/usr/include:
这可以通过简单的创建链接实现:
# ln -sv /usr/local/mysql/include /usr/include/mysql
8、输出mysql的库文件给系统库查找路径:
# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf
而后让系统重新载入系统库:
# ldconfig
9、修改PATH环境变量,让系统可以直接使用mysql的相关命令。编辑相关文件/etc/profile:
# vim /etc/profile
添加如下行:
PATH=$PATH:/usr/local/mysql/bin
mysql就此安装完成
10.准备数据库及相关表
在此,我们建立名为vsftp的数据库来存放相关虚拟用户的帐号
mysql> create database vsftpd;
设置默认数据库:
mysql> use vsftpd;
创建表:
mysql> create table users (
-> id int AUTO_INCREMENT NOT NULL PRIMARY KEY, 自动增长
-> name char(20) NOT NULL UNIQUE KEY, 定长检索速度快
-> passwd char(48) NOT NULL
-> );
对于一个表而言,只能有一个字段使用自动增长
添加测试的虚拟用户,其密码采取加密存放的方式
往表中插入数据,id字段不用插入,自动初始化:
mysql> insert into users(name,password) values('magedu',password('123456'));
mysql> insert into users(name,password) values('marion',password('123456'));
查看结果
mysql> select * from users;
授权:
mysql> grant select on vsftpd.* to vsftpd@localhost identified by '123456';
mysql> grant select on vsftpd.* to [email protected] identified by '123456';
两个完全不同的用户。
mysql> flush privileges;
四、建立pam认证
所需文件:
#vi /etc/pam.d/vsftpd.mysql
编辑此文件,添加如下两行:
auth required /lib/security/pam_mysql.so user=vsftpd passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required /lib/security/pam_mysql.so user=vsftpd passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
也可以使用绝对路径,中间的用户之类的信息,要与数据库一致。
3.建立虚拟用户映射的系统用户及对应的目录:
#useradd -r -s /sbin/nologin -d /var/ftproot ftpuser
#chmod go+rx /var/ftproot
4.修改vsftpd的配置文件,使其适应mysql认证
请确保/etc/vsftpd/vsftpd.conf中已经启用了以下选项
anonymous_enable=YES
local_enable=YES
write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
listen=YES
chroot_local_user=YES 最好开启,开启更安全
为/etc/vsftpd/vsftpd.conf添加以下选项
guest_enable=YES 是否启用来宾账号
guest_username=ftpuser
修改/etc/vsfptd/vsftpd.conf中的pam_service_name=vsftpd为如下内容:
pam_service_name=vsftpd.mysql
重启服务:
# service vsftpd restart
关闭Selinux:
# setenforce 0
在验证之前,先使用mysql命令,查看用户能否使用:
# mysql -uvsftpd -p
Enter password:
mysql> show databases;
mysql> use vsftpd
mysql> select * from users;
若可以出现结果,则此用户可以使用
5.访问FTP:
连接成功。在此要知道,虚拟用户的权限与匿名用户的相同,因此,我们设置匿名用户有上传权限时,看看虚拟用户是否有上传权限。
修改/etc/vsftpd/vsftpd.conf文件:
将此项开启:anon_upload_enable=YES
访问FTP:
ftp> lcd C:\windows\system32
ftp> !dir
五、如何让不同的虚拟用户有不同的权限:
假如让magedu这个用户仅有上传权限,marion用户仅有下载权限,改如何实现?
对vsftpd来讲,有一个指令:user_config_dir,可以实现指定一个目录,在目录中建与用户同名的配置文件,用于定义用户访问FTP时独有的权限。在目录中可以定义能否上传、下载,以及最大传输速率等访问控制权限:
anon_max_rate
anon_umask
local_max_rate
max_clients
max_per_ip
guest_username
listen_address
user_config_dir
1. 创建虚拟用户配置文件目录:
# cd /etc/vsftpd/
# mkdir virusers
# cd virusers
2. 编辑虚拟用户配置文件:
# vim magedu
添加如下行:
anon_upload_enable=YES
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
# vim marion
添加如下行:
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
3. 编辑主配置文件:
# cd ..
# vim vsftpd.conf
添加: user_config_dir=/etc/vsftpd/virusers
# service vsftpd reatart
4.访问FTP:
六、虚拟用户可以使用以后,系统用户无法登陆,那如何才能让系统用户与本地用户都可以登陆呢?
# vim /etc/pam.d/vsftpd
将文件/etc/pam.d/vsftpd.mysql与/etc/pam.d/vsftpd的内容合并起来,要把/etc/pam.d/vsftpd.mysql中移过来的required改为sufficient,还要把/etc/pam.d/vsftpd中的session行注释掉。读取文件的时候,是从上往下依次读取的,要注意访问控制的次序。修改后的内容如下:
#%PAM-1.0
#session optional pam_keyinit.so force revoke
auth sufficient /lib/security/pam_mysql.so user=vsftpd passwd=123 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth required pam_shells.so
auth include system-auth
auth sufficient /lib/security/pam_mysql.so user=vsftpd passwd=123 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account include system-auth
#session include system-auth
#session required pam_loginuid.so
修改主配置文件:
# vim /etc/vsftpd/vsftpd.conf
将pam_service_name=vsftpd.mysql
改为pam_service_name=vsftpd
重启服务:
# service vsftpd restart
连接FTP: