ChinaUnix首页 > 精华文章 > FTP服务器 > 正文

[精华] 【原创】proftp学习笔记-配置全功略


http://www.chinaunix.net 作者:zhangweibo  发表于:2005-11-25 13:08:02
发表评论】 【查看原文】 【FTP服务器讨论区】【关闭

献给CU的新年礼物哦 :mrgreen: 国内关于proftp设置的文档实在太少,只能看着官方文档慢慢学习,特把学习经验分享给大家,祝大家新年快乐:)

原文地址:http://www.5ilinux.com/blog/archives/000082.html
转载请注明出处和署名,并请保持一致 


proftp学习笔记(一)
这几天,公司终于放假了,终于可以安下心来好好学些proftp+mysql+quota。

安装proftp之前,必须先做一个工作,假如你的mysql是自己编译的,那就必须先修改/etc/ld.so.conf,否则后面运行proftp会报错。
vi /etc/ld.so.conf

添加下面一行:


/usr/local/mysql/lib/mysql


注意大家如果mysql的安装路径于我不一样,则填写相应的路径,有关mysql的编译安装请参考《Linux+Apache+Mysql+PHP典型配置》。

1。下载相关软件

wget ftp://ftp.proftpd.org/distrib/source/proftpd-1.2.9.tar.gz

下载proftp的最新版本1.2.9 
wget http://www.castaglia.org/proftpd/modules/proftpd-mod-quotatab-1.2.11.tar.gz

这是配合proftp的磁盘限额的模块 
2。解压编译


tar zvxf proftpd-1.2.9.tar.gz


tar zvxf proftpd-mod-quotatab-1.2.11.tar.gz

