Proftpd+Mysql搭建FTP 服务器
   在搭建FTP服务器的时候,有时候我需要为每个用户创建一个目录,而用户只能在自己的目录下进行操作,其他用户的目录不可见,同时还需要一个公共目录。基于以上需求,我们可以先创建一个公共目录,然后在此公共目录下创建用户子目录。通过权限设置使用户只能访问自己的目录和公共目录。结合mysql 可以方便地实现用户管理。
 
以下安装说明。 橙色部分为安装时,需要根据实际情况自行修改的地方。配置文件中的下划线部分为必选内容。
 
软件包:Proftpd和mysql。  
            
一、 Proftpd安装和配置
1、 使用wget命令获取安装程序。
2、 解压安装包。
#tar xzvf proftpd-1.3.2c.tar.gz
3、配置安装路径。
#cd proftpd-1.3.2c   
#./configure --prefix=/usr/local/proftpd 
--with-modules=mod_sql:mod_sql_mysql
--with-includes=/data/mysql/include/mysql
--with-libraries=/data/mysql/lib/mysql/ 
--prefix:是要安装到的目录;--with-modules: 让编译ProFTPD 支持MySQL的模块,--with-includes: 指定MySQL服务器includes所在的位置,mysqlinclude文件通常是.h结尾,--with-libraries:指定MySQL服务器libraries所在的位置,mysql的库文件通常是*结尾,)
3、 编译,安装。
#make
#make  install
4、 编辑proftpd配置文件。
#vi /usr/local/proftp/ect/proftpd.conf
 
二、 创建FTP用户数据库。
    本文重在讲proftpd.....mysql 安装步骤省略。
1、在数据库中 创建一个ProFTPD的数据库管理账户。
#mysql -uroot –p           //Root登录MySQL
>create database ftpdb    //ftpdb 数据库
      >grant select, update on ftpdb.* to proftpd@"%" identified by 'password'
//新增一个用户,用于存取ftpdb 数据库,用户名 proftpd,密码 password
2、在ftpdb数据库中,创建FTP用户组信息表。
>use ftpdb // ftpdb 库操作
#ftpgroup的表结构
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)
);
//插入一条记录
INSERT INTO ftpgroup VALUES ('ftpgroup', 5500, 'ftpuser');
#ftpuser的表结构
表的结构 `ftpusers`
Create TABLE ftpusers (
userid varchar(30) NOT NULL default '',
passwd varchar(80) NOT NULL default '',
uid int(10) unsigned NOT NULL default '1000',
gid int(10) unsigned NOT NULL default '1000',
homedir varchar(255) NOT NULL default '',
shell varchar(255) NOT NULL default '/sbin/nologin',
count int(10) unsigned NOT NULL default '0',
host varchar(30) NOT NULL default '',
lastlogin varchar(30) NOT NULL default '',
UNIQUE KEY userid (userid)
) ENGINE=MyISAM DEFAULT CHARSET=gbk;  
  
#插入一条记录(为保证文件只对自己私有目录具有访问权限,每个用户ID值应不同)
INSERT INTO ftpuser VALUES('ftpuser', 'password', 5501, 5500, '/home/FTP/test ','/sbin/nologin',’’,’’,’’);
 
其中/home/FTP为公共目录需要手动创建,/home/FTP/test 是指定为用户ftpuser创建的目录。该目录无需手动创建,结合proftp配置文件,若该目录不存在,在用户首次登录时会自动创建。
 
3、添加FTP服务器系统用户组及用户
#groupadd FTPGRP -g 1000
#useradd  FTPUSR -u 1000 -g FTPGRP -s /sbin/nologin
 
4、创建FTP公共目录即根目录
#mkdir /home/FTP
用户私有目录无需创建,在配置文件中自行创建。
 
三、 修改proftpd配置文件。
 
#配置服务器名称
ServerName           "ProFTPD Default Installation"
#配置服务器启动方式
ServerType            standalone
#隐藏服务器版本信息
ServerIdent           off
#默认服务
DefaultServer           on
#设置FTP服务器端口
Port                 21
#设置是否支持IPv6
UseIPv6              off
#Umask指定FTP server进程的Umask值,022Linux系统得默认值一致。
Umask                022
# 设置同时登录使用ftpIp数目;
MaxInstances         30
# 设置最大的尝试登陆的次数,如果超过自动断开连接
MaxLoginAttempts                 3
# 限制每个帐户在每个客户端最多可以同时登陆次数
MaxClientsPerUser                5
# 限制每个客户端主机最多的连接数
MaxClientsPerHost                2
# 设置每秒接受的链接请求个数,防止DoS***
MaxConnectionRate                4
# 设置客户端连接数量
MaxClients                       60
# 设置上传文件最大值
MaxStoreFileSize               2 Gb
# 关闭反向查询client的用户名的操作(RFC1413),加快连接速度
IdentLookups                    off
# 关闭DNS的反向查询(同样为了加快响应速度)
UseReverseDNS                   off
# 自动删除未传完(aborted)的上传文件
DeleteAbortedStores              on
# 不显示真实的文件所有者信息
DirFakeUser                      on
# 不显示真实的文件的组信息
DirFakeGroup                     on
# 不显示真实的文件的读写操作信息
DirFakeMode                    0600
# 认证帐号不需要有有效的shell
RequireValidShell               off
 
#配置MySql认证
<Global>
#设置验证
SQLConnectInfo proftpd@localhost proftpd password
SQLAuthTypes Plaintext
SQLUserInfo ftpusers userid passwd uid gid homedir shell
SQLGroupInfo ftpgroup groupname gid members
SQLAuthenticate users groups
SQLNegativeCache on
#如果用户目录不存在则自动创建
CreateHome on
 
SQLNamedQuery getcount SELECT "count from ftpusers where userid='%u'"
SQLNamedQuery getlastlogin SELECT "lastlogin from ftpusers where userid='%u'"
SQLNamedQuery updatelogininfo UPDATE "count=count+1, host='%h', lastlogin=current_timestamp() WHERE userid='%u'" ftpusers
SQLShowInfo PASS "230" "You've logged on %{getcount} times,last login at %{getlastlogin}"
SQLLog PASS updatelogininfo
DeferWelcome on
RootLogin off
RequireValidShell off
</Global>
#设置用户和组
User                   FTPUSR
Group                  FTPGRP        
#将用户活动范围限定在指定目录
DefaultRoot /home/FTP
 
# 设置允许断点续传和覆盖文件
AllowOverWrite          on
AllowStoreRestart       on
AllowRetrieveRestart    on
# proftp支持现在流行的FXP传输方式,默认是不支持的
AllowForeignAddress on
#设置FTP服务器系统日志存放目录
Systemlog /var/log/ftp.syslog
#设置FTP服务器传输日志存放目录
TransferLog /var/log/ftp.transferlog
#限制传输速率
TransferRate RETR,STOR 50
#设置用户删除权限
<Limit DELE>
  AllowUser ftpuser
</Limit>
# 设置目录的使用权限
<Directory /home/FTP>
        # 隐藏没有访问权限的文件
        HideNoAccess                on
        # 限制此目录的写权限仅为管理员帐号,根据情况限制权限。
        <Limit WRITE>
           Order            deny,allow
           AllowUser        ftpuser       
        </Limit>
</Directory>
四、 测试
开启Prfotpd服务器
/etc/init.d/proftpd start(需要先加入服务)
 
本文内容均来自互联网,经搜集整理而成,如有侵犯到你的权益,请及时通知我。做相关处理。