CentOS平台下pureftpd搭建
2022-10-23
429
一、系统: CentOS 5.3
二、软件以及下载地址
pure-ftpd-1.0.24.tar.gz
ftp://ftp.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.24.tar.gz
三、说明:用来控制用户的ftp上传功能,仅允许ftp用户在自己的目录文件下操作其网站。前提:CentOS 5.3具有搭建好的LAMP环境。
四、搭建环境
1、编译安装pureftp 源代码http://www.pureftpd.org/
[root@localhost src]$ wget ftp://ftp.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.24.tar.gz
–16:21:29– ftp://ftp.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.24.tar.gz
=> `pure-ftpd-1.0.24.tar.gz.1′
正在解析主机 ftp.pureftpd.org… 91.121.49.42
Connecting to ftp.pureftpd.org|91.121.49.42|:21… 已连接。
正在以 anonymous 登录 … 登录成功!
==> SYST … 完成。 ==> PWD … 完成。
==> TYPE I … 完成。 ==> CWD /pub/pure-ftpd/releases … 完成。
==> SIZE pure-ftpd-1.0.24.tar.gz … 560565
==> PASV … 完成。 ==> RETR pure-ftpd-1.0.24.tar.gz … 完成。
长度:560565 (547K)
100%[=======================================>]560,56510.5K/sin28s
16:22:04(19.3KB/s)-`pure-ftpd-1.0.24.tar.gz.1'saved[560565] [root@localhostsrc]$tarzxvfpure-ftpd-1.0.24.tar.gz pure-ftpd-1.0.24/ pure-ftpd-1.0.24/aclocal.m4 …… pure-ftpd-1.0.24/configuration-file/pure-config.py.in pure-ftpd-1.0.24/configuration-file/pure-ftpd.conf.in [root@localhostpure-ftpd-1.0.24]#
如果出现类似configure: error: Your MySQL client libraries aren’t properly installed 的错误,将mysql目录下的 include/mysql下的mysql.h文件以及lib/mysql下的全部文件,连接(直接复制过去或许也可)到 /usr/lib 目录下.
如果编译安装pure-ftpd出现configure: error: Your MySQL client libraries aren’t properly installed错误,解决办法:
[root@joweipure-ftpd-1.0.22]#vi/etc/profile在最后添加
exportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mysql/lib/mysql
如果出现你安装的Mysql是rpm包形式的,则直接用 –with-mysql 将其路径删除即可。
[root@joweipure-ftpd-1.0.22]#./etc/profile
然后再进行./configure ……
出现下面这个表示配置成功
configure:WARNING:unrecognizedoptions:--with-largefile,--with-upload_script_,--with-virtualroot
configure:+--------------------------------------------------------+ configure:|YoucansubscribetothePure-FTPdusersmailing-list| configure:|toaskforhelpandtostayinformedofnewreleases.| configure:|Gotohttp://www.pureftpd.org/ml/now!| configure:+--------------------------------------------------------+ [root@localhostpure-ftpd-1.0.22]#make;makeinstall
五、建立配置文件
[root@localhostpure-ftpd-1.0.22]#mkdir-m755/usr/local/pureftpd/etc
[root@localhostpure-ftpd-1.0.22]# cppureftpd-mysql.conf/usr/local/pureftpd/etc/ [root@localhostpure-ftpd-1.0.22]# cpconfiguration-file/pure-ftpd.conf/usr/local/pureftpd/etc/ [root@localhostpure-ftpd-1.0.22]#cpconfiguration-file/pure-config.pl/usr/local/pureftpd/bin/ [root@localhostpure-ftpd-1.0.22]# chmod755/usr/local/pureftpd/bin/pure-config.pl [root@localhostpure-ftpd-1.0.22]# cpcontrib/redhat.init/etc/init.d/pureftpd [root@localhostpure-ftpd-1.0.22]#chmod755/etc/init.d/pureftpd [root@localhostpure-ftpd-1.0.22]#chownroot:root/etc/init.d/pureftpd//设置root权限 [root@localhostpure-ftpd-1.0.22]#chkconfig--addpureftpd //加入系统启动 [root@localhostpure-ftpd-1.0.22]#chkconfigpureftpdon//开机启动 [root@localhostpure-ftpd-1.0.22]#vi/etc/init.d/pureftpd//修改pureftpd一下几项 #Pathtothepure-ftpbinaries. prog=pure-config.pl fullpath=/usr/local/pureftpd/sbin/$prog//修改此处 pureftpwho=/usr/local/pureftpd/sbin/pure-ftpwho//修改pure-ftpwho路径 start(){ echo-n$"Starting$prog:" $fullpath/usr/local/pureftpd/etc/pure-ftpd.conf--daemonize//修改pure-ftpd.conf路径 RETVAL=$? [$RETVAL=0]&&touch/var/lock/subsys/$prog echo }
#p#
六、建立mysql认证数据库表
[root@joweipureftpd]#mysql-uroot-p
Enterpassword:----输入mysqlroot用户密码进入 mysql>createdatabasepureftpd; mysql>grantallonpureftpd.*topureftpd@localhostidentifiedby'pureftpd'; mysql>usepureftpd mysql>CREATETABLEusers( idint(32)unsignedNOTNULLauto_increment, Uservarchar(16)NOTNULLdefault'*', Passwordvarchar(64)NOTNULLdefault'*', Uidvarchar(11)NOTNULLdefault'-1', Gidvarchar(11)NOTNULLdefault'-1', Dirvarchar(128)NOTNULLdefault'-1', QuotaSizesmallint(5)NOTNULLdefault0, QuotaFilesint(11)NOTNULLdefault0, ULBandwidthsmallint(5)NOTNULLdefault0, DLBandwidthsmallint(5)NOTNULLdefault0, ULRatiosmallint(6)NOTNULLdefault0, DLRatiosmallint(6)NOTNULLdefault0, commenttinytextNOTNULL, ipaccessvarchar(15)NOTNULLdefault'*', statusenum('0','1')NOTNULLdefault'0', create_datedatetimeNOTNULLdefault'0000-00-0000:00:00', modify_datedatetimeNOTNULLdefault'0000-00-0000:00:00', PRIMARYKEY(id,User), UNIQUEKEYUser(User) )TYPE=MyISAMAUTO_INCREMENT=5;
建立用户
你可以用下面建立的test用户登录到/var/pureftp
INSERTINTOusersVALUES(1,'test1','123456','2000','2000','/var/pureftp',0,0,0,0,0,0,'*','*','1','2009-7-1109:20:33','2009-7-1109:20:33');
INSERTINTOusersVALUES(1,'test2','123456','2000','2000','/var/pureftp',0,0,0,0,0,0,'*','*','1','2009-7-1109:20:33','2009-7-1109:20:33');
/var/pureftp ftp登陆的文件目录
七、建立用于pureftpd认证用户的系统信息
你可以自己向下面这样建立一个用户做pureftpd验证但是我下面直接用的是root
[root@localhost/]#groupadd-g2000pureftp
[root@localhost/]#useradd-u2000-gpureftp-d/var/pureftp-s/sbin/nologinpureftp
#p#
八、修改pureftpd的配置文件
[root@localhostvar]#vi/usr/local/pureftpd/etc/pure-ftpd.conf
############################################################ ## #Configurationfileforpure-ftpdwrappers# ## ############################################################ #如果你想要使用配置文件代替命令行选项来运行Pure-FTPd,请运行下面的命令: # #/usr/local/pureftpd/sbin/pure-config.pl/usr/local/pureftpd/etc/pure-ftpd.conf # #RPM缺省使用另外一个配置文件: #/etc/sysconfig/pure-ftpd # #请不要忘了浏览一下http://www.pureftpd.org/documentation.html的 #文档,查看全部的选项列表。 #限制所有用户在其主目录中 ChrootEveryoneyes #如果前一个指令被设置为了"no",下面组的成员(GID)就不受主目录的限制了。而其他的用户还是 #会被限制在自己的主目录里。如果你不想把任何用户限制在自己的主目录里,只要注释掉ChrootEveryone #和TrustedGID就可以了。 #TrustedGID100 #兼容ie等比较非正规化的ftp客户端 BrokenClientsCompatibilityno #服务器总共允许同时连接的最大用户数 MaxClientsNumber50 #做为守护(doemon)进程运行(Forkinbackground) Daemonizeyes #同一IP允许同时连接的用户数(MaximumnumberofsimclientswiththesameIPaddress) MaxClientsPerIP8 #如果你要记录所有的客户命令,设置这个指令为"yes"。 #Thisdirectivecanbeduplicatedtoalsologserverresponses. VerboseLogno #即使客户端没有发送'-a'选项也列出隐藏文件(dot-files)。 DisplayDotFilesyes #不允许认证用户-仅作为一个公共的匿名FTP。 AnonymousOnlyno #不允许匿名连接,仅允许认证用户使用。 NoAnonymousno #Syslogfacility(auth,authpriv,daemon,ftp,security,user,local*) #缺省的功能(facility)是"ftp"。"none"将禁止日志。 SyslogFacilityftp #定制用户登陆后的显示信息(Displayfortunecookies) #FortunesFile/usr/share/fortune/zippy #在日志文件中不解析主机名。日志没那么详细的话,就使用更少的带宽。在一个访问量很大 #的站点中,设置这个指令为"yes",如果你没有一个能工作的DNS的话。 DontResolveyes #客户端允许的最大的空闲时间(分钟,缺省15分钟) MaxIdleTime15 #LDAP配置文件(参考README.LDAP) #LDAPConfigFile/etc/pureftpd-ldap.conf #MySQL配置文件(参考README.MySQL) MySQLConfigFile/usr/local/pureftpd/etc/pureftpd-mysql.conf#关键部分,你整合mysql就靠它了 #Postgres配置文件(参考README.PGSQL) #PGSQLConfigFile/etc/pureftpd-pgsql.conf #PureDB用户数据库(参考README.Virtual-Users) #PureDB/etc/pureftpd.pdb #pure-authd的socket路径(参考README.Authentication-Modules) #ExtAuth/var/run/ftpd.sock #如果你要启用PAM认证方式,去掉下面行的注释。 #PAMAuthenticationyes #如果你要启用简单的Unix系统认证方式(/etc/passwd),去掉下面行的注释。 #UnixAuthenticationyes #请注意,LDAPConfigFile,MySQLConfigFile,PAMAuthentication和 #UnixAuthentication这些指令只能被使用一次,不过,他们能被混合在一起用。例如:如果你使用了 #MySQLConfigFile和UnixAuthentication,那么SQL服务器将被访问。如果因为用户名未找 #到而使SQL认证失败的话,就会在/etc/passwd和/etc/shadow中尝试另外一种认证,如果因 #为密码错误而使SQL认证失败的话,认证就会在此结束了。认证方式由它们被给出来的顺序而被链 #接了起来。 #'ls'命令的递归限制。第一个参数给出文件显示的最大数目。第二个参数给出最大的子目录深度。 LimitRecursion20008 #允许匿名用户创建时间:2009-11-1115:38:00新目录? AnonymousCanCreateDirsno #如果系统被loaded超过下面的值,匿名用户会被禁止下载。 MaxLoad4 #被动连接响应的端口范围。-forfirewalling. #PassivePortRange3000050000 #强制一个IP地址使用被动响应(PASV/EPSV/SPSVreplies)。-forNAT. #SymbolichostnamesarealsoacceptedforgatewayswithdynamicIP #addresses. #ForcePassiveIP192.168.0.1 #匿名用户的上传/下载的比率。 #AnonymousRatio110 #所有用户的上传/下载的比率。 #Thisdirectivesuperscedesthepreviousone. #UserRatio110 #不接受所有者为"ftp"的文件的下载。例如:那些匿名用户上传后未被本地管理员验证的文件。 AntiWarezyes #服务监听的IP地址和端口。(缺省是所有IP地址和21端口) #Bind127.0.0.1,21 #匿名用户的最大带宽(KB/s)。 #AnonymousBandwidth8 #所有用户的最大带宽(KB/s),包括匿名用户。 #UseAnonymousBandwidth*or*UserBandwidth,bothmakesnosense. #UserBandwidth8 #新建目录及文件的属性掩码值。<文件掩码>;:<目录掩码>;. #177:077ifyoufeelparanoid. Umask133:022 #认证用户允许登陆的最小组ID(UID)。 MinUID100 #仅允许认证用户进行FXP传输。 AllowUserFXPyes #对匿名用户和非匿名用户允许进行匿名FXP传输。 AllowAnonymousFXPno #用户不能删除和写点文件(文件名以'.'开头的文件),即使用户是文件的所有者也不行。 #如果TrustedGID指令是enabled,文件所属组用户能够访问点文件(dot-files)。 ProhibitDotFilesWriteno #禁止读点文件(文件名以'.'开头的文件)(.history,.ssh...) ProhibitDotFilesReadno #永不覆盖文件。当上传的文件,其文件名已经存在时,自动重命名,如:file.1,file.2,file.3,... AutoRenameno #不接受匿名用户上传新文件(no=允许上传) AnonymousCantUploadno #仅允许来自以下IP地址的非匿名用户连接。你可以使用这个指令来打开几个公网IP来提供匿名FTP, #而保留一个私有的防火墙保护的IP来进行远程管理。你还可以只允许一内网地址进行认证,而在另外 #一个IP上提供纯匿名的FTP服务。 #TrustedIP10.1.1.1 #如果你要为日志每一行添加PID去掉下面行的注释。 #LogPIDyes #使用类似于Apache的格式创建一个额外的日志文件,如: #fw.c9x.org-jedi[13/Dec/1975]"GET/ftp/linux.tar.bz2"20021809338 #这个日志文件能被www流量分析器处理。 #AltLogclf:/var/log/pureftpd.log #使用优化过的格式为统计报告创建一个额外的日志文件。 #AltLogstats:/var/log/pureftpd.log #使用标准的W3C格式创建一个额外的日志文件。(与大部分的商业日志分析器兼容) #AltLogw3c:/var/log/pureftpd.log #不接受CHMOD命令。用户不能更改他们文件的属性。 #NoChmodyes #允许用户恢复和上传文件,却不允许删除他们。 #KeepAllFilesyes #用户主目录不存在的话,自动创建。 #CreateHomeDiryes #启用虚拟的磁盘限额。第一个数字是最大的文件数。 #第二个数字是最大的总的文件大小(单位:Mb)。 #所以,1000:10就限制每一个用户只能使用1000个文件,共10Mb。 #Quota1000:10 #如果你的pure-ftpd编译时加入了独立服务器(standalone)支持,你能够改变pid文件 #的位置。缺省位置是/var/run/pure-ftpd.pid。 #PIDFile/var/run/pure-ftpd.pid #如果你的pure-ftpd编译时加入了pure-uploadscript支持,这个指令将会使pure-ftpd #发送关于新上传的情况信息到/var/run/pure-ftpd.upload.pipe,这样pure-uploadscript #就能读然后调用一个脚本去处理新的上传。 #CallUploadScriptyes #这个选项对允许匿名上传的服务器是有用的。当/var/ftp在/var里时,需要保留一定磁盘空间 #来保护日志文件。当所在磁盘分区使用超过百分之X时,将不在接受新的上传。 MaxDiskUsage99 #如果你不想要你的用户重命名文件的话,就设置为'yes'。 #NoRenameyes #是'customerproof':工作区(workaround)反对普通的客户错误,类似于:'chmod0public_html'的错误。 #那是一个有效的命令,不过,将导致无知的客户所定他们自己的文件,将使你的技术支持忙于愚蠢的的问题中。 #如果你确信你所有的用户都有基本的Unix知识的话,这个特性将没什么用了。不过,如果你是一个主机提供商 #的话,启用它。 CustomerProofyes #每一个用户的并发限制。只有在添加了--with-peruserlimits编译选项进行编译后,这个指令才起 #作用。(大部分的二进制的发布版本就是例子) #格式是:<每一个用户最大允许的进程>;:<最大的匿名用户进程>; #例如:3:20意思是同一个认证用户最大可以有3个同时活动的进程。而且同时最多只能有20个匿名用户进程。 #PerUserLimits3:20
#p#
九、修改pureftpd-mysql.conf的配置文件
[root@localhostvar]#vi/usr/local/pureftpd/etc/pureftpd-mysql.conf
############################################## ## #SamplePure-FTPdMysqlconfigurationfile.# #SeeREADME.MySQLforexplanations.# ## ############################################## #Optional:MySQLservernameorIP.Don'tdefinethisforunixsockets. MYSQLServerlocalhost #服务器地址 #Optional:MySQLport.Don'tdefinethisifalocalunixsocketisused. MYSQLPort3306 #服务器端口 #Optional:definethelocationofmysql.sockiftheserverrunsonthishost. MYSQLSocket/tmp/mysql.sock #这里换成你的真实地址 #Mandatory:usertobindtheserveras. MYSQLUserroot #登录服务器用户名 #Mandatory:userpassword.Youmusthaveapassword. MYSQLPassword123456 #登录服务器密码 #Mandatory:databasetoopen. MYSQLDatabasepureftpd #配置文件所在的数据库 #Mandatory:howpasswordsarestored #Validvaluesare:"cleartext","crypt","md5"and"password" #("password"=MySQLpassword()function) #Youcanalsouse"any"totry"crypt","md5"*and*"password" MYSQLCryptcleartext #验证方式 #Inthefollowingdirectives,partsofthestringsarereplacedat #run-timebeforeperformingqueries: # #\Lisreplacedbytheloginoftheusertryingtoauthenticate. #\IisreplacedbytheIPaddresstheuserconnectedto. #\Pisreplacedbytheportnumbertheuserconnectedto. #\RisreplacedbytheIPaddresstheuserconnectedfrom. #\DisreplacedbytheremoteIPaddress,asalongdecimalnumber. # #Verycomplexqueriescanbeperformedusingthesesubstitutionstrings, #especiallyforvirtualhosting. #Querytoexecuteinordertofetchthepassword MYSQLGetPWSELECTPasswordFROMusersWHEREUser="\L"ANDstatus="1" #登录服务器的用户密码验证字段,status="1"为此用户必需为激活模式. #Querytoexecuteinordertofetchthesystemusernameoruid MYSQLGetUIDSELECTUidFROMusersWHEREUser="\L" #用户的UID #Optional:defaultUID-ifsetthisoverridesMYSQLGetUID #MYSQLDefaultUID1000 #Querytoexecuteinordertofetchthesystemusergrouporgid MYSQLGetGIDSELECTGidFROMusersWHEREUser="\L" #用户的Gid #Optional:defaultGID-ifsetthisoverridesMYSQLGetGID #MYSQLDefaultGID1000 #Querytoexecuteinordertofetchthehomedirectory MYSQLGetDirSELECTDirFROMusersWHEREUser="\L" #用户的主目录 #Optional:querytogetthemaximalnumberoffiles #Pure-FTPdmusthavebeencompiledwithvirtualquotassupport. MySQLGetQTAFSSELECTQuotaFilesFROMusersWHEREUser="\L" #用户的最大文件数量 #Optional:querytogetthemaximaldiskusage(virtualquotas) #ThenumbershouldbeinMegabytes. #Pure-FTPdmusthavebeencompiledwithvirtualquotassupport. MySQLGetQTASZSELECTQuotaSizeFROMusersWHEREUser="\L" #用户的最大磁盘空间 #Optional:ratios.Theserverhastobecompiledwithratiosupport. MySQLGetRatioULSELECTULBandwidthFROMusersWHEREUser="\L" MySQLGetRatioDLSELECTDLBandwidthFROMusersWHEREUser="\L" #上边两项为,用户上传与下载的速度,单位Kb/s #Optional:bandwidththrottling. #Theserverhastobecompiledwiththrottlingsupport. #ValuesareinKB/s. #MySQLGetBandwidthULSELECTULBandwidthFROMusersWHEREUser="\L" #MySQLGetBandwidthDLSELECTDLBandwidthFROMusersWHEREUser="\L" #Enable~expansion.NEVERENABLETHISBLINDLYUNLESS: #1)Youknowwhatyouaredoing. #2)Realandvirtualusersmatch. #MySQLForceTildeExpansion1 #Ifyouupgradedyourtablestotransactionnaltables(Gemini, #BerkeleyDB,Innobase...),youcanenableSQLtransactionsto #avoidraces.Leavethiscommentedifyouareusingthe #traditionnalMyIsamdatabasesorold(<3.23.x)MySQLversions. #MySQLTransactionsOn
#p#
十、运行pureftpd
启动pureftpd
[root@localhost~]#/etc/init.d/pureftpdstart或者下面也可以
[root@localhost~]#/usr/local/pureftpd/bin/pure-config.pl/usr/local/pureftpd/etc/pure-ftpd.conf