cp mod_quotatab/*.c proftpd-1.2.9/contrib/

cp mod_quotatab/*.h proftpd-1.2.9/contrib/


vi proftpd-1.2.9/contrib/mod_sql_mysql.c
找到#include 这一行,将mysql.h改成你的系统中此文件所在的路径,如/usr/local/mysql/include/mysql/mysql.h 
编译:

./configure \

--prefix=/usr/local/proftpd \
--with-modules=mod_sql:mod_sql_mysql:mod_quotatab\
:mod_quotatab_sql \
--with-includes=/usr/local/mysql/include/mysql \
--with-libraries=/usr/local/mysql/lib/mysql
make 
make install


ok, 现在我们可以来启动proftp了,只要

/usr/local/proftpd/sbin/proftpd

用你的ftp客户端试验以下,应该可以正常登陆,包括匿名和linux用户名可以。

其实默认的proftp满足日常的服务器管理用还是绰绰有余的,有个地方还是要修改一下,就是默认proftp的配置文件不支持ftp续传,所以我们只要

vi /usr/local/proftpd/etc/proftpd.conf

添加以下两行

AllowRetrieveRestart on

AllowStoreRestart on


重新启动以下proftp,就可以正常续传文件了。

创建proftpd脚本

只要在proftp的源代码目录

cp proftpd-1.2.9/contrib/dist/rpm/proftpd.init.d /etc/rc.d/init.d/proftpd


记得修改proftpd文件,一般要修改proftpd的实际路径

chmod 755 /etc/rc.d/init.d/proftpd

ok

以后就可以用这个教本来启动,停止,重启proftp

呵呵,今天就讲这些,明天讲些proftp的一些基础配置:)

相关文章:proftp学习笔记(二)



 zhangweibo 回复于:2004-01-24 11:43:49

原文地址:http://www.5ilinux.com/blog/archives/000085.html
转载请注明出处和署名,并请保持一致

proftp学习笔记(二)
上次我们讲了proftp的基本安装,由于我们后面有关于mysql和quota的设置,所以编译的时候把相应的模块都编译进去了,如果你不需要mysql和磁盘限额的功能,完全可以不需要这么编译。

这里要讲一个非常实用的命令,

/usr/local/proftpd/sbin/ftpshut

这个命令还是比较实用的,因为你可能需要不断的调整你的服务器,而这个命令就非常灵活,可以在不停止proftpd进程的前提下,定时停止ftp连接,这里将会详细说它是怎么使用的。


ftpshut [ -l min ] [ -d min ] time [ warning-message ... ]



-l min: 在ftp关闭服务之前的几分钟内,尝试建立新的ftp连接均不被接受
-d min: 在ftp关闭服务之前的几分钟内,已经建立的ftp连接将被中止
time: 在多少时间后,服务器将关闭ftp服务,格式有两种
+number 经过number分钟后关闭
MMHH 在今天MM:HH服务器将关闭

注意,这里我们用这个命令是把ftp服务给停了,但实际的proftpd进程还没停止,所以一般调试ftp会使用到这个命令。

举例:
再经过30分钟后,FTP服务将关闭,在这之前的20分钟不可接受任何新的ftp连接,已经建立的在服务关闭前10分钟强制断线,并在客户端显示“FTP Server Will shutdown at time”


ftpshut -l 20 -d 10 +30 "FTP Server Will shutdown at time"


其实ftpshut就是产生/etc/shutmsg ,你只要删除这个文件ftp又可以重新服务,或者
直接


ftpshut -R


好了,开始讲一些proftpd的基本配置吧,其实大家如果熟悉apache的配置的话,你会发现proftpd的设置基本都是类似的,它的配置基本格式是

#全局设置

设置项目1 参数1
设置项目2 参数2

#某个目录的设置
<Directory "路径名">;
...
...
</Directory>;

#关于匿名用户的设置
<Anonymous "匿名登陆的目录">;
...
...
<Limit 限制动作>;
...
...
</Limit>;
</Anonymous>;



我们用到的比较多的可能是Limit的使用,Limit大致有以下动作,基本能覆盖全部的权限了,大家灵活使用就是了。

CMD:Change Working Directory 改变目录

MKD:MaKe Directory 建立目录的权限
RNFR: ReName FRom 更改目录名的权限
DELE:DELEte 删除文件的权限
RMD:ReMove Directory 删除目录的权限
RETR:RETRieve 从服务端下载到客户端的权限
STOR:STORe 从客户端上传到服务端的权限
READ:可读的权限,不包括列目录的权限,相当于RETR,STAT等
WRITE:写文件或者目录的权限,包括MKD和RMD
DIRS:是否允许列目录,相当于LIST,NLST等权限,还是比较实用的
ALL:所有权限
LOGIN:是否允许登陆的权限



针对上面这个Limit所应用的对象,又包括以下范围 
AllowUser 针对某个用户允许的Limit

DenyUser 针对某个用户禁止的Limit
AllowGroup 针对某个用户组允许的Limit
DenyGroup 针对某个用户组禁止的Limit
AllowAll 针对所有用户组允许的Limit
DenyAll 针对所有用户禁止的Limit



关于限制速率的参数为: 
TransferRate STOR|RETR 速度(Kbytes/s) user 使用者


下面我们以例子来解说proftp的配置,这样大家可能更加容易理解。

1。ftp服务器支持断点续传,且最大支持同时10人在线,每个ip只允许一个连接;
2。允许ftpusers用户组只能访问自己的目录,而不能访问上级或者其他目录;
3。用户登陆服务器时不显示ftp服务器版本信息,以增加安全性;
4。建立一个kaoyan的ftp帐户,属于ftpusers组,kaoyan用户只允许下载,没有可写的权限。下载速率限制在50Kbytes/s。
5。建立一个upload用户,也属于ftpusers组,同kaoyan用户的宿主目录一样,允许upload用户上传文件和创建目录的权限,但不允许下载,并且不允许删除目录和文件的权限,上传的速率控制在100Kbytes/s

先是前期的用户和组添加以及目录的权限设置

group add ftpusers

useradd -d /home/kaoyan -g ftpusers -s /bin/fales kaoyan
useradd -d /home/kaoyan -g ftpusers -s /bin/fales upload
chown -R kaoyan:upload /home/kaoyan
chmod -R 775 /home/kaoyan


如果你只想ftpusers组的用户访问,可以设置成770都行。
设置/usr/local/proftpd/etc/proftpd.conf

注意#表示注释,对设置没影响,可以不写

ServerName "Frank's FTP Server"

ServerType standalone
DefaultServer on
Port 21
Umask 022
MaxInstances 30 #最多有30个proftpd的PID
User nobody
Group nobody
TimeoutStalled 10
MaxClients 10 #最多允许10个用户在线
MaxClientsPerHost 1 "对不起,一个IP只允许一个连接"
AllowStoreRestart on 
#允许断点续传(上传),断点续续(下载)是默认支持的,不用设置
DisplayLogin welcome.msg #欢迎词文件
ServerIdent off #屏蔽服务器版本信息
DefaultRoot ~ ftpusers #设置ftpusers组只能访问自己的目录

<Directory />;
AllowOverwrite on
</Directory>;
<Directory /home/kaoyan>;
<Limit WRITE>; #不允许写
DenyUser kaoyan
</Limit>;
<Limit RMD RNFR DELE RETR>; #不允许删除,改名,下载
DenyUser upload
</Limit>;
TransferRate RETR 50 user kaoyan
TransferRate STOR 100 user upload
</Directory>;



我这里实现的方式还可以通过


<Anonymous ~kaoyan>;


...

...

</Anonymous>;

<>;<Anonymous ~upload>;

...

...

</Anonymous>;


而且更加灵活,具体用那种方式,看大家了,我只是给大家入个门而已

好了,今天就讲到这里,明天继续讲一些proftp的其他配置


 zhangweibo 回复于:2004-01-24 11:45:43

原文地址:http://www.5ilinux.com/blog/archives/000088.html
转载请注明出处和署名,并请保持一致 

proftp学习笔记(三)
前面的两个笔记,我想大家对proftp的设置应该有些认识,是不是跟apache的配置差不多吧。我想配置过Serv_U服务器的,再稍微看一下proftp的配置规则,应该能马上能配置出一个强大的proftp服务器。

这里我们再讲一些proftp的其他参数配置:

MaxHostsPerUser 1 "对不起,每个帐户最多允许来源ip为1个"
#MaxHostsPerUser 对防止ftp帐号还是比较有用的。

MaxClientsPerUser 1 "对不起,每个帐户在每个客户端最多可以同时登陆1次"
#这个参数可以防止多线程软件下载对服务器的破坏

MaxClientsPerHost 1 "对不起,同一个客户端只能最多1个帐号可以登陆"
#比如ftp服务端有好多帐户你都有,但也只能用1个帐号登陆

呵呵,这三个Max参数比较容易搞晕,大家可要搞清他们的含义哦:)

WtmpLog on 
#是否要把ftp记录在日志中,如果不想可以设置成off屏蔽掉log日志。

TimeoutIdle 600
#客户端idel时间设置,默认就是600秒

DisplayLogin welcome.msg
#设置ftp登陆欢迎信息文件

关于欢迎文件的设置包含如下参数


%T 目前的时间 


%F 所在硬盘剩下的容量 

%C 目前所在的目录 

%R Client 端的主机名称 

%L Server 端的主机名称 

%U 使用者帐户名称 

%M 最大允许连接人数 

%N 目前的服务器连接人数 

%E FTP服务器管理员的 email 

%i 本次上传的文件数量 

%o 本次下载的文件数量 

%t 本次上传+下载的文件数量


知道这些参数,我们就可以写出一个友好的欢迎语

vi /home/kaoyan/welcome.msg

欢迎您%U, 这是Frank的测试FTP服务器;

目前时间是:%T;
本服务器最多允许%M个用户连接数;
目前服务器上已有%N个用户连接数;
目前你所在的目录是%C;
目录所在的硬盘还剩下%F字节。


让proftp支持现在流行的FXP传输方式,默认是不支持的。
只要在服务端设置


AllowForeignAddress on


PassivePorts 49152 65534 #端口也可自己指定喜欢的


千万别忘了在客户端也要设置成支持FXP哦,否则想我试验了好几次,一直以为服务器没设置好,其实就是客户端没设置,呵呵。


如何让root能登陆,默认proftp是不支持root登陆,我们可以设置让root也能登陆ftp,不过我在这里还是建议大家最好不要让root能登陆ftp,设置如下

RootLogin on

如何禁止某个地址访问ftp
比如禁止10.1.1网段的机器访问ftp,可以这么设置


<Limit LOGIN>;

Order deny,allow
Deny from 10.1.1.
Allow from all
</Limit>;



虚拟ftp的建立,一般用于一台ftp服务器有好多ip地址,或者ftp用不同的端口,基本设置语法是:

比如我们要做一个端口是5555的ftp服务器:

<VirtualHost 210.51.0.124>;

ServerName "Frank FTP Server"
Port 5555
...
<Directory 目录>;
...
<Limit 动作>;
...
</Limit>;
...
</Directory>;
</VirtualHost>;


至于虚拟主机中的其他设置跟我以前讲的基本差不多

上传/下载比率设置,我想用过Serv_U的朋友一定知道这个功能的使用,我们这里让proftp也实现这个功能。
要实现功能注意编译的时候加入ratio模块,否则proftp默认是不支持,假设有个帐户ftp1的ftp目录在/home/kaoyan ,然后我们设置ftp1的上传/下载比率是1:2(即上传1M,就可以下载2M)

touch /home/kaoyan/ratio.dat

touch /home/kaoyan/ratio.tmp
chmod -R 666 /home/kaoyan

在proftpd.conf设置如下


Ratios on

SaveRatios on
RatioFile /home/kaoyan/ratio.dat
RatioTempFile /home/kaoyan/ratio.tmp


在相应的设置项里添加

UserRatio ftp1 0 0 2 1000

#UserRatio "使用者帐户" fileratio filequota byteratio bytequota
#  fileratio :以文件为基础的比率,通常不限制,故为 0 
#  filequota :预设置能下载多少文件,不限制时为 0 
#  byteratio :就是上传/下载的比例,如果数字为2,表示1:2 
#  bytequota :预设置能下载多少 KBytes 的文件
#上面设置的就是1:2的比率,默认只允许下载1M的文件


ok,重启一下,以后ftp1就可以启用上传/下载比率了


 好好先生 回复于:2004-01-24 21:16:16

不错!


 zhangweibo 回复于:2004-01-25 20:18:45

原文地址:http://www.5ilinux.com/blog/archives/000091.html 
转载请注明出处和署名,并请保持一致


proftp学习笔记(四)
今天我们讲proftp+mysql+quota的应用,我想大家最期待的就是这个了吧

1.首先我们建立相应的用户和用户组

groupadd -g 5500 ftpgroup

adduser -u 5500 -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup ftpuser

2.操作数据库

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';



注意这里大家根据实际情况填写自己数据库的用户名和密码,如果大家对数据库操作不熟悉的话,不妨可以用phpmyadmin来操作。

3.配置proftp文件

ServerName "Frank's FTP Server" ServerType standalone DefaultServer on 

Port 21

Umask 022

MaxInstances 30
MaxLoginAttempts 3

User nobody
Group nobody

MaxHostsPerUser 1 "Sorry, you may not connect more than one time."
MaxClientsPerUser 2 "Only one such user at a time."
MaxClientsPerHost 3 "Sorry, you may not connect more than one time."

RootLogin off
RequireValidShell off
TimeoutStalled 10
MaxClients 10
AllowForeignAddress on
AllowStoreRestart on
ServerIdent off
DefaultRoot ~ ftpgroup

SQLAuthTypes Backend Plaintext
#Backend表示用户认证方式为MySQL数据库的认证方式 
#Plaintext表示明文认证方式,排在最前面的为最先使用的方式
SQLAuthenticate users* groups*

# databasename@host database_user user_password
SQLConnectInfo ftpdb@localhost 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

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_avai
l, 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_i
n_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}'" ftpquota
tallies

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




ok,就这么简单,重启一下proftp服务就已经能使用proftp+mysql+quota的功能

我们可以在数据库ftpuser添加一个虚拟用户,

INSERT INTO `ftpuser` VALUES (1, 'test', 'ftppasswd', 5500, 5500, '/home/test', '/sbin/nologin');

大家可以在phpmyadmin里直接操作添加一个用户,相信不用我教大家怎么添加吧:)

如果你想设置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: - 允许传输的文件数(包括上传/下载)



老实说用mysql和quota模块来验证用户和设置磁盘限额,但我总觉得还是不够完善,因为在这个方法中,数据库表里还没有相应的权限的字段,所以说相应用户的权限还是得用实际得用户即mysql对应得uid和gid来控制权限,那天要是mysql数据库也能完全控制权限就好了。


大家觉得看的晕的话,可以直接去我的网站去下载原版的配置文件,包括proftpd.conf和ftpdb.sql

这个春节一直在学习proftp,终于可以松口气了,希望我的学习笔记可以对一些想学习proftp的朋友有所帮助,请多交流


 双眼皮的猪 回复于:2004-01-26 21:57:36

大哥,您总能带来好东西啊..:)
非常感谢...


 zhangweibo 回复于:2004-01-26 22:19:31

呵呵,大家喜欢就好,遗憾没加精华:(


 双眼皮的猪 回复于:2004-01-28 00:31:30

这里的斑竹,哎,不说了...您慢慢也看得到...


 好好先生 回复于:2004-01-28 17:27:20

引用:原帖由 "zhangweibo"]呵呵,大家喜欢就好,遗憾没加精华:(
 发表:


好东西加不加精华都是好,不要太过计较。 :roll:


 zhangweibo 回复于:2004-01-28 21:49:37

呵呵,我是无所谓的了。为大家方便查询才是真,你们说是吗?


 大乌云 回复于:2004-01-30 08:36:33

谢谢撒~
过年前,就在你的个人Linux Weblog上看到说,你要做这个应用,果然效果非同凡响哦

另外,偶觉得CU 精华的问题很大,加了精华的帖子,格式就会有些很讨厌的变化,而且有的时候格式的变化对帖子的质量影响很大~~

估计你的这帖子,很快会被人到处转载的~


 大乌云 回复于:2004-01-30 08:47:45

OS:RedHat EnterPrise Advanced server 最小化安装
proftpd-1.2.9.tar.gz
mysql-4.0.17.tar.gz
quotatab-1.2.11.tar.gz

mysql编译安装正常,在make proftpd的时候,就出错了,说什么
cannot find -lz

怎么回事?给点提示

config.h文件内容如下:


 大乌云 回复于:2004-01-30 08:48:11

/* config.h.  Generated by configure.  */
/* config.h.in.  Generated automatically from configure.in by autoheader.  */
/* -*- C -*- */
/* @configure_input@ */

