- 论坛徽章:
- 0
|
安装环境:
操作系统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 |
|