PureFTP借助MySQL实现用户身份验证的操作教程
pureftp集成mysql身份验证是将ftp用户信息保存到mysql数据库中,这样可以对大量的ftp服务器做集中管理,对用户帐号的维护只要通过mysql的操作就可以完成。
一、下载pureftp源代码,并确定mysql已经安装好
tarzxvfpure-ftpd-1.0.20.tar.gzcdpure-ftpd-1.0.20 ./configure--prefix=/usr/local/pureftpd\ --with-cookie\ --with-throttling\ --with-ratios\ --with-quotas\ --with-sysquotas\ --with-uploadscript\ --with-virtualhosts\ --with-virtualchroot\ --with-virtualchroot\ --with-diraliases\ --with-peruserlimits\ --with-language=simplified-chinese\ --with-mysql=/usr/local/mysql\ --with-paranoidmsg\ --with-altlog make makecheck makeinstall mkdir-m777/usr/local/pureftpd/etc cppureftpd-mysql.conf/usr/local/pureftpd/etc/pureftpd-mysql.conf cpconfiguration-file/pure-ftpd.conf/usr/local/pureftpd/etc/pure-ftpd.conf cpconfiguration-file/pure-config.pl/usr/local/pureftpd/bin/pure-config.pl
注意 –prefix=/usr/local/pureftpd参数指定了pureftpd的安装路径–with-mysql=/usr/local/mysql参数指定了mysql的安装路径–with-language=simplified-chinese参数指定了服务器返回信息使用的语言
添加pureftpd为系统服务
#cpcontrib/redhat.init/etc/init.d/pureftpd #vi/etc/init.d/pureftpd
修改18/19行
fullpath=/usr/local/sbin/$prog pureftpwho=/usr/local/sbin/pure-ftpwho
为:
fullpath=/usr/local/pureftpd/sbin/$prog pureftpwho=/usr/local/pureftpd/sbin/pure-ftpwho
修改24行
$fullpath/etc/pure-ftpd.conf--daemonize
为
$fullpath/usr/local/pureftpd/etc/pure-ftpd.conf--daemonize #chmod755/etc/init.d/pureftpd #chkconfig--addpureftpd #chkconfigpureftpdon
修改配置文件
#vi/usr/local/pureftpd/etc/pure-ftpd.conf
其中可以修改最大连接数、空闲时间等,详细介绍见http://everspring.blog.51cto.com/497193/104618
其中有几项要修改:
- chrootEveryone yes 限定在自己的家目录
- NoAnonymous yes 不允许匿名登录
- Bind 127.0.0.1,21 监听本机回环<可选>
- Bind 192.168.0.254,21 监听本机IP <自行添加的,非必须>
- CreateHomeDir yes 允许用户登录后自动创建家目录 <必须>
如果启用了iptables,还必须修改下面这一行:
PassivePortRange 3000050000保存退出。
iptables开启相关端口:
iptables-IINPUT-ptcp--dport21-jACCEPT iptables-IINPUT-ptcp--dport30000:50000-jACCEPT
/etc/rc.d/init.d/iptablessave
二、建立mysql认证数据库表
在mysql服务器中建立pureftpd数据库
mysql>CREATEDATABASEpureftpd; mysql>grantallonpureftpd.*topureftpd@"localhost"identifiedby'pureftpd'; mysql>usepureftpd; mysql>CREATETABLE`users`(`id`int(32)unsignedNOTNULLauto_increment, `User`varchar(16)NOTNULLdefault'', `Password`varchar(64)NOTNULLdefault'', `Uid`varchar(11)NOTNULLdefault'-1', `Gid`varchar(11)NOTNULLdefault'-1', `Dir`varchar(128)NOTNULLdefault'', `QuotaSize`smallint(5)NOTNULLdefault'0', `QuotaFiles`int(11)NOTNULLdefault'0', `ULBandwidth`smallint(5)NOTNULLdefault'0', `DLBandwidth`smallint(5)NOTNULLdefault'0', `ULRatio`smallint(6)NOTNULLdefault'0', `DLRatio`smallint(6)NOTNULLdefault'0', `comment`tinytextNOTNULL, `ipaccess`varchar(15)NOTNULLdefault'*', `status`enum('0','1')NOTNULLdefault'0', `create_date`datetimeNOTNULLdefault'0000-00-0000:00:00', `modify_date`datetimeNOTNULLdefault'0000-00-0000:00:00', PRIMARYKEY(`id`,`User`),UNIQUEKEY`User`(`User`)) TYPE=MyISAMAUTO_INCREMENT=5;
三、建立用于pureftpd认证用户的系统信息
建立用于pureftpd认证用户和ftp服务器根目录
创建专门用于上传文件的用户
groupadddownload-g2000 useradddownload-u2000-gdownload-s/sbin/nologin
创建专门用于下载的用户
groupaddupload-g2001 useraddupload-u2001-gdownload-s/sbin/nologin mkdir/ftprootchown-Rupload/ftproot//让upload用户作为ftp根目录的属主 chgrp-Rdownload/ftproot//让download用户为ftp根目录的属组 chmod750/ftproot//让upload用户拥用所有权限,让download用户只有读权限
四、修改pureftpd的配置文件
修改pureftp主配置文件
vi/usr/local/pureftpd/etc/pure-ftpd.conf
ChrootEveryoneyes BrokenClientsCompatibilityno MaxClientsNumber50 Daemonizeyes MaxClientsPerIP8 VerboseLogyes DisplayDotFilesyes AnonymousOnlyno NoAnonymousno SyslogFacility DontResolveyes MaxIdleTime15#在使用ls命令时显示的最多的文件个数,该选项有两个参数第一个是文件数,第二个是目录深度 LimitRecursion100008 AnonymousCanCreateDirsno MaxLoad4 PassivePortRange3000050000使用被动模式,被动端口的范围是30000到50000 AntiWarezyes UserBandwidth1000 Umask133:022 MinUID100 AllowUserFXPno AllowAnonymousFXPno ProhibitDotFilesWriteno ProhibitDotFilesReadno AutoRenameno AnonymousCantUploadyes禁止匿名用户上传 CreateHomeDirno禁止登录用户自动创建家目录 PIDFile/var/run/pure-ftpd.pid MaxDiskUsage99 CustomerProofyes
修改pureftpmysql认证文件
vi/usr/local/pureftpd/etc/pureftpd-mysql.conf
MYSQLServer127.0.0.1 MYSQLPort3306 MYSQLUserpureftpd MYSQLPasswordpureftpd MYSQLDatabasepureftpd MYSQLCryptcleartext密码在数据表中的存储方式,这里选择明文用cleartext、加密使用crypt MYSQLGetPWSELECTPasswordFROMusersWHEREUser='\L' MYSQLGetUIDSELECTUidFROMusersWHEREUser='\L' MYSQLGetGIDSELECTGidFROMusersWHEREUser='\L' MYSQLGetDirSELECTDirFROMusersWHEREUser='\L' MySQLGetBandwidthULSELECTULBandwidthFROMusersWHEREUser='\L' MySQLGetBandwidthDLSELECTDLBandwidthFROMusersWHEREUser='\L'
五、运行pureftpd
添加upload用户,用户名可以任意,但是要对应系统用户的的uid和gid,以获取文件系统的的相关权限
INSERTINTO`users`VALUES(1,'download','download','2000','2000','/ftproot',0,0,0,0,0,0,'','*','1','2013-06-2416:10:00','2013-06-2416:10:00');
添加download用户
INSERTINTO`users`VALUES(2,'upload','upload','2001','2001','/ftproot',0,0,0,0,0,0,'','*','1','2013-06-2416:10:00','2013-06-2416:10:00');
运行pureftpd服务器
/usr/local/pureftpd/bin/pure-config.pl/usr/local/pureftpd/etc/pure-ftpd.conf
现在在客户端使用浏览器打开http://服务器IP:21使用用户upload和download测试登录
六、用facl实现相同目录不同用户使用不同访问权限
chown-Rupload:upload/ftproot chomod700/ftproot setfacl-Rd:u:download:rx/ftproot
后以后创建的子目录和子文件继承facl
setfacl-Ru:download:rx/frptoot
让当前目录的facl生效
Pureftp表字段说明
CREATETABLEIFNOTEXISTS`ftpd`( `User`varchar(16)NOTNULLDEFAULT”COMMENT‘用户名', `status`enum(‘0′,'1′)NOTNULLDEFAULT‘0'COMMENT‘可用状态:0–不可用;1–正在使用', `Password`varchar(64)NOTNULLDEFAULT”COMMENT‘密码', `Uid`varchar(11)NOTNULLDEFAULT‘-1′COMMENT‘用户ID', `Gid`varchar(11)NOTNULLDEFAULT‘-1′COMMENT‘组ID', `Dir`varchar(128)NOTNULLDEFAULT”COMMENT‘拥有的权限路径', `ULBandwidth`smallint(5)NOTNULLDEFAULT‘0'COMMENT‘上传带宽', `DLBandwidth`smallint(5)NOTNULLDEFAULT‘0'COMMENT‘下载带宽', `comment`tinytextNOTNULLCOMMENT‘备注', `ipaccess`varchar(15)NOTNULLDEFAULT‘*'COMMENT‘IP地址', `QuotaSize`smallint(5)NOTNULLDEFAULT‘0'COMMENT‘大小配额', `QuotaFiles`int(11)NOTNULLDEFAULT‘0'COMMENT‘文件类型配额', PRIMARYKEY(`User`) )ENGINE=MyISAMDEFAULTCHARSET=gbkCOMMENT='ftp用户名密码表';