#ifndef config_h_included
#define config_h_included

/*************************************************************************
 * This section is automatically generated by 'configure'.  Adjust these
 * if configure didn't make a correct guess for your system.
 *************************************************************************/

/* Define to `int' if <sys/types.h>; doesn't define. */
/* #undef ino_t */

/* Define to `mode_t' if <sys/types.h>; doesn't define. */
#define umode_t mode_t

/* Define to `int' if <sys/socket.h>; doesn't define. */
/* #undef socklen_t */

/* Define if you have AIX send_file() semantics. */
/* #undef HAVE_AIX_SENDFILE */

/* Define if you have BSD sendfile() semantics. */
/* #undef HAVE_BSD_SENDFILE */

/* Define if you have Linux sendfile() semantics. */
/* #undef HAVE_LINUX_SENDFILE */

/* Define if you have Solaris sendfile() semantics. */
/* #undef HAVE_SOLARIS_SENDFILE */

/* Define if your <syslog.h>; defines the LOG_CRON macro */
#define HAVE_LOG_CRON 1

/* Define if your <syslog.h>; defines the LOG_FTP macro */
#define HAVE_LOG_FTP 1

/* Define if you want support for PAM based authentication */
/* #undef HAVE_PAM */

/* Define if you have the <linux/capability.h>; header file. */
/* #undef HAVE_LINUX_CAPABILITY_H */

