Proftpd和MySQL 的全面配置
2022-10-23
378
Proftpd和MySQL 的全面配置:proftpd(Professional FTP daemon),是针对Wu-FTP的弱项而开发的。除了改进其安全性,还有具备许多Wu-FTP所没有的特点。比如,能以Stand-alone、xinetd模式运行。ProFTP不仅配置方便,而且有MySQL模块,本文主要讲述的是Proftpd和MySQL 的全面配置。
1.建立相应的用户和用户组
groupadd-g5500ftpgroup
adduser-u5500-s/bin/false-d/bin/null-c"proftpduser"-gftpgroupftpuser
2.操作数据库
mysqlmysql-uroot-ppassword
createdatabaseftpdb grantselect,updateonftpdb.*toproftpd@localhostidentifiedby'password'useftpdb
CREATETABLE`ftpgroup`(
`groupname`varchar(16)NOTNULLdefault'', `gid`smallint(6)NOTNULLdefault'5500', `members`varchar(16)NOTNULLdefault'', KEY`groupname`(`groupname`) )TYPE=MyISAMCOMMENT='ProFTPgrouptable'; INSERTINTO`ftpgroup`VALUES('ftpgroup',5500,'ftpuser'); CREATETABLE`ftpquotalimits`( `name`varchar(30)defaultNULL, `quota_type`enum('user','group','class','all')NOTNULLdefault'user', `per_session`enum('false','true')NOTNULLdefault'false', `limit_type`enum('soft','hard')NOTNULLdefault'soft', `bytes_in_avail`floatNOTNULLdefault'0', `bytes_out_avail`floatNOTNULLdefault'0', `bytes_xfer_avail`floatNOTNULLdefault'0', `files_in_avail`int(10)unsignedNOTNULLdefault'0', `files_out_avail`int(10)unsignedNOTNULLdefault'0', `files_xfer_avail`int(10)unsignedNOTNULLdefault'0' )TYPE=MyISAM;
CREATETABLE`ftpquotatallies`(
`name`varchar(30)NOTNULLdefault'', `quota_type`enum('user','group','class','all')NOTNULLdefault'user', `bytes_in_used`floatNOTNULLdefault'0', `bytes_out_used`floatNOTNULLdefault'0', `bytes_xfer_used`floatNOTNULLdefault'0', `files_in_used`int(10)unsignedNOTNULLdefault'0', `files_out_used`int(10)unsignedNOTNULLdefault'0', `files_xfer_used`int(10)unsignedNOTNULLdefault'0' )TYPE=MyISAM;
CREATETABLE`ftpuser`(
`id`int(10)unsignedNOTNULLauto_increment, `userid`varchar(32)NOTNULLdefault'', `passwd`varchar(32)NOTNULLdefault'', `uid`smallint(6)NOTNULLdefault'5500', `gid`smallint(6)NOTNULLdefault'5500', `homedir`varchar(255)NOTNULLdefault'', `shell`varchar(16)NOTNULLdefault'/sbin/nologin', `count`int(11)NOTNULLdefault'0', `accessed`datetimeNOTNULLdefault'0000-00-0000:00:00', `modified`datetimeNOTNULLdefault'0000-00-0000:00:00', PRIMARYKEY(`id`) )TYPE=MyISAMCOMMENT='ProFTPusertable';
注意这里大家根据实际情况填写自己数据库的用户名和密码,如果大家对数据库操作不熟悉的话,不妨可以用phpmyadmin来操作。
#p#
3.配置proftp文件
ServerName"Frank'sFTPServer"ServerTypestandaloneDefaultServeronPort21
Umask022 MaxInstances30 MaxLoginAttempts3 Usernobody Groupnobody MaxHostsPerUser1"Sorry,youmaynotconnectmorethanonetime." MaxClientsPerUser2"Onlyonesuchuseratatime." MaxClientsPerHost3"Sorry,youmaynotconnectmorethanonetime." RootLoginoff RequireValidShelloff TimeoutStalled10 MaxClients10 AllowForeignAddresson AllowStoreRestarton ServerIdentoff DefaultRoot~ftpgroup SQLAuthTypesBackendPlaintext #Backend表示用户认证方式为MySQL数据库的认证方式 #Plaintext表示明文认证方式,排在最前面的为最先使用的方式 SQLAuthenticateusers*groups* #databasename@hostdatabase_useruser_password SQLConnectInfoftpdb@localhostproftpdpassword SQLUserInfoftpuseruseridpasswduidgidhomedirshell SQLGroupInfoftpgroupgroupnamegidmembers SQLHomedirOnDemandon #如果用户主目录不存在,则系统会根据此用户在用户数据表中的homedir字段的值新建一个目录 #Updatecounteverytimeuserlogsin SQLLogPASSupdatecount SQLNamedQueryupdatecountUPDATE"countcount=count+1,accessed=now()WHEREuserid='%u'"ftpuser #Updatemodifiedeverytimeuseruploadsordeletesafile SQLLogSTOR,DELEmodified SQLNamedQuerymodifiedUPDATE"modified=now()WHEREuserid='%u'"ftpuser QuotaEngineon QuotaDirectoryTallyon QuotaDisplayUnitsMb QuotaShowQuotason QuotaLog"/var/log/quota" SQLNamedQueryget-quota-limitSELECT"name,quota_type,per_session,limit_type,bytes_in_avail,bytes_out_avai l,bytes_xfer_avail,files_in_avail,files_out_avail,files_xfer_availFROMftpquotalimitsWHEREname='%{0}' ANDquota_type='%{1}'" SQLNamedQueryget-quota-tallySELECT"name,quota_type,bytes_in_used,bytes_out_used,bytes_xfer_used,files_i n_used,files_out_used,files_xfer_usedFROMftpquotatalliesWHEREname='%{0}'ANDquota_type='%{1}'" SQLNamedQueryupdate-quota-tallyUPDATE"bytes_in_usedbytes_in_used=bytes_in_used+%{0},bytes_out_usedbytes_out_used=bytes_out_used +%{1},bytes_xfer_usedbytes_xfer_used=bytes_xfer_used+%{2},files_in_usedfiles_in_used=files_in_used+%{3},files_files_out_used=files_ out_used+%{4},files_xfer_usedfiles_xfer_used=files_xfer_used+%{5}WHEREname='%{6}'ANDquota_type='%{7}'"ftpquota tallies SQLNamedQueryinsert-quota-tallyINSERT"%{0},%{1},%{2},%{3},%{4},%{5},%{6},%{7}"ftpquotatallies QuotaLimitTablesql:/get-quota-limit QuotaTallyTablesql:/get-quota-tally/update-quota-tally/insert-quota-tally
ok,就这么简单,重启一下proftp服务就已经能使用proftp+mysql+quota的功能
我们可以在数据库ftpuser添加一个虚拟用户,
INSERTINTO`ftpuser`VALUES(1,'test','ftppasswd',5500,5500,'/home/test','/sbin/nologin');
大家可以在phpmyadmin里直接操作添加一个用户,相信不用我教大家怎么添加吧:)
如果你想设置quota,只要在ftpquotalimits表里设置一下就行了,这个表里的各个参数分别代表:
quotalimits表name: – 用户帐号
quota type: – user, group, class, all (we use user)
per_session: – true or false (we use true)
limit_type: – 硬限制 or 软限制 (我们一般用硬限制)
bytes_in_avail: – 允许上传的字节数
bytes_out_avail: – 允许下载的字节数
bytes_xfer_avail: – 允许传输的字节数(包括上传/下载)
files_in_avail: – 允许上传的文件数
files_out_avail: – 允许下载的文件数
files_xfer_avail: – 允许传输的文件数(包括上传/下载)
老实说用mysql和quota模块来验证用户和设置磁盘限额,但我总觉得还是不够完善,因为在这个方法中,数据库表里还没有相应的权限的字段,所以说相应用户的权限还是得用实际得用户即mysql对应得uid和gid来控制权限,那天要是mysql数据库也能完全控制权限就好了。