如何把PROFTPD同mysql
我的全功略,我就是按照这个做的。
注意#表示注释,用于解释用
**重要信息****
proftpd1。2。8加载mod_sql模块时,在只能在/tmp/ 下找 ck 在配置mysql时要把 ck配置到 ck
# 一、假定你的机器上已经安装好了mysql ,
#添加认证用户
groupadd -g 1000 -r ftp_grp
adduser -u 1000 -g 1000 -d /www/ -s /bin/bash -r ftp_usr
chown ftp_usr。 ftp_grp /www -R
# 1、开始编译安装
tar -zxvf proftpd-1。2。8。tar。gz
t...全部
我的全功略,我就是按照这个做的。
注意#表示注释,用于解释用
**重要信息****
proftpd1。2。8加载mod_sql模块时,在只能在/tmp/ 下找 ck 在配置mysql时要把 ck配置到 ck
# 一、假定你的机器上已经安装好了mysql ,
#添加认证用户
groupadd -g 1000 -r ftp_grp
adduser -u 1000 -g 1000 -d /www/ -s /bin/bash -r ftp_usr
chown ftp_usr。
ftp_grp /www -R
# 1、开始编译安装
tar -zxvf proftpd-1。2。8。tar。gz
tar -zxvf proftpd-mod-quotatab-1。2。7。
tar。gz #解压缩 mod_quotatab-1。2。8
cp 。/mod_quotatab/* 。/proftpd-1。2。8/modules
mkdir -p 。/proftpd-1。
2。8/include/mysql
cp /export/home/mysql/include/mysql/mysql。h 。/proftpd-1。2。8/include/mysql
cd 。
/proftpd-1。2。8
。/configure --prefix=/export/home/proftpd --with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql \
--with-includes=/export/home/mysql/include/mysql --with-libraries=/export/home/mysql/lib/mysql
make
make install
ln -s /export/home/mysql/lib/mysql/ 。
12。0。0 /usr/lib/ 。12
cd 。。
# 2。生成ProFTPD启动文件
sed "s/\/usr\/sbin\/atd/\/export\/home\/proftpd\/sbin\/proftpd/g" /etc/rc。
d/init。d/atd > /etc/rc。d/init。d/proftpd
sed "s/atd/proftpd/g" /etc/rc。d/init。d/proftpd > /tmp/txt
sed "s/at daemon/proftpd daemon/g" /tmp/txt > /etc/rc。
d/init。d/proftpd
rm -rf /tmp/txt
chmod 755 /etc/rc。d/init。d/proftpd
chkconfig --level 345 proftpd on
chkconfig --level 0126 proftpd off
# 3。
为ProFTPD创建PAM文件,使用 vi 创建文件 /etc/pam。d/ftp ,其内容为:
echo "auth required \/lib\/security\/pam_ item=user sense=deny " >/etc/pam。
d/ftp
echo "file=\/etc\/ftpusers onerr=succeed">>/etc/pam。d/ftp
echo "auth required \/lib\/security\/pam_ shadow nullok">>/etc/pam。
d/ftp
echo "account required \/lib\/security\/pam_ ">>/etc/pam。d/ftp
echo "session required \/lib\/security\/pam_ ">>/etc/pam。
d/ftp
# 4、修改ProFTPD的启动参数,替换 nogroup,并将其改为 nobody
sed "s/nogroup/nobody/g" /export/home/proftpd/etc/ nf > /tmp/txt
sed "s/\#DefaultRoot \~/DefaultRoot \~/g" /tmp/txt>/export/home/proftpd/etc/ nf
rm -rf /tmp/txt
# 5。
修改ftp用户,如果您不希望匿名登录有效,本节可以不做
usermod -s /bin/bash -d /export/home/ftp/ ftp
mkdir /export/home/ftp
chown ftp。
ftp /export/home/ftp
chmod 700 /export/home/ftp
#可以上传文件了,开通了基本的ftp服务
#二、mysql 用户认证部分
#1。设置MySQL认证,在配置文件中添加下列
#数据库联接的信息,DatabaseName是数据库名,HostName是主机名,#Port是端口号,UserName是连接数据库的用户名,Password是密码。
echo "SQLConnectInfo ftpusers@localhost:3306 ftp_usr !23EwqAsdCxz">>/export/home/proftpd/etc/ nf
#数据库认证的类型:
echo "SQLAuthTypes Backend Plaintext">>/export/home/proftpd/etc/ nf
#指定用来做用户认证的表的有关信息。
("FTPUSERS"和"FTPGRPS"是数据表名字,等一会而在下面建立)
echo "SQLUserInfo ftp_users userid passwd uid gid homedir shell">>/export/home/proftpd/etc/ nf
echo "SQLGroupInfo ftp_grps grpname gid members">>/export/home/proftpd/etc/ nf
#设置如果shell为空时允许用户登录:
echo "RequireValidShell off">>/export/home/proftpd/etc/ nf
#数据库的鉴别
echo "SQLAuthenticate users groups usersetfast groupsetfast">>/export/home/proftpd/etc/ nf
#如果home目录不存在,则系统会为根据它的home项新建一个目录:
echo "SQLHomedirOnDemand on">>/export/home/proftpd/etc/ nf
echo "#ScoreboardFile /export/home/proftpd/var/ oreboard">>/export/home/proftpd/etc/ nf
echo "#SQLLogFile /export/home/proftpd/var/SQLLogFile。
log">>/export/home/proftpd/etc/ nf
#*下面是数据库中的操作****
#然后在这个数据库中建立一个用户表FTPUSERS,确定组的表FTPGRPS
drop database ftpusers;
create database ftpusers;
use ftpusers;
create table ftp_users (
userid varchar(20) NOT NULL,
passwd varchar(20) NOT NULL,
uid INT NOT NULL,
gid INT NOT NULL,
homedir varchar(50) ,
shell varchar(50)
);
create table ftp_grps (
grpname TEXT NOT NULL,
gid SMALLINT NOT NULL,
members TEXT NOT NULL,
);
#*插入测试记录
INSERT INTO ftp_users (userid, passwd, uid, gid, homedir, shell) VALUES ('user1', '999999', '1000', '1000', '/www/user1', '' );
INSERT INTO ftp_grps VALUES ('ftp_grp', 1000, 'ftp_usr');
#到这里MYSQL认证部分就算基本配置好了,接下来是磁盘限额部分
首先,还是编辑proftpd文件
#磁盘限额部分
QuotaDirectoryTally on
#磁盘限额单位 b"|"Kb"|"Mb"|"Gb"
QuotaDisplayUnits "Kb"
QuotaEngine on
#磁盘限额日志记录
QuotaLog "你的LOG路径"
# 打开磁盘限额信息,当登陆FTP帐户后,使用命令 "quote SITE QUOTA" 后可显示当前用户的磁盘限额
QuotaShowQuotas on
#以下是SQL调用语句,不用修改直接拷贝过去
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
然后建立mysql 数据表
CREATE TABLE quotalimits (
name VARCHAR(30),
quota_type ENUM("user", "group", "class", "all") NOT NULL,
per_session ENUM("false", "true") NOT NULL,
limit_type ENUM("soft", "hard") NOT NULL,
bytes_in_avail FLOAT NOT NULL,
bytes_out_avail FLOAT NOT NULL,
bytes_xfer_avail FLOAT NOT NULL,
files_in_avail INT UNSIGNED NOT NULL,
files_out_avail INT UNSIGNED NOT NULL,
files_xfer_avail INT UNSIGNED NOT NULL
);
CREATE TABLE quotatallies (
name VARCHAR(30) NOT NULL,
quota_type ENUM("user", "group", "class", "all") NOT NULL,
bytes_in_used FLOAT NOT NULL,
bytes_out_used FLOAT NOT NULL,
bytes_xfer_used FLOAT NOT NULL,
files_in_used INT UNSIGNED NOT NULL,
files_out_used INT UNSIGNED NOT NULL,
files_xfer_used INT UNSIGNED NOT NULL
);
说明一下,quotatallies表不需要作修改,它记录了用户当前的磁盘使用情况,由程序自动记录
要注意的是quotalimits 表中一些字段的含意
quota_type 磁盘限额的鉴别,可以设置单各用户,也可以设置一各组中的全部用户,还可以设置全部用户
bytes_in_avail 上传最大字节数,就是FTP用户空间容量
(设置个字段的时候是以byte(字节)为单位,如果要限额在10M,那就是10240000,下面也一样)
bytes_out_avail 下载最大字节数,需要注意的是,这个字段中记录的是用户总共能从服务器上下载多少数据,数据是累计的。
bytes_xfer_avail
总共可传输的文件的最大字节数(上传和下载流量)需要注意的是,这个字段中记录的是用户总共能传输文件的最大字节数,数据是累计的。
files_in_avail INT 总共能上传文件的数目
files_out_avail INT 能从服务器上下载文件的总数目
files_xfer_avail INT 总共可传输文件的数目(上传和下载)
好了,开始使用磁盘限额,我们要将上面建立的user1帐号给予10M空间,最多能上传500个文件到服务器上,文件传输流量为20M,只能传输10个文件。
只要在MYSQL中插入
INSERT INTO `quotalimits` ( `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` )
VALUES ('user1', 'user', 'false', 'soft', '10240000', '0',
' ', '500', '0', '10');
就可以了,不需要设置的部分用0代替就可以了
现在运行proftpd,登陆到user1 ,使用quote SITE QUOTA 就会显示user1用户的磁盘使用情况
ftp> quote SITE QUOTA
200-The current quota for this session are [current/limit]:
Name: user1
Quota Type: User
Per Session: False
Limit Type: Soft
Uploaded Kb: 0。
00/10000。00
Downloaded Kb: unlimited
Transferred Kb: 0。00/2000。00
Uploaded files: 0/500
Downloaded files: unlimited
Transferred files: 0/10
200 Please contact root@localhost if these entries are inaccurate
OK,安装完毕。
。收起