http://www.proftpd.org/ 下载最新版本 ./configure --prefix=/usr/local/proftpd make make install /usr/local/proftpd/proftpd 启动服务 # This is a basic ProFTPD configuration file (rename it to # 'proftpd.conf' for actual use. It establishes a single server # and a single anonymous login. It assumes that you have a user/group # "nobody" and "ftp" for normal operation and anon. ServerName "ProFTPD Default Installation" ServerType standalone DefaultServer on UseReverseDNS off IdentLookups off AuthPAM off RequireValidShell off UserPassword username1 password1 UserPassword username2 password2 #其中password1可以用apache2自带的htpasswd -n username1 自动生成 # Port 21 is the standard FTP port. Port 21 # Umask 022 is a good standard umask to prevent new dirs and files # from being group and world writable. Umask 022 # To prevent DoS attacks, set the maximum number of child processes # to 30. If you need to allow more than 30 concurrent connections # at once, simply increase this value. Note that this ONLY works # in standalone mode, in inetd mode you should use an inetd server # that allows you to limit maximum number of processes per service # (such as xinetd). MaxInstances 30 # Set the user and group under which the server will run. User nobody Group nobody # To cause every FTP user to be "jailed" (chrooted) into their home # directory, uncomment this line. DefaultRoot /your_project # Normally, we want files to be overwriteable. AllowOverwrite on # Bar use of SITE CHMOD by default <Limit SITE_CHMOD> DenyAll </Limit> <Directory /your_project> <Limit DIRS READ WRITE> AllowUser username1 AllowUser username1 DenyAll </Limit> </Directory> # A basic anonymous configuration, no upload directories. If you do not # want anonymous users, simply delete this entire <Anonymous> section. <Anonymous ~ftp> User ftp Group ftp # We want clients to be able to login with "anonymous" as well as "ftp" UserAlias anonymous ftp # Limit the maximum number of anonymous logins MaxClients 10 # We want 'welcome.msg' displayed at login, and '.message' displayed # in each newly chdired directory. DisplayLogin welcome.msg DisplayChdir .message # Limit WRITE everywhere in the anonymous chroot <Limit WRITE> DenyAll </Limit> </Anonymous> 以上是我的脚本 下面是引用 proftpd默认用户可以使用系统非root组的用户登录,登陆后都在自己的/home目录中。同时匿名用户不能登陆。而要对权限进行进一步的设置,需要在proftpd.conf里面进行定制。在默认的conf中,有如下的例子# <Anonymous ~ftp> # User ftp # Group nogroup # # We want clients to be able to login with "anonymous" as well as "ftp" # UserAlias anonymous ftp # # Cosmetic changes, all files belongs to ftp user # DirFakeUser on ftp # DirFakeGroup on ftp # # RequireValidShell off # # # Limit the maximum number of anonymous logins # MaxClients 10 # # # We want 'welcome.msg' displayed at login, and '.message' displayed # # in each newly chdired directory. # DisplayLogin welcome.msg # DisplayFirstChdir .message # # # Limit WRITE everywhere in the anonymous chroot # <Directory *> # <Limit WRITE> # DenyAll # </Limit> # </Directory> # # # Uncomment this if you're brave. # # <Directory incoming> # # # Umask 022 is a good standard umask to prevent new files and dirs # # # (second parm) from being group and world writable. # # Umask 022 022 # # <Limit READ WRITE> # # DenyAll # # </Limit> # # <Limit STOR> # # AllowAll # # </Limit> # # </Directory> # # </Anonymous>proftpd的配置文件的格式和apache很相似:#全局设置 设置项目1 参数1 设置项目2 参数2#某个目录的设置 <Directory "路径名"> ... </Directory>#关于匿名用户的设置 <Anonymous "匿名登陆的目录"> ... <Limit 限制动作> .. </Limit> </Anonymous>其中最重要的就是limit之中的部分,涉及到了具体的权限控制CMD:Change Working Directory 改变目录 MKD:MaKe Directory 建立目录的权限 RNFR: ReName FRom 更改目录名的权限 DELE:DELEte 删除文件的权限 RMD:ReMove Directory 删除目录的权限 RETR:RETRieve 从服务端下载到客户端的权限 STOR:STORe 从客户端上传到服务端的权限 READ:可读的权限,不包括列目录的权限,相当于RETR,STAT等 WRITE:写文件或者目录的权限,包括MKD和RMD DIRS:是否允许列目录,相当于LIST,NLST等权限,还是比较实用的 ALL:所有权限 LOGIN:是否允许登陆的权限针对这些设置,又有如下具体的配置:AllowUser 针对某个用户允许的Limit DenyUser 针对某个用户禁止的Limit AllowGroup 针对某个用户组允许的Limit DenyGroup 针对某个用户组禁止的Limit AllowAll 针对所有用户组允许的Limit DenyAll 针对所有用户禁止的Limit同时,可以针对单独的用户来限制速度TransferRate STOR|RETR 速度(Kbytes/s) user 使用者 而对于虚拟用户,无法登陆的。所以,必须修改<Anonymous ~ftp>为<Anonymous 你要指定的主目录>下面是我的配置 <Anonymous /ftp/ftphome> User ftp #指定用户的组和名称 Group nogroup UserAlias anonymous ftp #使得ftp和匿名用户都能登陆 DirFakeUser on ftp DirFakeGroup on ftp RequireValidShell off MaxClients 50 该用户的最大连接数 DisplayLogin welcome.msg #显示欢迎信息,需要注意把msg文件放到登陆后的主目录 DisplayFirstChdir .message MaxClientsPerHost 3 #限制每个主机最大连接数 <Directory *> #这里是对目录进行设置,即不允许写 <Limit WRITE> DenyAll </Limit> </Directory> <Directory incoming> #对上传目录的设置,我们有一个incoming文件夹需要允许别人上传 Umask 022 022 <Limit READ> #不允许下载 DenyAll </Limit> <Limit STOR MKD> #允许上传和新建目录 AllowAll </Limit> </Directory> </Anonymous> 同时,我们还需要对ftp进行管理。所以在系统中建立一个用户,名称为ftpadmin,属于nogroup组,不允许登陆。同时赋予它对ftp所有的权限 <Anonymous /ftp/ftphome> User ftpadmin Group nogroup <Directory *> <Limit ALL> AllowAll </Limit> </Directory> </Anonymous> #global也可不要,后面如设置多个虚拟站点清晰 IdentLookups off #连接快些 还有后面的 UseReverseDNS RequireValidShell off #匿名的一般需要加上这个 MaxLoginAttempts 1 #匿名的话1就可以了,最大密码验证次数 WtmpLog NONE #不记log到wtmp DenyFilter /*.*/.ftpaccess #DenyFilter做一些过滤,正则表达式 #DenyFilter ~!`/**/?,$@ # 根据自己需要写吧,上面的好烂:P #LsDefaultOptions "-l" #ls参数 #AllowForeignAddress on #要允许 FXP 写成 on CommandBufferSize 128 #最大命令长度 DirFakeUser On FTP #不显示给用户真实的用户、组 DirFakeGroup On FTP DeferWelcome on #显示欢迎信息 PathDenyFilter "(^/.ftpaccess$)" #同DenyFilter 过滤用 User nobody #proftpd 以哪个用户、组的身份运行 Group nobody TimesGMT off #时间 DenyAll #出于某些考虑,开始禁掉,后面需要再打开。READ也可加过来... #也可以这里设置允许连接的网段 Login,或者后面,建议用防火墙 IgnoreHidden on HideNoAccess on AllowOverwrite off #禁止重写覆盖,后面打开允许续传 #AllowRetrieveRestart默认是on 也可以写进来 ServerName "FTP server" ServerType standalone #运行方式 还可以用 inetd xinetd ServerIdent on "Welcome to FTP" #身份验证前显示给用户的,也可用文件,这里略 DefaultServer on UseReverseDNS off #加快连接速度 Port 21 #FTP端口 Umask 022 #掩码 为了便于管理 用 002 PassivePorts 20000 30000 #被动模式端口段 SystemLog /var/proftpd/syslog #log 注意自己加上 logrotate 配置 MaxInstances 250 #最大 TimeoutLogin 30 #身份验证超时 TimeoutIdle 120 #发呆超时 TimeoutNoTransfer 300 #无数据传输超时 #TimeoutStalled 300 #log一些自定义格式,根据需要调整或者用默认 LogFormat myxfer "%h %u %t /"%r/" %s %b" LogFormat default "%h %a %u %t /"%r/" %s %b $$ /'%F/'" LogFormat auth "%h %a %t /"%r/" %s" LogFormat write "%h %a %t /"%r/" %s %b" #匿名的根目录 记得设置相应目录权限,ftp 用户应至少有 r x 权限 User ftp Group ftpadmin Umask 002 UserAlias anonymous ftp MaxClients 50 "客满(%m)" #人多时的提示信息,可以用一些变量 #RateReadBPS 500000 #限速用 MaxClientsPerHost 2 "连接数多" #一个IP的连接数 TransferLog NONE #log ExtendedLog /var/proftpd/upload.log write myxfer #log ExtendedLog /var/proftpd/download.log read myxfer #log DisplayLogin etc/welcome #欢迎文件,可以用一些变量 DisplayFirstChdir .message #改变目录时显示的消息 AuthAliasOnly on #只允许 UserAlias 过的 这里只允许 anonymous 不允许ftp AllowAll #打开允许连接,可以这是允许访问的网段,建议防火墙 AllowStoreRestart on #允许上传目录,可以续传,不能覆盖 AllowAll #如果不想让下载,只让上载 可以加上 # DenyAll #到这差不多就完了,每个目录可以写 .ftpaccess 设置权限 #后面这两个可以参考根据需要 #在FTP根目录又不让看的,上面把欢迎信息放里面了,当然可以放别的 DenyAll #限制特定IP段能看的,也可在目录的.ftpaccess里面设置 Order deny,allow Allow from 166.111. #到这匿名的就完了 #加帐号密码可以用多种方式,密码文件,数据库等 #如果用系统的帐号,可以用 DefaultRoot 限制活动目录,比如把TA堵在家里 ~ #还有别的很多 根据需要自己看文档吧 比如打开MultilineRFC2228等 # #记得设置相应目录权限,r x 一个都不能少 #记得设置文件权限(chmod/chown) 配置 .ftpaccess #应该了解 ls rm chmod chown find xargs crontab 等命令以便进行简单管理 #kill/killall -HUP 或者用脚本 ftpshut ftpwho #rm -f /etc/shutmsg #相应的辅助工具还有很多,也可以自己写脚本 引自http://bbs.topsage.com/dispbbs_118_187328.html