/* Define if your DIR structure has member dd_fd */
/* #undef HAVE_STRUCT_DIR_DD_FD */

/* Define if your DIR structure has member __dd_fd */
/* #undef HAVE_STRUCT_DIR___DD_FD */

/* Define if your spwd structure has member warn */
#define HAVE_SPWD_SP_WARN 1

/* Define if your spwd structure has member inact */
#define HAVE_SPWD_SP_INACT 1

/* Define if your spwd structure has member expire */
#define HAVE_SPWD_SP_EXPIRE 1

/* Define if your system has __progname */
#define HAVE___PROGNAME 1

/* Define if your system has _pw_stayopen variable (IRIX specific?) */
/* #undef HAVE__PW_STAYOPEN */

/* Define if your system has the sendfile function */
/* #undef HAVE_SENDFILE */

/* Define this if you have the setpassent function */
/* #undef HAVE_SETPASSENT */

/* Define if your DIR structure has member d_fd */
/* #undef HAVE_STRUCT_DIR_D_FD */

/* Define if you have the <syslog.h>; header file. */
#define HAVE_SYSLOG_H 1

/* Define if you already have a typedef for timer_t */
#define HAVE_TIMER_T 1

/* Define if your struct utmp has ut_host */
#define HAVE_UT_UT_HOST 1

/* Define if your struct utmp uses ut_user and not ut_name */
#define HAVE_UTMAXTYPE 1

#define PF_ARGV_NONE 0
#define PF_ARGV_NEW 1
#define PF_ARGV_WRITEABLE 2
#define PF_ARGV_PSTAT 3
#define PF_ARGV_PSSTRINGS 4

/* If you don't have setproctitle, PF_ARGV_TYPE needs to be set to either
 * PF_ARGV_NEW (replace argv[] arguments), PF_ARGV_WRITEABLE (overwrite
 * argv[]), PF_ARGV_PSTAT (use the pstat function), or PF_ARGV_PSSTRINGS
 * (use PS_STRINGS).
 *
 * configure should, we hope <wink>;, detect this for you.
 */
#define PF_ARGV_TYPE PF_ARGV_WRITEABLE

/* Define if using alloca.c.  */
/* #undef C_ALLOCA */

/* Define to empty if the keyword does not work.  */
/* #undef const */

/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems.
   This function is required for alloca.c support on those systems.  */
/* #undef CRAY_STACKSEG_END */

/* Define to the type of elements in the array set by `getgroups'.
   Usually this is either `int' or `gid_t'.  */
#define GETGROUPS_T gid_t

/* Define to `int' if <sys/types.h>; doesn't define.  */
/* #undef gid_t */

/* Define if you have alloca, as a function or macro.  */
#define HAVE_ALLOCA 1

/* Define if you have <alloca.h>; and it should be used (not on Ultrix).  */
#define HAVE_ALLOCA_H 1

/* Define if you don't have vprintf but do have _doprnt.  */
/* #undef HAVE_DOPRNT */

/* Define if you have the vprintf function.  */
#define HAVE_VPRINTF 1

/* Define as __inline if that's what the C compiler calls it.  */
/* #undef inline */

/* Define to `int' if <sys/types.h>; doesn't define.  */
/* #undef mode_t */

/* Define to `long' if <sys/types.h>; doesn't define.  */
/* #undef off_t */

/* Define to `int' if <sys/types.h>; doesn't define.  */
/* #undef pid_t */

/* Define as the return type of signal handlers (int or void).  */
#define RETSIGTYPE void

/* Define if the `setpgrp' function takes no argument.  */
#define SETPGRP_VOID 1

/* Define if the `setgrent` function returns void.  */
#define SETGRENT_VOID 1

/* Define to `unsigned' if <sys/types.h>; doesn't define.  */
/* #undef size_t */

