越简单越好!

freebsd安装proftpd

发表于 2009-04-23 22:17 | 1080次阅读 0次点赞   Freebsd

# cd /usr/ports/ftp/proftpd-mysql/
# make install clean
编辑/etc/rc.conf文件,加入一行 proftpd_enable="YES";
1.建立相应的用户和用户组
#pw groupadd -g 2005 ftpgroup
#pw adduser ftpuser -u 2005 -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup ftpuser

2、ProFTPD认证中的MySQL数据库
注:此操作可以在phpmyadmin里面进行
引用:mysql -uroot -ppassword
create database ftpdb;
grant select, update on itbusy.* to proftpd@localhost identified by '123456';
use ftpdb;

CREATE TABLE `ftpgroup` (
`groupname` varchar(16) NOT NULL default '',
`gid` smallint(6) NOT NULL default '2005",
`members` varchar(16) NOT NULL default '',
KEY `groupname` (`groupname`)
) TYPE=MyISAM COMMENT='ProFTP group table';

INSERT INTO `ftpgroup` VALUES ('ftpgroup', 2005, '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 '2005',
`gid` smallint(6) NOT NULL default '2005',
`homedir` varchar(255) NOT NULL default '',
`shell` varchar(16) NOT NULL default '/sbin/nologin',
`count` int(11) NOT NULL default '0',
`host` varchar(30) NOT NULL default '000-000-000-000',
`lastlogin` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
) TYPE=MyISAM COMMENT='ProFTP user table';

3、ProFTPD的配置文件proftpd.conf
#vi /usr/local/proftpd/etc/proftpd.conf
# 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    "DFA FTP Server"
ServerType    standalone
ServerAdmin     webmaster@itbusy.com
DefaultServer    on
ScoreboardFile          /var/run/proftpd.scoreboard

# 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 ~

# Normally, we want files to be overwriteable.
AllowOverwrite   on

# Bar use of SITE CHMOD by default
#<Limit SITE_CHMOD>
# DenyAll
#</Limit>

# 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    100

# We want 'welcome.msg' displayed at login, and '.message' displayed
# in each newly chdired directory.
DisplayLogin    welcome.msg
DisplayChdir   .message
# 连接时的MSG
DisplayConnect /usr/local/proftpd/etc/connect.msg
DisplayGoAway /usr/local/proftpd/etc/goway.msg
# 输入quit命令后的MSG
DisplayQuit /usr/local/proftpd/etc/quit.msg
MaxHostsPerUser 3
MaxClientsPerUser 5
# 对不起,一个IP只允许一个连接
MaxClientsPerHost 6

RootLogin off
RequireValidShell off
UseReverseDNS     off
IdentLookups      off
TimeoutStalled    600
TimeoutLogin      900
TimeoutIdle       600
TimeoutNoTransfer 600
# 让proftp支持现在流行的FXP传输方式,默认是不支持的
AllowForeignAddress on
# 端口也可自己指定
PassivePorts 49152 65534
# 允许断点续传是默认支持的,不用设置
# 这里有一个技巧,你可以控制FTP中任一个目录有"断点续传"的功能,请设置下面一行,(例:)

AllowStoreRestart      on
AllowRetrieveRestart   on

# 屏蔽服务器版本信息
ServerIdent off
# 设置ftpuser组只能访问自己的目录
DefaultRoot ~ ftpgroup

#-------- load sql.mod for mysql authoritative --------#
# Backend表示用户认证方式为MySQL数据库的认证方式
# Plaintext表示明文认证方式,排在最前面的为最先使用的方式
SQLAuthTypes Backend Plaintext
# 数据库的鉴别
SQLAuthenticate users* groups*
#SQLAuthenticate users groups usersetfast groupsetfast
# 数据库联接的信息
# ftpdb是数据库名,localhost是主机名
# proftpd是连接数据库的用户名,password是密码
#(如果没有密码留空)
SQLConnectInfo itbusy@localhost proftpd 123456
# 指定用来做用户认证的表的有关信息
SQLUserInfo ftpuser userid passwd uid gid homedir shell
SQLGroupInfo ftpgroup groupname gid members
# 如果用户主目录不存在,则系统会根据此用户在用户数据表中的homedir字段的值新建一个目录
#SQLHomedirOnDemand on
SQLNegativeCache   on
SQLDefaultGID      65534
SQLDefaultUID      65534
# Update count every time user logs in
SQLLogFile /var/log/proftpd.sql.log
SQLNamedQuery getcount SELECT "count from ftpuser where userid='%u'"
SQLNamedQuery getlastlogin SELECT "lastlogin from ftpuser where userid='%u'"
SQLNamedQuery updatelogininfo UPDATE "count=count+1,host='%h',lastlogin=current_timestamp() WHERE userid='%u'" ftpuser
SQLShowInfo PASS "230" "You've logged on %{getcount} times, last login at %{getlastlogin}"
SQLLog PASS updatelogininfo
SyslogLevel emerg
SystemLog /var/log/proftpd.system.log
TransferLog /var/log/proftpd.xferlog
# Some logging formats
#
LogFormat default "%h %l %u %t "%r" %s %b"
LogFormat auth "%v [%P] %h %t "%r" %s"
LogFormat write "%h %l %u %t "%r" %s %b"
# Log file/dir access
# ExtendedLog /var/log/proftpd.access_log WRITE,READ write
# Record all logins
ExtendedLog /var/log/proftpd.auth_log AUTH auth
# Paranoia logging level....
ExtendedLog /var/log/proftpd.paranoid_log ALL default

