ProFTPD一个Unix平台上或是类Unix平台上(如Linux, FreeBSD等)的FTP服务器程序,它是在">自由软件基金会的版权声明(GPL)下开发、发布的免费软件,也就是说任何人只要遵守GPL版权声明,都可以随意修改源始码。
ProFTPD设计目标是实现一个安全且易于设定的FTP Server。目前Unix或类Unix平台上 FTP Server十分有限,最常使用的恐怕就是wu-ftpd了。虽然wu-ftpd有着极佳的效能同时也是一套很好的软件,然而它却欠缺了许多Win32平台上FTP Server的一些特色,同时wu-ftpd过去也有不少的安全漏洞陆续被发现。ProFTPD的原创者本身就曾经花非常多的时间寻找wu-ftpd 的漏洞加以改进并且增加许多功能。然而十分不幸的是,他很快地发现显然wu-ftpd需要全部重新的改写才能补足欠缺的设定能力以及缺乏的一些功能。ProFTPD不是从其它FTP Server的既有原始码修改而产生的,相反的,它是完全独立而完整、重新改写的FTP Server。
使用 Proftp 有个好处,可以用其它方式认证,不用实体帐号登入,可以减少试帐号机会。
这次利用mysql数据库,
环境:Ubuntu 6.06.1 LTS
1. 安装 proftpd-mysql 套件
sudo apt-get install proftpd-mysql
2. 设定 mysql 账号
mysql -u root -p
create database ftp;
GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* TO ‘proftpd’@'localhost’ IDENTIFIED BY ‘password’;
FLUSH PRIVILEGES;
3. 建立mysql数据库
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’;
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),
UNIQUE KEY userid (userid)
) TYPE=MyISAM COMMENT=’ProFTP user table’;
4. 设定 proftpd.conf ,让 proftp 可以用 mysql 数据认证
SQLBackend mysql # 使用 mysql 数据库为主
SQLAuthTypes Backend # 密码认证 已 PASSWORD() 产生为主
SQLAuthenticate on
SQLConnectInfo ftp@localhost proftpd password # MySQL 联机信息,数据库名称@主机 账号 密码
SQLUserInfo ftpuser userid passwd uid gid homedir shell # 使用者数据库字段
SQLGroupInfo ftpgroup groupname gid members # 群组数据库字段
SQLLogFile /var/log/proftpd/sql.log # SQL Log 檔
SQLHomedirOnDemand on # 当 Home 目录不存在,会自己产生。
SQLLog PASS updatecount # SQL Log 格式,当正确登入时,要执行的 SQL 语法
SQLNamedQuery updatecount UPDATE “count=count+1, accessed=now() where userid=’%u’” ftpuser
SQLLog STOR,DELE modified # SQL Log 格式,当储存或删除档案时,要执行的 SQL 语法
SQLNamedQuery modified UPDATE “modified=now() where userid=’%u’” ftpuser
RequireValidShell off
5. 建立使用者账号
mysql -u root -p
insert into ftp (userid, passwd , uid, gid , homedir ) values (’ubuntu_user’,password(’12345′), ‘5500′,’5500′,’/home/ftp/ubuntu_user’);
建立 ubuntu_user 账号,密码为 12345 ,目录位于 /home/ftp/ubuntu_user , uid / gid 为此 user 上传档案时的 uid / gid。
6. 重新启动 Proftp
sudo /etc/init.d/proftpd restart
请用刚刚建立好的账号登入看看,若顺利就可以登入指定目录内。
7. 除错
有任何问题,请检查 sql.log ,会有信息说明错误的原因。