/* If using the C implementation of alloca, define if you know the
   direction of stack growth for your system; otherwise it will be
   automatically deduced at run-time.
 STACK_DIRECTION >; 0 =>; grows toward higher addresses
 STACK_DIRECTION < 0 =>; grows toward lower addresses
 STACK_DIRECTION = 0 =>; direction of growth unknown
 */
/* #undef STACK_DIRECTION */

/* Define if you have the ANSI C header files.  */
#define STDC_HEADERS 1

/* Define if you can safely include both <sys/time.h>; and <time.h>;.  */
#define TIME_WITH_SYS_TIME 1

/* Define if your <sys/time.h>; declares struct tm.  */
/* #undef TM_IN_SYS_TIME */

/* Define to `int' if <sys/types.h>; doesn't define.  */
/* #undef uid_t */

/* The number of bytes in a short.  */
#define SIZEOF_SHORT 2

/* The number of bytes in an int.  */
#define SIZEOF_INT 4

/* The number of bytes in a long.  */
#define SIZEOF_LONG 4

/* The number of bytes in a long long.  */
#define SIZEOF_LONG_LONG 8

/* The number of bytes in an off_t.  */
#define SIZEOF_OFF_T 8

/* Define if you have the bcopy function.  */
#define HAVE_BCOPY 1

/* Define if you have the crypt function.  */
#define HAVE_CRYPT 1

/* Define if you have the endprotoent function.  */
#define HAVE_ENDPROTOENT 1

/* Define if you have the fconvert function.  */
/* #undef HAVE_FCONVERT */

/* Define if you have the fcvt function.  */
/* #undef HAVE_FCVT */

/* Define if you have the fgetgrent function.  */
#define HAVE_FGETGRENT 1

/* Define if you have the fgetpwent function.  */
#define HAVE_FGETPWENT 1

/* Define if you have the flock function.  */
#define HAVE_FLOCK 1

/* Define if you have the fpathconf function.  */
#define HAVE_FPATHCONF 1

/* Define if you have the fgetspent function.  */
#define HAVE_FGETSPENT 1

/* Define if you have the freeaddrinfo function.  */
#define HAVE_FREEADDRINFO 1

/* Define if you have the gai_strerror function.  */
#define HAVE_GAI_STRERROR 1

/* Define if you have the getaddrinfo function.  */
#define HAVE_GETADDRINFO 1

/* Define if you have the getcwd function.  */
#define HAVE_GETCWD 1

/* Define if you have the gethostbyname2 function.  */
#define HAVE_GETHOSTBYNAME2 1

/* Define if you have the gethostname function.  */
#define HAVE_GETHOSTNAME 1

/* Define if you have the getnameinfo function.  */
#define HAVE_GETNAMEINFO 1

/* Define if you have the getopt function.  */
#define HAVE_GETOPT 1

/* Define if you have the getopt_long function.  */
#define HAVE_GETOPT_LONG 1

/* Define if you have the getprpwent function.  */
/* #undef HAVE_GETPRPWENT */

/* Define if you have the gettimeofday function.  */
#define HAVE_GETTIMEOFDAY 1

/* Define if you have the hstrerror function.  */
#define HAVE_HSTRERROR 1

/* Define if you have the inet_aton function.  */
#define HAVE_INET_ATON 1

/* Define if you have the inet_ntop function.  */
#define HAVE_INET_NTOP 1

/* Define if you have the inet_pton function.  */
#define HAVE_INET_PTON 1

/* Define if you have the memcpy function.  */
#define HAVE_MEMCPY 1

/* Define if you have the mempcpy function.  */
#define HAVE_MEMPCPY 1

/* Define if you have the mkdir function.  */
#define HAVE_MKDIR 1

/* Define if you have the mkstemp function.  */
#define HAVE_MKSTEMP 1

/* Define if you have the mlock function.  */
#define HAVE_MLOCK 1

/* Define if you have the mlockall function.  */
#define HAVE_MLOCKALL 1

/* Define if you have the munlock function.  */
#define HAVE_MUNLOCK 1

/* Define if you have the munlockall function.  */
#define HAVE_MUNLOCKALL 1

/* Define if you have the pathconf function.  */
#define HAVE_PATHCONF 1

/* Define if you have the pstat function.  */
/* #undef HAVE_PSTAT */

/* Define if you have the regcomp function.  */
#define HAVE_REGCOMP 1

/* Define if you have the rmdir function.  */
#define HAVE_RMDIR 1

/* Define if you have the select function.  */
#define HAVE_SELECT 1

/* Define if you have the set_auth_parameters function.  */
/* #undef HAVE_SET_AUTH_PARAMETERS */

/* Define if you have the setegid function.  */
#define HAVE_SETEGID 1

/* Define if you have the seteuid function.  */
#define HAVE_SETEUID 1

/* Define if you have the setgroupent function.  */
/* #undef HAVE_SETGROUPENT */

/* Define if you have the setgroups function.  */
#define HAVE_SETGROUPS 1

/* Define if you have the setpgid function.  */
#define HAVE_SETPGID 1

/* Define if you have the setproctitle function.  */
/* #undef HAVE_SETPROCTITLE */

/* Define if your system has the setprotoent function.  */
#define HAVE_SETPROTOENT 1

/* Define if you have the setsid function.  */
#define HAVE_SETSID 1

/* Define if you have the siginterrupt function.  */
#define HAVE_SIGINTERRUPT 1

/* Define if you have the snprintf function.  */
#define HAVE_SNPRINTF 1

/* Define if you have the socket function.  */
#define HAVE_SOCKET 1

/* Define if you have the statfs function.  */
#define HAVE_STATFS 1

/* Define if you have the strchr function.  */
#define HAVE_STRCHR 1

/* Define if you have the strcoll function.  */
#define HAVE_STRCOLL 1

/* Define if you have the strerror function.  */
#define HAVE_STRERROR 1

/* Define if you have the strsep function.  */
#define HAVE_STRSEP 1

/* Define if you have the strtol function.  */
#define HAVE_STRTOL 1

/* Define if you have the tzset function.  */
#define HAVE_TZSET 1