在数据库ftpuser添加一个虚拟用户"test",
mysql> insert into ftpuser (id,userid,passwd,uid,gid,homedir,shell) values ('1', 'test','test','2005','2005','/home/test','/sbin/nologin');
#chown ftpuser:ftpgroup FTP根目录
所有的sql语句可在phpmyadmin下进行操作。

###########################################################################

###########################################################################

###########################################################################

一、安装MySQL
#cd /usr/ports/databases/mysql51-server
#make install
系统会自动下载mysql的安装包mysql.....tar.gz,并完成编译和安装过程

注1:对于mysql的安装,需要说明几点要注意的地方,FreeBSD的Ports自动完成mysql安装后,还需要自己完成下面几件事情后才能正常使用
1、创建mysql用户和mysql用户组,并修改目录权限
#pw groupadd mysql -g 88
#pw adduser mysql -u 88 -g 88 -d /nonexistent -s /sbin/nologin
#chown -R mysql:mysql /var/db/mysql
#chown -R mysql:mysql /usr/local/share/mysql
2、创建mysql系统数据库
#/usr/local/bin/mysql_install_db
#/usr/lcoal/bin/mysql_create_system_tables
3、创建mysql自启动脚本
#cp /usr/local/share/mysql/mysql.server /usr/local/etc/rc.d/mysql-server.sh
4、创建mysql配置文件 my.cnf
#cp /usr/local/share/mysql/my-medium.cnf /etc/my.cnf (有my-medium、small、large、huge等可选)

现在,你可以通过 /usr/local/etc/rc.d/mysql-server.sh start 或者重启系统来启动mysql了

二、安装proftpd
和mysql的安装很相似,使用ports安装
#cd /usr/ports/ftp/proftpd-mysql
#make install
安装的时候会要求选择proftpd要安装的模块,选择好mysql和quota,其他的根据情况选择
然后系统自动下载proftpd-1.3.0rc2.tar.bz2并完成编译和安装。

三、配置proftpd.conf
完成上面的安装,proftpd其实已经可以运行了,但是我们还需要根据自己的安装要求进行必要的配置,所以先备份默认的配置文件
#cp /usr/local/etc/proftpd.conf /usr/local/etc/proftpd.conf.sample

1、重新编写proftpd.conf,下面是Michael的文件,大家完全照抄就基本可以了

#基本配置
ServerName "Ftp Site"
ServerType standalone
DefaultServer on

#设置用户登陆时不显示ftp服务器版本信息
ServerIdent off

#设置ftp服务使用的端口,可以修改
Port 21

#设置ftp目录的权限
Umask 022

#设置系统各种超时时间和重试次数
MaxLoginAttempts 3
TimeoutLogin 120
TimeoutIdle 600
TimeoutNoTransfer 900
TimeoutStalled 3600

#允许最大的同时连接用户数
MaxClients 10

#允许每个用户主机最大并发连接数
MaxClientsPerHost 3

AllowOverwrite no
AllowStoreRestart on
UseReverseDNS off

#如果shell为空时允许用户登录
RequireValidShell off

#将用户限制在自己的主目录下 ,这个设置很重要
DefaultRoot ~

#设置系统最大的进程数,防止dos攻击,默认是30
MaxInstances 10

#设置系统用于运行proftpd服务的用户和用户组(需要后面自己创建)
User FTPUSR
Group FTPGRP

#设置对全局的文件可以进行改写

AllowOverwrite on


#设置系统运行日志和文件传输日志
SystemLog /var/log/proftpd.syslog
TransferLog /var/log/proftpd.transferlog


######################## 下面是匿名登陆部分的设置 #################
#匿名用户登陆后访问的目录为 ftp用户的主目录

User ftp
Group ftpusers

#设置anonymous用户为系统实际用户ftp的别名
UserAlias anonymous ftp

#设置匿名用户同时在线最大用户数
#此用户数受限于前面的全局同时在线用户数
MaxClients 5

#设置welcome.msg文件作为用户登陆的提示信息文件
#.message文件作为用户每次进入的目录提示信息
DisplayLogin welcome.msg
DisplayFirstChdir .message

#设置一些特殊的权限,比如写文件和登陆限制等 (可以不用)

DenyAll



Order deny,allow
Deny from 127.0.0.1/32
Allow from all



######################## 完成匿名登陆的设置 #################


######################## 下面是磁盘限额Quota设置 ############
#启用磁盘限额
QuotaDirectoryTally on

SQLHomedirOnDemand on

#磁盘限额单位 b"|"Kb"|"Mb"|"Gb"
QuotaDisplayUnits "Mb"

QuotaEngine on

