开源中文网

您的位置: 首页 > proftp > 正文

proftpd-1.3.1安装配置笔记

来源:  作者:

安装环境:

 操作系统centos-5.2
 mysql 5.0.67 源代码安装在/usr/local/mysql目录

1、proftpd-1.3.1源代码编译安装
 
 ./configure --prefix=/usr/local/proftpd  \
    --with-modules=mod_sql:mod_sql_mysql \  #支持mysql数据库
    --with-modules=mod_quotatab:mod_quotatab_sql \ #支持磁盘配额
    --with-modules=mod_tls \ #支持SSL/TLS安全传输
    --with-includes=/usr/local/mysql/include \
    --with-libraries=/usr/local/mysql/lib
 make 
 make install
 
 cp sample-configurations/mod_sql.conf /usr/local/proftpd/etc/proftpd.conf
 
2、proftpd.conf文件配置基本格式:
 
  #全局设置
   设置项目1 参数1
   设置项目2 参数2
   ……
   ……
  #某个目录的设置
   <Directory "路径名">
    ……
    ……
   </Directory>
  #关于匿名用户的设置
   <Anonymous "匿名登录的目录">
    ……
    ……
    <Limit 限制动作>
     ……
     ……
    </Limit>
   </Anonymous>
   
3、proftpd.conf配置文件中的一些基本配置:
 
 ServerName  服务器名称
 ServerType  服务器工作类型(standalone/inted)
 DefaultServer 是否启用虚拟FTP (on/off)
 Port   运行端口
 Umask   默认文件权限(022)
 User   运行proftpd服务器的用户
 Group   运行proftpd服务器的用户组
 AllowOverwrite 是否允许客户端覆盖文件(安全上一般设置为off)
 RequireValidShell 用户shell不在/etc/shells文件中,默认不允许登陆(on/off)
 MaxInstances 20  最多有20个proftpd的PID
 MaxClients 10  最多允许10个用户在线
 MaxClientsPerHost 1  一个IP只允许一个帐号连接
 MaxClientsPerUser 2  每个帐号在每个客户端最多同时登陆2次,可防止多线程下载软件
 DisplayLogin welcome.msg ftp登陆欢迎信息文件
 <Directory /*>   登入时想进入的目录位置(/* 为通配符)
 <Anonymous ~ftp>  匿名用户设置
 <Global>    所有虚拟ftp的共同设置项
 
 3.1 虚拟FTP设置
  <VirtualHost 192.168.0.1>
   ServerName  "……"
   ……
   ……
  </VitualHost>
  
 3.2 开启ftp上传/下载的续传功能
  AllowStoreRestart  on  #上传
  AllowRetrieveRestart on  #下载
  
 3.3 限速设置
  
  格式为: TransferRate  STOR|RETR  速度(kbytes/s) user 使用者 
   STOR 为上传速度
   RETR 为下载速度
   后面不跟user的时候,针对全部用户进行限速
   
 3.4 让proftpd支持FXP传输
   AllowForeignAddress on
   PassivePorts 40000 40999 
   
 3.5 加快连接速度,关闭DNS反解
   UseReverseDNS  off
   IdentLookups  off
   
 3.6 只允许部分网段访问FTP
   <Limit LOGIN>
    Order allow,deny
    Allow from 10.10.
    Deny from all
   </Limit>
   
4、<Limit>参数说明

 4.1 限制的动作
  CWD: Change Working Directory 改变目录
  MKD: Make Directory 创建目录
  RNFR: ReName FRom  更改目录名
  DELE: DELEte 删除文件
  RMD: ReMove Directory 删除目录
  RETR: RETRieve 下载
  STOR: STORe 上传
  READ: 可读文件的权限,但不包括列目录
  WRITE: 写文件或目录的权限,包括MKD和RMD
  DIRS: 列目录的权限
  LOGIN: 登陆的权限
  ALL: 所有权限
  
 4.2 <Limit>所应用的对象
  
  AllowUser/DenyUser  AllowGroup/DenyGroup AllowALL/DenyAll ……
  
5、部分安全策略配置

 5.1 隐藏proftpd服务器的版本信息
  ServerIdent  off
  
 5.2 伪装Proftpd服务器
  伪装成windows下的ftp服务器Serv-U
   ServerIdent  on  "Serv-U FTP Server v6.4 for Winsock ready ……"
   
 5.3 使用非root权限运行proftpd服务:
   User nobody
   Group nobody
   
     禁止root登陆:
   RootLogin  off
   
     对ftp用户使用chroot限制: 
      DefaultRoot ~
      
     控制ftp命令缓冲区大小:
      CommandBufferSize  512
      
     修改proftpd服务器使用的端口:
      Port 2121
    
 5.4 监控Proftpd服务器运行情况
 
  5.4.1 记录ftp连接数
   watch -n 360 /usr/local/proftpd/bin/ftpcount
   每隔360秒显示一次连接用户数量的信息
   
  5.4.2 查找谁与FTP服务器连接
   /usr/local/proftpd/bin/ftpwho
   
 5.5 服务器配置文件的修改(proftpd.conf)
 
  5.5.1 通过IP地址限制FTP访问
   #只允许10.10.0.0/16网段用户访问
   <Limit LOGIN>
    Order allow,deny
    Allow from 10.10.
    Deny from all
   </Limit>
  
  5.5.2 使用pam作为proftpd授权用户的鉴别方法
   AuthPAM  on
   AuthPAMConfig  ftp
   
   修改/etc/pam.d/ftp相应文件
  
  5.5.3 限制FTP命令特权
   
      *禁止一些用户创建和删除目录的特权
    <Directory /*>
     <Limit MKD RMD>
      Order deny,allow
      DenyGroup badusers
      AllowAll
     </Limit>
    </Directory>
   
   *建立只能上载的FTP服务器
    <Directory /*> 
     <Limit RETE> 
      DenyAll 
     </Limit> 
    </Directory>

   *限制对单个目录的访问
    <Directory /*> 
     <Limit CWD> 
      DenyAll 
     </Limit> 
    </Directory>
    
   *限制目录浏览特权
    <Directory /my/mp3s> 
     <Limit DIRS> 
      DenyGroup newfriends 
     </Limit> 
    </Directory>
    
  5.5.4 使不同用户之间相互隔离
   一些用户通常访问ISP的FTP服务器时,会看到一些不应当的系统信息,因此隐藏这些信息是必要的,下面是一个配置:
    DefaultRoot “/www” 
    <Directory /www> 
     HideNoAccess on 
     <Limit ALL> 
      IgnoreHidden on 
     </Limit> 
    </Directory>
  HideNoAccess指令将用户隐藏/www 目录下的所有条目,IgnoreHidden指令指示ProFTPD 服务器忽略用户所有指令。

6、加密FTP服务器与客户端的连接
 需要在编译安装的时候配置支持相应模块
  ./configure --with-modules=mod_tls
  
 6.1 制作凭证
  # mkdir /etc/ssl/certs
  # mkdir /etc/ssl/private
  # chmod og-rwx /etc/ssl/private
  # mkdir /etc/ssl/crl
  # mkdir /etc/ssl/newcerts
  修改 /etc/ssl/openssl.cnf
  把 dir = ./demoCA 改成 dir = /etc/ssl
 
 6.2 制作最高层认证中心 (Root CA)                                       
    Private Key ( Public Key )                                    
    # openssl genrsa -des3 -out /etc/ssl/private/myrootca.key 2048     
    # chmod og-rwx /etc/ssl/private/myrootca.key                        
   填写凭证申请书 (然后按照问题回答即可)                              
   #openssl req -new -key /etc/ssl/private/myrootca.key -out /tmp/myrootca.req 
    签发凭证                        
   # openssl x509 -req -days 7305 -sha1 -extfile /etc/ssl/openssl.cnf  -extensions v3_ca -signkey /etc/ssl/private/myrootca.key 
 -in /tmp/myrootca.req -out /etc/ssl/certs/myrootca.crt           
    # rm -f /tmp/myrootca.req            
                                                         
 6.3 用最高层认证中心签发凭证
  制作服务器用的凭证                                                       
   # openssl genrsa -out /etc/ssl/private/myhost.key 2048   
   # chmod og-rwx /etc/ssl/private/myhost.key                    
  填写凭证申请书                                                       
   # openssl req -new -key /etc/ssl/private/myhost.key -out /tmp/myhost.req 
   # openssl x509 -req -days 3650 -sha1 -extfile /etc/ssl/openssl.cnf  -extensions v3_req -CA /etc/ssl/certs/myrootca.crt 
  -CAkey /etc/ssl/private/myrootca.key -CAserial /etc/ssl/myrootca.srl 
  -CAcreateserial -in /tmp/myhost.req -out /etc/ssl/certs/myhost.crt
   # rm -f /tmp/myhost.req                                           
 

6.4 接下来设定proftpd.conf,主要是在最后加上以下有关TLS的设

 

< IfModule mod_tls.c >
TLSEngine on
TLSLog /var/log/tls.log
TLSProtocol SSLv23
TLSOptions NoCertRequest
TLSRequired On
TLSRSACertificateFile /etc/ssl/certs/myhost.crt
TLSRSACertificateKeyFile /etc/ssl/private/myhost.key
TLSCACertificateFile /etc/ssl/certs/myrootca.crt
TLSVerifyClient On
< /IfModule >

 

 

7、有关MySQL+Quota的设置
  需要在编译安装的时候配置支持相应模块
      ./configure --with-modules=mod_sql:mod_sql_mysql 
         --with-modules=mod_quotatab:mod_quotatab_sql
      --with-includes=/usr/local/mysql/include \
      --with-libraries=/usr/local/mysql/lib
  7.1 数据库的导入

 

mysql mysql -uroot -ppassword
create database ftpdb
grant select, update on ftpdb.* to proftpd@localhost identified by 'password'

use ftpdb


CREATE TABLE `ftpgroup` (
`groupname` varchar(16) NOT NULL default '',
`gid` smallint(6) NOT NULL default '5500',
`members` varchar(16) NOT NULL default '',
KEY `groupname` (`groupname`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk COMMENT='ProFTP group table';

INSERT INTO `ftpgroup` VALUES ('ftpgroup', 5500, 'ftpuser');

CREATE TABLE `ftpquotalimits` (
`name` varchar(30) default NULL,
`quota_type` enum('user','group','class','all') NOT NULL default 'user',
`per_session` enum('false','true') NOT NULL default 'false',
`limit_type` enum('soft','hard') NOT NULL default 'soft',
`bytes_in_avail` float NOT NULL default '0',
`bytes_out_avail` float NOT NULL default '0',
`bytes_xfer_avail` float NOT NULL default '0',
`files_in_avail` int(10) unsigned NOT NULL default '0',
`files_out_avail` int(10) unsigned NOT NULL default '0',
`files_xfer_avail` int(10) unsigned NOT NULL default '0'
) ENGINE=MyISAM DEFAULT CHARSET=gbk;

CREATE TABLE `ftpquotatallies` (
`name` varchar(30) NOT NULL default '',
`quota_type` enum('user','group','class','all') NOT NULL default 'user',
`bytes_in_used` float NOT NULL default '0',
`bytes_out_used` float NOT NULL default '0',
`bytes_xfer_used` float NOT NULL default '0',
`files_in_used` int(10) unsigned NOT NULL default '0',
`files_out_used` int(10) unsigned NOT NULL default '0',
`files_xfer_used` int(10) unsigned NOT NULL default '0'
) ENGINE=MyISAM DEFAULT CHARSET=gbk;

CREATE TABLE `ftpuser` (
`id` int(10) unsigned NOT NULL auto_increment,
`userid` varchar(32) NOT NULL default '',
`passwd` varchar(32) NOT NULL default '',
`uid` smallint(6) NOT NULL default '5500',
`gid` smallint(6) NOT NULL default '5500',
`homedir` varchar(255) NOT NULL default '',
`shell` varchar(16) NOT NULL default '/sbin/nologin',
`count` int(11) NOT NULL default '0',
`accessed` datetime NOT NULL default '0000-00-00 00:00:00',
`modified` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk COMMENT='ProFTP user table' ;


     
  7.2 在proftpd.conf文件中加入sql相关配置:
  
   SQLAuthTypes Backend Plaintext
   #Backend表示用户认证方式为MySQL数据库的认证方式 
   #Plaintext表示明文认证方式,排在最前面的为最先使用的方式
   SQLAuthenticate users* groups*
   
   # databasename@host database_user user_password
   SQLConnectInfo ftpdb@localhost proftpd password
   SQLUserInfo ftpuser userid passwd uid gid homedir shell
   SQLGroupInfo ftpgroup groupname gid members
   SQLHomedirOnDemand on
   #如果用户主目录不存在,则系统会根据此用户在用户数据表中的homedir字段的值新建一个目录
   # Update count every time user logs in
   SQLLog PASS updatecount
   SQLNamedQuery updatecount UPDATE "count=count+1,accessed=now() WHERE userid='%u'" ftpuser
   # Update modified everytime user uploads or deletes a file
   SQLLog STOR,DELE modified
   SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser
   
  7.3 加入Quota磁盘配额相关设置
  
   QuotaEngine on
   QuotaDirectoryTally on
   QuotaDisplayUnits Mb
   QuotaShowQuotas on
   QuotaLog "/var/log/quota"
   SQLNamedQuery get-quota-limit SELECT "name, quota_type, per_session, limit_type, bytes_in_avail, bytes_out_avail, bytes_xfer_avail, files_in_avail, files_out_avail, files_xfer_avail FROM ftpquotalimits WHERE name = '%{0}' AND quota_type = '%{1}'"
   
   SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used, bytes_out_used, bytes_xfer_used, files_in_used, files_out_used, files_xfer_used FROM ftpquotatallies WHERE name = '%{0}' AND quota_type = '%{1}'"
   
   SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used+ %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, files_in_used = files_in_used + %{3}, files_out_used = files_out_used + %{4}, files_xfer_used = files_xfer_used + %{5} WHERE name = '%{6}' AND quota_type = '%{7}'" ftpquotatallies
   
   SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}" ftpquotatallies
   
   QuotaLimitTable sql:/get-quota-limit
   QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally

 

 7.4 ftpquotalimits表设置说明
          
   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: - 允许传输的文件数(包括上传/下载)
   
8、其他
 8.1 使用命令ftpshut
  基本格式:
   ftpshut [ -l min ] [ -d min ] time [ warning-message ... ]  
  参数说明:
   -l min: 在ftp关闭服务之前的几分钟内,尝试建立新的ftp连接均不被接受
   -d min: 在ftp关闭服务之前的几分钟内,已经建立的ftp连接将被中止
   time: 在多少时间后,服务器将关闭ftp服务,格式有两种
   +number 经过number分钟后关闭
   MMHH 在今天MM:HH服务器将关闭
   
 8.2 welcome.msg 欢迎文件可用参数
 

  %T  目前的时间 
  %F  所在硬盘剩下的容量 
  %C  目前所在的目录 
  %R  Client 端的主机名称 
  %L  Server 端的主机名称 
  %U  使用者帐户名称 
  %M  最大允许连接人数 
  %N  目前的服务器连接人数 
  %E  FTP服务器管理员的 email 
  %i  本次上传的文件数量 
  %o  本次下载的文件数量 
  %t  本次上传+下载的文件数量

  
  应用举例:
   欢迎您%U, 这是Frank的测试FTP服务器;
   目前时间是:%T;
   本服务器最多允许%M个用户连接数;
   目前服务器上已有%N个用户连接数;
   目前你所在的目录是%C;
   目录所在的硬盘还剩下%F字节。
       

 

8.3 proftpd的web管理软件:Myftpadmin-0.61
  下载地址:http://www.sfr-fresh.com/unix/privat/myftpadmin_061.tar

Tags:proftpd安装配置
相关文章列表:
关于开源中文网 - 联系我们 - 广告服务 - 网站地图 - 版权声明