/* Define if you have the vsnprintf function.  */
#define HAVE_VSNPRINTF 1

/* Define if you have the <arpa/inet.h>; header file.  */
#define HAVE_ARPA_INET_H 1

/* Define if you have the <bstring.h>; header file.  */
/* #undef HAVE_BSTRING_H */

/* Define if you have the <crypt.h>; header file.  */
#define HAVE_CRYPT_H 1

/* Define if you have the <ctype.h>; header file.  */
#define HAVE_CTYPE_H 1

/* Define if you have the <dirent.h>; header file.  */
#define HAVE_DIRENT_H 1

/* Define if you have the <errno.h>; header file.  */
#define HAVE_ERRNO_H 1

/* Define if you have the <fcntl.h>; header file.  */
#define HAVE_FCNTL_H 1

/* Define if you have the <floatingpoint.h>; header file.  */
/* #undef HAVE_FLOATINGPOINT_H */

/* Define if you have the <getopt.h>; header file.  */
#define HAVE_GETOPT_H 1

/* Define if you have the <hpsecurity.h>; header file.  */
/* #undef HAVE_HPSECURITY_H */

/* Define if you have the <krb.h>; header file.  */
/* #undef HAVE_KRB_H */

/* Define if you have the <libutil.h>; header file.  */
/* #undef HAVE_LIBUTIL_H */

/* Define if you have the <limits.h>; header file.  */
#define HAVE_LIMITS_H 1

/* Define if you have the <memory.h>; header file.  */
#define HAVE_MEMORY_H 1

/* Define if you have the <ncurses.h>; header file.  */
/* #undef HAVE_NCURSES_H */

/* Define if you have the <curses.h>; header file.  */
/* #undef HAVE_CURSES_H */

/* Define if you have the <ndir.h>; header file.  */
/* #undef HAVE_NDIR_H */

/* Define if you have the <netdb.h>; header file.  */
#define HAVE_NETDB_H 1

/* Define if you have the <netinet/in.h>; header file.  */
#define HAVE_NETINET_IN_H 1

/* Define if you have the <netinet/in_systm.h>; header file.  */
#define HAVE_NETINET_IN_SYSTM_H 1

/* Define if you have the <netinet/ip.h>; header file.  */
#define HAVE_NETINET_IP_H 1

/* Define if you have the <netinet/tcp.h>; header file.  */
#define HAVE_NETINET_TCP_H 1

/* Define if you have the <prot.h>; header file.  */
/* #undef HAVE_PROT_H */

/* Define if you have the <regex.h>; header file.  */
#define HAVE_REGEX_H 1

/* Define if you have the <security/pam_appl.h>; header file.  */
/* #undef HAVE_SECURITY_PAM_APPL_H */

/* Define if you have the <pam/pam_appl.h>; header file.  */
/* #undef HAVE_PAM_PAM_APPL_H */

/* Define if you have the <shadow.h>; header file.  */
#define HAVE_SHADOW_H 1

/* Define if you have the <sia.h>; header file.  */
/* #undef HAVE_SIA_H */

/* Define if you have the <siad.h>; header file.  */
/* #undef HAVE_SIAD_H */

/* Define if you have the <strings.h>; header file.  */
#define HAVE_STRINGS_H 1

/* Define if you have the <stropts.h>; header file.  */
#define HAVE_STROPTS_H 1

/* Define if you have the <sys/dir.h>; header file.  */
#define HAVE_SYS_DIR_H 1

/* Define if you have the <sys/file.h>; header file.  */
#define HAVE_SYS_FILE_H 1

/* Define if you have the <sys/ioctl.h>; header file.  */
#define HAVE_SYS_IOCTL_H 1

/* Define if you have the <sys/mman.h>; header file.  */
#define HAVE_SYS_MMAN_H 1

/* Define if you have the <sys/mount.h>; header file.  */
#define HAVE_SYS_MOUNT_H 1

/* Define if you have the <sys/ndir.h>; header file.  */
/* #undef HAVE_SYS_NDIR_H */

/* Define if you have the <sys/param.h>; header file.  */
#define HAVE_SYS_PARAM_H 1

/* Define if you have the <sys/pstat.h>; header file.  */
/* #undef HAVE_SYS_PSTAT_H */

/* Define if you have the <sys/security.h>; header file.  */
/* #undef HAVE_SYS_SECURITY_H */

/* Define if you have the <sys/select.h>; header file.  */
#define HAVE_SYS_SELECT_H 1

/* Define if you have the <sys/sendfile.h>; header file.  */
/* #undef HAVE_SYS_SENDFILE_H */

/* Define if you have the <sys/socket.h>; header file.  */
#define HAVE_SYS_SOCKET_H 1

/* Define if you have the <sys/stat.h>; header file.  */
#define HAVE_SYS_STAT_H 1

/* Define if you have the <sys/statvfs.h>; header file.  */
#define HAVE_SYS_STATVFS_H 1

/* Define if you have the <sys/termio.h>; header file.  */
/* #undef HAVE_SYS_TERMIO_H */

/* Define if you have the <sys/termios.h>; header file.  */
#define HAVE_SYS_TERMIOS_H 1

/* Define if you have the <sys/time.h>; header file.  */
#define HAVE_SYS_TIME_H 1

/* Define if you have the <sys/types.h>; header file.  */
#define HAVE_SYS_TYPES_H 1

/* Define if you have the <sys/uio.h>; header file.  */
#define HAVE_SYS_UIO_H 1

/* Define if you have the <sys/vfs.h>; header file.  */
#define HAVE_SYS_VFS_H 1

/* Define if you have <sys/wait.h>; that is POSIX.1 compatible.  */
#define HAVE_SYS_WAIT_H 1

/* Define if you have the <unistd.h>; header file.  */
#define HAVE_UNISTD_H 1

/* Define if you have the <utmp.h>; header file.  */
#define HAVE_UTMP_H 1

/* Define if you have the <utmpx.h>; header file.  */
#define HAVE_UTMPX_H 1

/* Define if you have the "vmsdir.h" header file.  */
/* #undef HAVE_VMSDIR_H */

/* Define if you have the bind library (-lbind).  */
/* #undef HAVE_LIBBIND */

/* Define if you have the crypt library (-lcrypt).  */
#define HAVE_LIBCRYPT 1

/* Define if you have the curses library (-lcurses).  */
/* #undef HAVE_LIBCURSES */

/* Define if you have the UnixWare gen library (-lgen).  */
/* #undef HAVE_LIBGEN */

/* Define if you have the ncurses library (-lncurses).  */
/* #undef HAVE_LIBNCURSES */

/* Define if you have the nsl library (-lnsl).  */
/* #undef HAVE_LIBNSL */

/* Define if you have the resolv library (-lresolv).  */
/* #undef HAVE_LIBRESOLV */

/* Define if you have the sec library (-lsec).  */
/* #undef HAVE_LIBSEC */

/* Define if you have the security library (-lsecurity).  */
/* #undef HAVE_LIBSECURITY */

/* Define if you have the addrinfo struct.  */
#define HAVE_STRUCT_ADDRINFO 

/* Define if you have the sockaddr_storage struct.  */
#define HAVE_STRUCT_SS 

/* Define if you have the ss_family sockaddr_storage struct member.  */
#define HAVE_SS_FAMILY 1

/* Define if you have the __ss_family sockaddr_storage struct member.  */
/* #undef HAVE___SS_FAMILY */

/* Define if you have the ss_len sockaddr_storage struct member.  */
/* #undef HAVE_SS_LEN */

/* Define if you have the __ss_len sockaddr_storage struct member.  */
/* #undef HAVE___SS_LEN */

/* Define if you have the sin_len sockaddr_in struct member. */
/* #undef SIN_LEN */

/* Define if you have the socket library (-lsocket).  */
/* #undef HAVE_LIBSOCKET */
#ifndef STDIN_FILENO
#define STDIN_FILENO  0
#endif /* STDIN_FILENO */

#ifndef STDOUT_FILENO
#define STDOUT_FILENO  1
#endif /* STDOUT_FILENO */

#ifndef STDERR_FILENO
#define STDERR_FILENO 2
#endif /* STDERR_FILENO */

#ifndef CONFIG_FILE_PATH
#define CONFIG_FILE_PATH "/usr/local/proftpd//etc/proftpd.conf"
#endif /* CONFIG_FILE_PATH */

#ifndef PID_FILE_PATH
#define PID_FILE_PATH "/usr/local/proftpd//var/proftpd.pid"
#endif /* PID_FILE_PATH */

#ifndef RUN_DIR
#define RUN_DIR "/usr/local/proftpd//var/proftpd"
#endif /* RUN_DIR */

/* Number of bits in a file offset, on hosts where this is settable. */
#ifndef _FILE_OFFSET_BITS
#define _FILE_OFFSET_BITS 64
#endif /* _FILE_OFFSET_BITS */

/* Define for large files, on AIX-style hosts. */
/* #undef _LARGE_FILES */

/* Define if auto-detection of shadow passwords is wanted.  */
/* #undef USE_AUTO_SHADOW */

/* Define if curses support, if available, should be used.  */
#define USE_CURSES 1

/* Define if use of builtin getaddrinfo() is desired.  */
/* #undef USE_GETADDRINFO */

/* Define if use of builtin getnameinfo() is desired.  */
/* #undef USE_GETNAMEINFO */

/* Define if IPv6 support is desired.  */
/* #undef USE_IPV6 */

/* Define if the %llu format should be used.  */
#define HAVE_LLU 1

/* Define if the %lu format should be used.  */
/* #undef HAVE_LU */

/* Define if ncurses support, if available, should be used.  */
#define USE_NCURSES 1

/* Define if using /etc/shadow files.  */
#define USE_SHADOW 1

/* Define if using Tru64's C2 SIA authentication.  */
/* #undef USE_SIA */

/* Define if you are a developer. */
/* #undef USE_DEVEL */

/* Tunable parameters */
/* #undef PR_TUNABLE_BUFFER_SIZE */
/* #undef PR_TUNABLE_NEW_POOL_SIZE */
/* #undef PR_TUNABLE_SCOREBOARD_BUFFER_SIZE */
/* #undef PR_TUNABLE_TIMEOUTIDENT */
/* #undef PR_TUNABLE_TIMEOUTIDLE */
/* #undef PR_TUNABLE_TIMEOUTLINGER */
/* #undef PR_TUNABLE_TIMEOUTLOGIN */
/* #undef PR_TUNABLE_TIMEOUTNOXFER */
/* #undef PR_TUNABLE_TIMEOUTSTALLED */
/* #undef PR_TUNABLE_XFER_BUFFER_SIZE */

#endif /* config_h_included */


 zhangweibo 回复于:2004-01-30 09:29:37

引用:原帖由 "大乌云" 发表:
OS:RedHat EnterPrise Advanced server 最小化安装
proftpd-1.2.9.tar.gz
mysql-4.0.17.tar.gz
quotatab-1.2.11.tar.gz

mysql编译安装正常,在make proftpd的时候,就出错了,说什么
cannot find -lz

怎么..........



在/etc/ld.so.conf上加了mysql的lib路径吗


 大乌云 回复于:2004-01-30 09:32:50

哈,上来啦 ~
现在环境不在,那个服务器在家呢~要晚上回去试 :(

还有曾经有个人告诉我说,让我升级gcc-c++和libstdc++-devel

我现在的是3.2.*的够用吧 ?

偶现在在你的BLOG呢

对了 ,你用什么操作系统?、?


 zhangweibo 回复于:2004-01-30 09:40:12

你看看你有没有装类似“zlib-devel”的rpm包


 大乌云 回复于:2004-01-30 09:42:44

[root@vhost root]# rpm -qa | grep zlib
zlib-1.1.4-8.1
[root@vhost root]# 

是这样的,

Secure怎么改console的背景颜色??


 zhangweibo 回复于:2004-01-30 09:50:13

没有devel呀,那是基本包,需要开发包,如果你对服务器不是很熟悉的话,最好不要最小安装。多装没关系,可以一个个关服务的,像你这样就比较麻烦,呵呵:)

我有
zlib-1.1.4-8
zlib-devel-1.1.4-8


 大乌云 回复于:2004-01-30 09:55:46

哦~~~ 

谢谢谢谢撒 ~偶试试

还有如果要下载 比如这些东东 比如:libstdc++-devel-×××××i386到哪里去找?偶找了一些开源的网站,没有找到。

你现在的工作是做什么的?系统管理?开发?


 zhangweibo 回复于:2004-01-30 12:55:47

我是做商务的,技术是我的业务爱好而已

rpm包到http://rpmfind.net去寻找


 wangbin 回复于:2004-01-31 09:09:28

大哥,您总能带来好东西啊.. 
非常感谢...


 啊颖 回复于:2004-02-02 13:17:58

请问一下 

proftpd用mysql开通了新用户之后,目录的权限怎么是500 100? 

我在proftpd.conf里加了没有用户home目录的时候自动建立目录的参数, 

新用户可以登陆但上传下载都不行,只能浏览。 请问是不是还有哪里设置错了在 

proftpd.conf中???


 zhangweibo 回复于:2004-02-02 13:31:40

500 100应该是你mysql对应的uid和gid,你看实际用户中有uid是500的吗,还有gid是100的吗。权限可以通过Limit来限制,不过要对应实际用户


 大乌云 回复于:2004-02-02 13:50:38

加磁盘配合限制,客户端输入用户密码之后就显示
Connection closed by remote host.

去掉ftpquotalimits表中的记录就能够正常登录了;

服务端的信息如下:
vhost (10.10.18.20[10.10.18.20]) - USER
vhost (10.10.18.20[10.10.18.20]) - USER test: Login successful.
vhost (10.10.18.20[10.10.18.20]) - Preparing to chroot() the environment, path = '/home/129ftp'
vhost (10.10.18.20[10.10.18.20]) - Environment successfully chroot()ed.
vhost (10.10.18.20[10.10.18.20]) - in dir_check_full(): path = '/', fullpath = '/home/129ftp/'.
vhost (10.10.18.20[10.10.18.20]) - dispatching POST_CMD command 'PASS (hidden)' to mod_sql
vhost (10.10.18.20[10.10.18.20]) - dispatching POST_CMD command 'PASS (hidden)' to mod_cap
vhost (10.10.18.20[10.10.18.20]) - mod_cap/1.0: capabilities '= cap_chown,cap_net_bind_service+ep'
vhost (10.10.18.20[10.10.18.20]) - dispatching POST_CMD command 'PASS (hidden)' to mod_quotatab
vhost (10.10.18.20[10.10.18.20]) - FTP session closed.


 大乌云 回复于:2004-02-02 14:02:39

搞定了,偶把数据库用户换成root,就OK了

不过,偶是按照你的学习笔记创建的数据库用户:proftp
为什么会出现这种情况呢 ??

偶误操作 ?


 大乌云 回复于:2004-02-02 14:52:39

建立的数据库用户,是不是需要对ftpquotatallies有INSERT的权限??


 wind521 回复于:2004-02-02 22:26:07

sorry 反应比较慢

道歉


 zhangweibo 回复于:2004-02-02 22:52:12

引用:原帖由 "wind521" 发表:
sorry 反应比较慢

道歉



版主用不着道歉,呵呵 :mrgreen:


 wunix716 回复于:2004-02-03 10:41:59

proftpd支持断点续传?我在solaris下安装了proftpd,用cutftp连接,怎样设cutftp也是显示站点不支持断点续传!请教诸位,是什么原因?


 zhangweibo 回复于:2004-02-03 11:19:50

proftpd默认就支持下载断点续传,但上传就必须设置才能支持

AllowStoreRestart on #这样设置就使服务器支持断点上传续传了


 express 回复于:2004-02-09 16:23:57

支持原创。很详细的文章,谢谢。


 aileenguan 回复于:2005-11-11 11:22:04

/libexec/ld-elf.so.1: Shared object "libmysqlclient.so.12" not found, required by "proftpd"


 wolfg 回复于:2005-11-11 11:37:27

引用:原帖由 aileenguan 于 2005-11-11 11:22 发表
/libexec/ld-elf.so.1: Shared object "libmysqlclient.so.12" not found, required by "proftpd" 


没有找到mysql客户端libmysqlclient


 aileenguan 回复于:2005-11-11 16:56:31

不好意思,新人,楼主的groupadd这些命令根本不好使


 aileenguan 回复于:2005-11-11 16:57:14

group add ftpusers
useradd -d /home/kaoyan -g ftpusers -s /bin/fales kaoyan
useradd -d /home/kaoyan -g ftpusers -s /bin/fales upload
chown -R kaoyan:upload /home/kaoyan
chmod -R 775 /home/kaoyan

这些命令都没有效果 group也没有这个命令。


 wolfg 回复于:2005-11-11 17:23:00

引用:原帖由 aileenguan 于 2005-11-11 16:57 发表
group add ftpusers
useradd -d /home/kaoyan -g ftpusers -s /bin/fales kaoyan
useradd -d /home/kaoyan -g ftpusers -s /bin/fales upload
chown -R kaoyan:upload /home/kaoyan
chmod -R 775 /home/kaoya ... 



什么系统啊?
新问题的话开新帖问吧


 aileenguan 回复于:2005-11-11 17:30:07

就是这个帖子里,要增加用户组的命令啊。
这个命令不对啊。
FreeBSD 5.4


 huxc0304 回复于:2005-11-15 23:24:04

Limit限制能不能和mysql的磁盘限额一起使用啊?


 ramboo 回复于:2005-11-25 13:08:02

狂顶啊!!!!

这个真是太好了。谢谢了!!!!




原文链接:http://bbs.chinaunix.net/viewthread.php?tid=247811
转载请注明作者名及原文出处