#磁盘限额日志记录
QuotaLog "/var/log/proftpd.quotalog"

#打开磁盘限额信息 "quote SITE QUOTA"命令
QuotaShowQuotas on
####################### 完成磁盘配额设置 ####################


####################### 下面是MySQL数据库部分设置 ###########
#数据库联接的信息
#FTP是数据库名,localhost是MySQL主机名,3306是mysql服务的端口号
#Michael是连接数据库的用户名,testpwd是密码(如果没有密码留空)
SQLConnectInfo FTP@localhost:3306 Michael testpwd

#数据库认证的类型
SQLAuthTypes Backend Plaintext

#指定用来做用户认证的表的有关信息。(将在后面创建)
SQLUserInfo FTPUSERS userid passwd uid gid homedir shell
SQLGroupInfo FTPGRPS groupname gid members

#数据库认证
SQLAuthenticate users groups usersetfast groupsetfast

#proftpd进行的mysql调用语句,别修改任何地方
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 quotalimits 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 quotatallies 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}'" quotatallies

SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}" quotatallies

QuotaLimitTable sql:/get-quota-limit
QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally
至此,完成了proftpd.conf配置文件的编写

注2:之前Michael按照网上的部分文档编写了最后部分的mysql调用语句,结果最后运行proftpd后,登陆时总是出现421 Service not available 的错误,后来发现是最后部分的语句有问题,上面的语句是Michael经过修改后的,将不会有问题。

四、完成MySQL数据库表配置
完成proftpd.conf配置文件后,需要进行数据库表的配置,包括创建表和插入数据
1、登陆mysql或者使用phpmyadmin工具创建数据库 FTP
#mysqladmin create FTP
2、运行下面的sql语句创建表和插入必要数据

-- --------------------------------------------------------

--
-- 表的结构 `FTPGRPS`
--

CREATE TABLE `FTPGRPS` (
`groupname` text NOT NULL,
`gid` smallint(6) NOT NULL default '0',
`members` text NOT NULL
) ENGINE=MyISAM;;

--
-- 导出表中的数据 `FTPGRPS`
--

INSERT INTO `FTPGRPS` VALUES ('FTPGRP', 1000, 'FTPUSR');
INSERT INTO `FTPGRPS` VALUES ('ftpusers', 1000, 'ftp');

-- --------------------------------------------------------

--
-- 表的结构 `FTPUSERS`
--

CREATE TABLE `FTPUSERS` (
`userid` text NOT NULL,
`passwd` text NOT NULL,
`uid` int(11) NOT NULL default '0',
`gid` int(11) NOT NULL default '0',
`homedir` text,
`shell` text
) ENGINE=MyISAM;;

--
-- 导出表中的数据 `FTPUSERS`
--

INSERT INTO `FTPUSERS` VALUES ('test', 'testftp', 1000, 1000, '/home/ftp', '');

-- --------------------------------------------------------

--
-- 表的结构 `quotalimits`
--

CREATE TABLE `quotalimits` (
`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;;

--
-- 导出表中的数据 `quotalimits`
--
-- 设置Michael用户,磁盘配额1G,可以上传下载流量2G,最多文件数10个
INSERT INTO `quotalimits` VALUES ('Michael', 'user', 'false', 'soft', 1.024e+09, 0, 2.048e+09, 10, 0, 0);

-- --------------------------------------------------------

--
-- 表的结构 `quotatallies`
--

CREATE TABLE `quotatallies` (
`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;;
如果你想设置quota,只要在ftpquotalimits表里设置一下就行了,这个表里的各个参数分别代表:

代码:
quotalimits表
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: - 允许传输的文件数(包括上传/下载)

五、完成最后的用户、用户组和目录设置
1、创建proftpd服务运行的用户和用户组
#pw groupadd FTPGRP -g 1000
#pw adduser FTPUSR -u 1000 -g 1000 -d /home/ftp -s /sbin/nologin

2、创建匿名登陆用户映射的系统用户和用户组
#pw groupadd ftpusers -g 1000
#pw adduser ftp -u 2002 -g 1000 -d /var/ftp/incoming -s /sbin/nologin

六、运行测试配置系统服务
1、运行proftpd服务
#/usr/local/sbin/proftpd

2、测试
在任何一台可以访问服务器的机器上测试ftp连接,使用Michael用户和testftp口令登陆,然后运行quote SITE QUOTA命令查看设置的磁盘限额信息
然后测试使用anonymous匿名用户登陆测试

3、监控和调试proftpd服务
#/usr/local/sbin/proftpd proftpd -n -d 5 -c /usr/local/etc/proftpd.conf
这样在测试和连接ftp的时候,可以在主机上看到所有的proftpd运行信息

4、日志监控
可以使用下面的命令查看系统日志、传送日志等
#tail -f /var/log/proftpd.syslog
#tail -f /var/log/proftpd.transferlog

5、配置系统自启动proftpd服务
#vi /etc/rc.conf
加入下面一行
proftpd_enable=”YES”
这样系统启动的时候会调用/usr/local/etc/rc.d/proftpd.sh脚本启动proftpd服务

返回顶部 ^