免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1027 | 回复: 0
打印 上一主题 下一主题

proftpd-1.3.1安装配置笔记 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-20 13:47 |只看该作者 |倒序浏览

安装环境:
操作系统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
   ……
   ……
  #某个目录的设置
   
    ……
    ……
   
  #关于匿名用户的设置
   
    ……
    ……
   
     ……
     ……
   
   
   
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登陆欢迎信息文件
    登入时想进入的目录位置(/* 为通配符)
   匿名用户设置
     所有虚拟ftp的共同设置项

3.1 虚拟FTP设置
  
   ServerName  "……"
   ……
   ……
  
  
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
   
    Order allow,deny
    Allow from 10.10.
    Deny from all
   
   
4、参数说明
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 所应用的对象
  
  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网段用户访问
   
    Order allow,deny
    Allow from 10.10.
    Deny from all
   
  
  5.5.2 使用pam作为proftpd授权用户的鉴别方法
   AuthPAM  on
   AuthPAMConfig  ftp
   
   修改/etc/pam.d/ftp相应文件
  
  5.5.3 限制FTP命令特权
   
      *禁止一些用户创建和删除目录的特权
   
     
      Order deny,allow
      DenyGroup badusers
      AllowAll
     
   
   
   *建立只能上载的FTP服务器
     
      
      DenyAll
      
   
   *限制对单个目录的访问
     
      
      DenyAll
      
   
   
   *限制目录浏览特权
     
      
      DenyGroup newfriends
      
   
   
  5.5.4 使不同用户之间相互隔离
   一些用户通常访问ISP的FTP服务器时,会看到一些不应当的系统信息,因此隐藏这些信息是必要的,下面是一个配置:
    DefaultRoot “/www”
     
     HideNoAccess on
      
      IgnoreHidden on
      
   
  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的设
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

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`)
) TYPE=MyISAM 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'
) TYPE=MyISAM;
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'
) TYPE=MyISAM;
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`)
) TYPE=MyISAM COMMENT='ProFTP user table' ;
     
  7.2 在proftpd.conf文件中加入sql相关配置:
  
   SQLAuthTypes Backend Plaintext
   #Backend表示用户认证方式为MySQL数据库的认证方式
   #Plaintext表示明文认证方式,排在最前面的为最先使用的方式
   SQLAuthenticate users* groups*
   
   #
[email=databasename@host]databasename@host[/email]
database_user user_password
   SQLConnectInfo
[email=ftpdb@localhost]ftpdb@localhost[/email]
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
本文为自学笔记,参考配置来源于网络                    


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/38490/showart_1432479.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP