热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

配置proftpd-admin管理proftpd服务器

零.环境介绍系统:CentOS5.764bit原有环境:LNMP.orgv0.7proftpd版本:1.3.4aweb管理:proftpd-admin1.2一.ProFTPd的安装1.下载proftpd源码包并解压:http://proftpd.org/tarzxfproftpd-1.3.4a.tar.gzcdprof
零. 环境介绍
系统: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认证,足够满足当前需求。

推荐阅读
  • Python项目实战10.2:MySQL读写分离性能优化
    本文介绍了在Python项目实战中进行MySQL读写分离的性能优化,包括主从同步的配置和Django实现,以及在两台centos 7系统上安装和配置MySQL的步骤。同时还介绍了创建从数据库的用户和权限的方法。摘要长度为176字。 ... [详细]
  • 本文介绍了在MacOS系统上安装MySQL的步骤,并详细说明了如何设置MySQL服务的开机启动和如何修改MySQL的密码。通过下载MySQL的macos版本并按照提示一步一步安装,在系统偏好设置中可以找到MySQL的图标进行设置。同时,还介绍了通过终端命令来修改MySQL的密码的具体操作步骤。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • MyBatis错题分析解析及注意事项
    本文对MyBatis的错题进行了分析和解析,同时介绍了使用MyBatis时需要注意的一些事项,如resultMap的使用、SqlSession和SqlSessionFactory的获取方式、动态SQL中的else元素和when元素的使用、resource属性和url属性的配置方式、typeAliases的使用方法等。同时还指出了在属性名与查询字段名不一致时需要使用resultMap进行结果映射,而不能使用resultType。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文介绍了通过mysql命令查看mysql的安装路径的方法,提供了相应的sql语句,并希望对读者有参考价值。 ... [详细]
  • mysql-cluster集群sql节点高可用keepalived的故障处理过程
    本文描述了mysql-cluster集群sql节点高可用keepalived的故障处理过程,包括故障发生时间、故障描述、故障分析等内容。根据keepalived的日志分析,发现bogus VRRP packet received on eth0 !!!等错误信息,进而导致vip地址失效,使得mysql-cluster的api无法访问。针对这个问题,本文提供了相应的解决方案。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  • 本文讨论了在shiro java配置中加入Shiro listener后启动失败的问题。作者引入了一系列jar包,并在web.xml中配置了相关内容,但启动后却无法正常运行。文章提供了具体引入的jar包和web.xml的配置内容,并指出可能的错误原因。该问题可能与jar包版本不兼容、web.xml配置错误等有关。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • Apache Shiro 身份验证绕过漏洞 (CVE202011989) 详细解析及防范措施
    本文详细解析了Apache Shiro 身份验证绕过漏洞 (CVE202011989) 的原理和影响,并提供了相应的防范措施。Apache Shiro 是一个强大且易用的Java安全框架,常用于执行身份验证、授权、密码和会话管理。在Apache Shiro 1.5.3之前的版本中,与Spring控制器一起使用时,存在特制请求可能导致身份验证绕过的漏洞。本文还介绍了该漏洞的具体细节,并给出了防范该漏洞的建议措施。 ... [详细]
author-avatar
手机用户2502889731
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有