当前位置: 首页 > 工具软件 > Proftpd > 使用案例 >

myftpadmin+proftpd+mysql架设ftp服务器_配置proftpd-admin管理proftpd服务器

曹和正
2023-12-01

系统:CentOS 5.7 64bit

原有环境:LNMP.org v0.7

proftpd版本:1.3.4a

web管理:proftpd-admin 1.2

一. ProFTPd 的安装

1. 下载proftpd源码包并解压:

http://proftpd.org/

tar zxf proftpd-1.3.4a.tar.gz

cd proftpd-1.3.4a

2. 添加proftpd将使用的目录、用户和组

mkdir -p /home/ftpdir

groupadd ftpgroup -g 10001

useradd ftpuser -G ftpgroup -d /home/ftpdir

chown -R ftpuser.ftpgroup /home/ftpdir

3. 编译安装proftpd

./configure –prefix=/opt/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/ –enable-openssl

#指定安装目录,编译进的模块,mysql的lib位置

make && make install

ln -s /opt/proftpd/sbin/* /usr/sbin/

ln -s /opt/proftpd/sbin/* /usr/local/sbin/

ln -s /opt/proftpd/bin/* /usr/bin/

ln -s /opt/proftpd/bin/* /usr/local/bin/

#等同于设定环境变量加入/opt/proftpd/sbin、bin

4. 添加proftpd服务项并开机启动

cp contrib/dist/rpm/proftpd.init.d /etc/init.d/proftpd

chmod a+x /etc/init.d/proftpd

chkconfig –level 2345 on

二. Web 管理界面的安装配置

1. 下载 proftpd_admin

http://sourceforge.net/projects/proftpd-adm/files/proFTPd%20Administrator/

2. 解压,移动至web目录

tar zvxf proftpd_admin_v1.2.tar.gz

mv proftpd_admin_v1.2 /home/wwwroot/proftpd

cd /home/wwwroot/proftpd

3. 写入 proftpd_admin 的初始库信息

mysql -uroot -p

4. 配置 proftpd_admin 的 mysql 用户权限

mysql -uroot -p

mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP

ON proftpd_admin.*

TO proftpd@localhost

IDENTIFIED BY ’123456′;

5. 修改 proftpd_admin 提供的参考配置文件

mv /opt/proftpd/etc/proftpd.conf /opt/proftpd/etc/proftpd.conf.bak

cp /home/wwwroot/proftpd/misc/sample_config/proftpd_quota.conf /opt/proftpd/etc/proftpd.conf

#此配置文件是支持配额quota的

vim /opt/proftpd/etc/proftd.conf

DisplayFirstChdir 改为 DisplayChdir

User proftpd #FTP运行使用的用户

Group proftpd #FTP运行使用的用户组

SQLAuthTypes Backend 下添加:

SQLMinID 500 #建议的限制最小用户ID(为/etc/passwd中的UID)

SQLDefaultUID 666 #默认用户ID

SQLDefaultGID 666 #默认组ID

修改mysql连接信息:

SQLConnectInfo proftpd_admin@localhost proftpd 123456

6. 进入web管理界面进行后续配置

a) 更改web管理界面文件夹的用户组为web server的运行用户

chown -R www:www /home/wwwroot/proftpd

b) 启动 proftpd

service proftpd start

c) Configure *注意! 该web管理目录强烈建议设置ACL或作密码保护!

- Database 注意重新核对一下mysql的连接信息

- ProFTPd

- Sections

- Filepaths

- Extensions

如果有Quota的需要的话将Quota Enable。

三. proftpd.conf 中规则的简单应用

proftpd.conf 即主配置文件末尾可以添加类似apache的策略。

例:

#“~”:对用户的登录目录进行下列策略规定

AllowOverwrite on

HideNoAccess off

#允许覆盖、显示一切文件

AllowAll

1. 限制用户的细化权限

AllowOverwrite on

HideNoAccess on

#无权限文件/目录予以隐藏

DenyAll

#禁止删除文件、目录但允许重命名

2. 限制上传/下载文件大小

(中略)

MaxstoreFilesize 2 Gb

#限制上传文件大小

MaxretrieveFileSize 2 Gb

#限制下载文件

3. 限制上传文件类型

(中略)

PathAllowFilter \.jpg$

#限制上传允许文件类型,正则表达式

PathDenyFilter \.jpg$

#限制上传禁止文件类型,正则表达式

事实上这个规则是非常灵活的,可参阅本笔记附录和网上其他参考资料。

四. 添加删除FTP虚拟用户、组

1. 此处的用户、组mysql数据库中,并非直接操作系统的/etc/passwd、/etc/group,具有较高的自由度和安全性。

2. /home/wwwroot/proftpd/misc/user_script 下的 create_user.sh 和 delete_user.sh 脚本可以自定义添加、删除用户时的附加操作,比较灵活。

3. 修改 create_user.sh 和 delete_user.sh

create_user.sh:

在echo -e “\tE-mail:\t\t” $Email下加入:

mkdir -p $HOMEDIR

chmod 777 $HOMEDIR

delete_user.sh:

在echo -e “\tE-mail:\t\t” $Email下加入:

rm -rf $HOMEDIR

4. 实际操作简易图解

a) 添加用户

* 注意!

如果是添加单独的FTP用户,绝对不要设置FTP的根目录=用户的家目录!

为了权限、数据安全考虑,非匿名用户必须设置一个单独的目录!

b) 删除用户

删除用户之后,由于delete_user.sh的脚本的执行,/home/ftpdir/testftp 目录被直接删除了。

可见,用户的删除必须反复确认无误再行删除,以避免造成不必要的重大损失。

为了保险起见,可以考虑在delete_user.sh中编写脚本,将欲删除的文件转移到类似“回收站”的一个专用文件夹下再行删除,具体方式如下:

mkdir -p /home/ftpdir/other/recycle

#作为回收站存在。但内容需要定期清理,可设置为cron任务,每月自动清空一次。

vim /home/wwwroot/proftpd/misc/user_script/delete_user.sh

将原先的 rm -rf $HOMEDIR 改为:

mv $HOMEDIR /home/ftpdir/other/recycle/

即可。

五. 用户配额(Quota)的设置

在Extension中将Quota启用之后,Configure 会多出此配置项:

所有设置一目了然,可以根据用户组进行基于文件容量、上传下载总流量的各种限制,十分方便。

值得一提的是 limit type 中的 soft/hard 区别:

soft: 当上传完一个文件,发现限额已满时,并不会删除最后上传的文件,但再上传新文件将被阻止;

hard: 当上传完一个文件,发现限额已满时,会自动将最后上传的文件删除。

六. 附录

1. proftpd 的 log 路径,定义于主conf

TransferLog /var/log/proftpd.xferlog

ExtendedLog /var/log/proftpd.access_log WRITE,READ write

ExtendedLog /var/log/proftpd.auth_log AUTH auth

ExtendedLog /var/log/proftpd.paranoid_log ALL default

SQLLogFile /var/log/proftpd.mysql

QuotaLog /var/log/proftpd.quota

2. ProFTPd 配置文件格式模型

#全局设置

设置项目1 参数1

设置项目2 参数2

#某个目录的设置

#关于匿名用户的设置

访问策略

3. 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:是否允许登陆的权限

4. Limit 中的访问策略

AllowUser 针对某个用户允许的Limit

DenyUser 针对某个用户禁止的Limit

AllowGroup 针对某个用户组允许的Limit

DenyGroup 针对某个用户组禁止的Limit

AllowAll 针对所有用户组允许的Limit

DenyAll 针对所有用户禁止的Limit

* 注意:上述策略受系统中本目录权限制约,故建议直接将目录权限设定为777。

5. 单用户/组限速

TransferRate STOR|RETR 速度(Kbytes/s) user|group SOMENAME

6. 一个匿名+user/pass认证的配置示例

User ftp #指定用户的组和名称

Group nogroup

UserAlias anonymous ftp #使得ftp和匿名用户都能登陆

DirFakeUser on ftp

DirFakeGroup on ftp

RequireValidShell off

MaxClients 50 #该用户的最大连接数

DisplayLogin welcome.msg #显示欢迎信息,需要注意把msg文件放到登陆后的主目录

DisplayFirstChdir .message

MaxClientsPerHost 3 #限制每个主机最大连接数

#这里是对目录进行设置,即不允许写

DenyAll

#对上传目录的设置,我们有一个incoming文件夹需要允许别人上传

Umask 022 022

#不允许下载

DenyAll

#允许上传和新建目录

AllowAll

7. * 所谓“匿名”用户同样可以在mysql中生成,并在主conf中定义规则。

七. 小结

1. 与 Serv-U、GeneFTPd 等FTP Server相比,ProFTPd 历史同样足够悠久,经历了时间考验,且完全开源、免费;

2. ProFTPd 的功能十分强大,可以实现几乎所有现有需求。对于用户、目录的权限控制较具体,类apache的配置格式也易于学习和掌握;

3. proftpd_admin 的web界面统计功能比较实用,可以细化到具体用户、具体行为、流量、容量甚至系统状态等;

4. Quota 即用户配额功能与 mysql 结合很易操控,但是如使用域认证方式就并不太容易细化了。不过,就目前应用方向来说,匿名+少部分用户使用user/pass认证,足够满足当前需求。

 类似资料: