January 21, 2004

proftpd学习笔记(二)

上次我们讲了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的其他配置

相关文章:
proftpd学习笔记(一)
proftpd学习笔记(三)
proftpd学习笔记(四)

frank发表 于January 21, 2004 01:22 PM | 回复(10) | 引用(0)
回复

我按照你的文档装了一遍,运行正常,但如果要设置quota就出现了问题,凡是设置了quota的用户就没有办法登陆到ftp服务器。
[root@exper htdocs]# ftp localhost
Connected to localhost (127.0.0.1).
220 exper.qyzx.edu.sh.cn FTP server ready
Name (localhost:root): ml
331 Password required for ml.
Password:
421 Service not available, remote server has closed connection
Login failed.
No control connection for command: No such file or directory

在/var/log/quota中为
May 11 16:19:50 mod_quotatab/1.2.11[7407]: creating new tally entry to match limit entry
May 11 16:43:08 mod_quotatab/1.2.11[7422]: found limit entry for user 'ml'
May 11 16:43:08 mod_quotatab/1.2.11[7422]: creating new tally entry to match limit entry
这是为什么啊?应该怎么做才能解决?

Posted by: heaven at May 17, 2004 04:26 PM

你好,我的ftp只是普通应用而已,没有添加mysql,quota的。

我只是普通编译而已,就是

./configure --prefix=/usr/local/proftpd
make
make install

这一步也按照你的笔记做了,
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 修改了这句为chown -R kaoyan:ftpusers /home/kaoyan
chmod -R 775 /home/kaoyan

也给这两个用户添加了用户密码了的。

启动ftp后就提示下面的错误,请张老师看看。

已连接到 192.168.2.2 -> IP=192.168.2.2 PORT=21
220 shantou0754 FTP server ready
USER shantou0754
331 Anonymous login ok, send your complete email address as your password.
PASS (hidden)
530-Unable to set anonymous privileges.
530 Login incorrect.
连接失败
正在延迟 120 秒,在重新连接尝试第 1 次之前

Posted by: Vincent at May 16, 2004 12:07 AM

你好,按照你的笔记装了proftpd后,再根据自己的情况修改了用户名,添加了root可以登陆,启动ftp后就什么都登陆不了的。提示的都是530错误的。

Posted by: Vincent at May 15, 2004 11:58 PM

如果你不用mysql验证的话,可以在编译的时候不加mysql的参数,你的错误提示明显是你用了mysql的验证方式,按理在这篇文章没设置mysql验证,那是后来文章介绍.我劝你删除重新编译,能不加mysql参数尽量不加,排除这方面的错误,如果实在要用,那就好好检查一下你的配置文件,我怀疑你编译前没使ld.so.confN文件生效,导致mysql参数编译无效,进而验证失败.

Posted by: frank at March 29, 2004 07:36 PM

只要把用户回到anonymous中就可以登录,不知为何?

Posted by: xujj at March 29, 2004 01:54 PM

这是日志和错误提示,先谢了
Mar 29 13:52:03 xujj proftpd[1834]: xujj.luck.com (192.168.50.6[192.168.50.6]) - mod_sql/4.10: error: no SQLAuthTypes configured Mar 29 13:52:03 xujj proftpd[1834]: xujj.luck.com (192.168.50.6[192.168.50.6]) - FTP session opened. Mar 29 13:52:08 xujj proftpd[1834]: xujj.luck.com (192.168.50.6[192.168.50.6]) - PAM(upload): Authentication failure. Mar 29 13:52:44 xujj proftpd[1834]: xujj.luck.com (192.168.50.6[192.168.50.6]) - FTP session closed

Name (192.168.50.6:root): upload
331 Password required for upload.
Password:
530 Login incorrect.
Login failed.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

Posted by: xujj at March 29, 2004 01:53 PM

提示什么?

Posted by: frank at March 28, 2004 10:34 PM

不好意思,又来麻烦您了。
已经安装完了,匿名也可以正常登录。可以系统用户不能登录。加在

...

就可以,请教版主可能哪里出了问题?

Posted by: xujj at March 28, 2004 09:21 PM

TransferRate RETR 50 user kaoyan
这个怎么没有用。
我的proftpd是v1.29

Posted by: 陈亚强 at February 16, 2004 10:23 PM

你好,这行是不是有问题,应该是chown -R kaoya:ftpusers吧?


chown -R kaoyan:upload /home/kaoyan

Posted by: kuliu at February 16, 2004 01:03 PM
发表回复









记住我的信息?