CentOS Mysql Vsftp Pam-mysql 配置
从服务器分区开始,安装系统分区建议手动便于处理quota
/boot 100M
Swap 1024M //建议物理内存的两倍
/ 10240M //要比所安装软件大小总和还要大,不然不能正常安装系统,
/data 剩下的空间 //把所有的用户资料或内容都放在/data下,好处 系统崩溃时只动/ 分区却可
Vsftpd是linux系统下表现最优越,安全,稳定,快速,Vsftpd的可读性强、易配置,受到更为广泛的应用,Vsftpd有三种实现的形式:
1,匿名用户形式:在默认安装的情况下,系统只提供匿名用户访问
2,本地用户形式:以/etc/passwd中的用户名为认证方式
3,虚拟用户形式:支持将用户名和口令保存在数据库文件或数据库服务器中
虚拟用户FTP服务器的专有用户,虚拟用户只能访问FTP服务器所提供的资源,增强系统本身的安全性。
虚拟用户需要用户名和密码才能获取FTP服务器中的文件,增加了对用户和下载的可管理性。对于需要提供下载服务,但又不让所有人匿名下载;要对下载用户进行管理,又考虑主机安全和管理方便的FTP站点,虚拟用户是极好的解决方案
虚拟用户形式Vsftpd的实现配置
建立目录/data/software 为了软件统一方便管理,Vsftp官方下载点: vsftpd.beasts.org 目前最新版本已为3.0.2
下载pam-mysql://downloads.sourceforge.net/project/pam-mysql/pam-mysql/0.7RC1/pam_mysql-0.7RC1.tar.gz?r= 最新版本已为0.7。
安装vsftpd
# rpm -e vsftpd-** //卸载原来低版本的vsftp
# cd /data/software/
# tar -zvxf vsftpd-3.0.2.tar.gz
# cd vsftpd-3.0.2
# make
把编译好的文件安装到相应目录下即可,没有相关目录请先创建,[不想编译安装的话 yum -y install vsftpd 这样安装方便 ]
如果 CENTOS 64位下 遇到 can not find /lib/lXXX 之类的错误 ,解救办法
1、根据错误提示检查依赖的哪个包没有安装,缺什么补什么。
2、检查pam和pam-devel是否安装rpm -qa|grep pam-3、
64位linux安装vsftp-3.0.2一般会遇到/lib/libpam.so.0: could not read symbols: File in wrong format错误
vi 打开vsf_findlibs.sh,
替换/lib/为/lib64/即可
:%s@\/lib\/@\/lib64\/@g
3.make;make install
1.先备份 cp vsf_findlibs.sh vsf_findlibs.sh.bak
2.vi vsf_findlibs.sh
3.输入:
%s@\/lib\/@\/lib64\/@g
5.回车就替换完了
6. :wq! 保存退出
再次 make && make install 就可以贬义词通过了
# cp vsftpd /usr/local/sbin/vsftpd
# cp vsftpd.conf.5 /usr/local/man/man5/
# cp vsftpd.8 /usr/local/man/man8/
# cp vsftpd.conf /etc/
B. 启动mysqld服务
Mysqld可以直接使用系统自带的,只要启动起来即可。如下:
# service mysqld start/stop/restart //启动/停止/重启mysqld
# chkconfig mysqld on //设置为系统服务,跟随系统自动启动。
C. 安装Pam-mysql
基于mysql的pam认证的虚拟用户配置,需要pam-mysql系统默认没有,系统安装包里也没有,需要下载安装包
# cd /data/software/
# tar –zvxf pam_mysql-0.7.tar.gz
# cd pam_mysql
# make
# cp pam_mysql.so /lib/security
服务配置
Vsftpd配置文件/etc/vsftpd.conf
创建/etc/vsftpd_user_conf目录,并在其下分别为虚拟用户ftpUserOne,ftpUserTwo增加ftpUserOne,ftpUserTwo配置文件
# mkdir /etc/vsftpd_user_conf
# cd /etc/vsftpd_user_conf
# touch ftpUserOne ftpUserTwo
#ftpUserOne,ftpUserTwo配置文件根据需要设置相关vsftp的权限,比如ftpUserOne用户可以下载上传,修改,ftpUserOne文件内容如下:
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_world_readable_only=NO //可以浏览和下载有相关权限的文件(其他用户有可读和可执行权限)
local_root=/data/ftp/ftpUserOne //锁定在相应的目录下,以防越权访问
主配置文件vsftpd.conf内容如下:
listen=YES //打开端口监听21
anonymous_enable=NO //关闭匿名用户权限
local_enable= //要yes 否则ftp登入会提示,本地用户和匿名用户都没有访问权限的提示
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO //在主配置中关闭所有的读写改权限。
guest_enable=YES
guest_username=ftp //这两行的意思是采用虚拟用户形式
ftp_use_local_privs=YES //虚拟用户和本地用户权限相同
user_config_dir=/etc/vsftpd_user_conf //增加对每个虚拟用户的配置
anon_world_readable_only=YES //不可以浏览和下载有相关权限的文件(其他用户有可读和可执行权限)
connect_from_port_20=YES
hide_ids=YES
pasv_min_port=50000
pasv_max_port=60000
dirmessage_enable=YES
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
xferlog_enable=YES
ls_recurse_enable=NO
ascii_download_enable=NO
async_abor_enable=YES
ftpd_banner=Welcome to lanmang.com FTP service.
one_process_model=YES
idle_session_timeout=120
data_connection_timeout=300
accept_timeout=60
connect_timeout=60
anon_max_rate=50000
max_clients=200
max_per_ip=4
check_shell=NO
2.虚拟用户配置
A.创建真实用户与虚拟用户的映射
# useradd ftp
# passwd ftp //提示输入密码时请输ftpPassword
#必要时使用 : useradd -d /data/ftpsite -s /sbin/nologin ftp
B.创建数据库
#mysql –u root –p
Mysql>create database ftpd;
Mysql> use ftpd;
Mysql> create table user(name char(20) binary,passwd char(20) binary);
Mysql> insert into user (name,passwd) values ('ftpUserOne','password');
Mysql> insert into user (name,passwd) values ('ftpUserTwo','password1');
Mysql> insert into user (name,passwd) values ('ftpUserOne2','password2');
Mysql> grant select on ftpd.user to ftp@localhost identified by 'ftpPassword';
Mysql>quit
A.建立认证文件
# cd /etc/pam.d/
# touch ftp //如果有就不用生成了
# vi ftp //内容如下:
auth required /lib/security/pam_mysql.so user=ftp passwd=ftpPassword host=localhost db=ftpd table=user usercolumn=name passwdcolumn=passwd crypt=0
account required /lib/security/pam_mysql.so user=ftp passwd=ftpPassword host=localhost db=ftpd table=user usercolumn=name passwdcolumn=passwd crypt=0
# 注意:
#crypt=0: 明文密码
#crypt=1: 使用crpyt()函数(对应SQL数据里的encrypt(),encrypt()随机产生salt)
#crypt=2: 使用MYSQL中的password()函数加密
#crypt=3:表示使用md5的散列方式
#上面是两句配置,第一句是以auth开始的,第二句以account开始
三:启动/关闭vsftpd服务
# /usr/local/sbin/vsftpd &
# vi /etc/rc.d/rc.local //修改系统启动文件,在最后加入/usr/local/sbin/vsftpd & 作为系统服务,将会随着系统而启动
#注:关闭服务为:killall vsftpd
#查看是否启动成功请使用netstat –ntl查看21端口是否起来。
四:配额设置
对用户做磁盘限额,限额功能是系统自带,不是vsftp功能,对ftp用户主目录:/data/ftpsite/限制,修改/etc/fstab文件,重新启动计算机
A.编辑/etc/fstab文件,重新启动计算机,使限额功能生效
# vi /etc/fstab
把LABEL=/data /data ext3 defaults 1 2
修改为
LABEL=/data /data ext3 defaults,usrquota,grpquota 1 2
# reboot
启动完成后:
# cd /data
# quotacheck –avug
# quotaon -a
B.限额配置文件的修改
# edquota ftp //为用户ftp设置磁盘配额
系统会自动打开配额文件,如下:
Disk quotas for user ftp (uid 502):
Filesystem blocks soft hard inodes soft hard
/dev/sda2 424 0 0 13 0 0
第一列是启用了配额的文件系统的名称
第二列显示了用户当前使用的块数,单位为KB。
随后的两列用来设置用户在该文件系统上的软硬块限度
inodes 列显示了用户当前使用的i节点数量。
最后两列用来设置用户在该文件系统上的软硬i节点限度.
硬限是用户或组群可以使用的磁盘空间的 绝对最大值。
达到了该限度后,磁盘空间就不能再被用户或组群使用了。
软限定义可被使用的最大磁盘空间量。和硬限不同的是,软限可以在一段时期内被超过。这段时期被称为过渡期(grace period),默认七天的超越。过渡期可以用秒钟、分钟、小时、天数、周数、或月数表示。
如果以上值中的任何一个被设置为 0,那个限度就不会被设置
C.校验用户的配额是否被设置命令# quota ftp
显示磁盘配额使用状态:# repquota -a
新添加用户的方法。
# mysql -u root -h localhost –p
mysql> use ftpd;
mysql> insert into user (name,passwd) values ('ftpUserOne','password');
mysql> quit
# cd /etc/vsftpd_user_conf
# touch ftpUserOne
# vi ftpUserOne
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_world_readable_only=NO
local_root=/data/ftp/ftpUserOne
# cd /data/ftp/
# mkdir ftpUserOne
# chown ftp:ftp ftpUserOne
chmod 700 ftpUserOne
配置IPTABLES 让VSFTP通过
FTP控制端口一般为21,数据端口不一定是20,这和FTP的应用模式有关,主动模式应该为20,被动模式由服务器端和客户端协商而定
FTP的主动模式(active mode)和被动模式(passive mode)
一个控制连接(control connection)用于传递客户端的命令和服务器端对命令的响应,服务器21端口,生存期是整个FTP会话
几个数据连接(data connection)用于传输文件和其它数据,如目录列表等。在需要数据传输时建立,数据传输完毕就关闭,每次使用的端口不一定相同。
数据连接既可由客户端发起,也可由服务器端发起,FTP协议控制连接使用端口21,使用ISA的IP PACKET FILTER就可以这种连接进行很好的安全保护。
数据传输连接的目的端口通常实现无法知道,处理端口转发非常困难
iptables中配置vsftp
问题:配置iptables后, vsftpd不能用。常见现象是能够登录到服务器,LIST列目录失败(超时)。
主动模式客户连接 TCP/21,服务器通过 TCP/20 连接客户的随机端口
状态防火墙
iptables -A INPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
被动模式下,客户连接 TCP/21,客户再通过其他端口连接服务器的随机端口 ,服务器在被动模式下打开临时端口让客户连过来
需要几个条件
1.client 没有防火墙时,用主动模式连接即可
2.server 没有防火墙时,用被动模式即可
3.双方都有防火墙时,vsftpd 设置被动模式高端口范围,server 打开那段范围,client 用被动模式连接即可
4.加载 ip_conntrack_ftp 模块,使 server 支持 connection tracking,支持临时打洞,client 用被动模式即可
5.server 使用 ip_conntrack_ftp、client 使用 ip_conntrack_ftp 和 ip_nat_ftp,支持临时打洞和临时 NAT 穿越打洞,双方使用主动或被动模式均可
优点:不影响ftp配置;
缺点:客户会感觉到连接有些延迟。原因参见ip_conntract的实现原理
在/etc/modprobe.conf中添加 alias ip_conntrack ip_conntract_ftp ip_nat_ftp
在/etc/rc.local中添加
/sbin/modprobe ip_conntract
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_nat_ftp
作用就是完成上面所说的“临时打洞”的方法
•限制被动模式连接端口的配置说明
优点:对连接速度没有影响
缺点:限制了被动模式下,客户端并发连接的数量。
在/etc/vsftpd/vsftpd.conf中添加
pasv_min_port=2222
pasv_max_port=2225
iptables中开放这段端口
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp --dport 2222:2225 -j ACCEPT