热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

安装ProFTPd并配置Quota和MySQL数据库虚拟用户

vsftpd小巧配置较简单,但是中文支持不好,决定安装proftpd服务器,网上的教程不全,很多都是从源码中安装,并且按照这些教程一路下来根本不行,google了很久,不断的尝试,终于解决了,fedora使用yum安装proftpd,并使用mysql数据库虚拟用户的ftp服务器。教

vsftpd小巧配置较简单,但是中文支持不好,决定安装proftpd服务器,网上的教程不全,很多都是从源码中安装,并且按照这些教程一路下来根本不行,google了很久,不断的尝试,终于解决了,fedora使用yum安装proftpd,并使用mysql数据库虚拟用户的ftp服务器。教程如下:

1.安装必备软件proftpdhttpdmysqlmysql-serverphpmyadmin

[root@localhost ~]# yum install proftpd proftpd-mysql httpd mysql mysql-server phpmyadmin

2.启动mysqlhttpd

[root@localhost ~]/etc/init.d/httpd start

[root@localhost ~]/etc/init.d/mysqld start

3.设置mysql初始root密码。

[root@localhost ~]# mysql -uroot -p
Enter password: 注:在这里请您输入MySQL的管理密码;

修改root密码,用于登录phpmyadmin

4.修改SElinux有关ftp的设置

运行命令

[root@localhost ~]# getsebool -a |grep ftp

allow_ftpd_anon_write --> off

allow_ftpd_full_access --> off

allow_ftpd_use_cifs --> off

allow_ftpd_use_nfs --> off

ftp_home_dir --> off

ftpd_connect_db --> off

httpd_enable_ftp_server --> off

sftpd_anon_write --> off

sftpd_enable_homedirs --> off

sftpd_full_access --> off

sftpd_write_ssh_home --> off

tftp_anon_write --> off

要将红色部分设置为on

修改ftp目录的用户和组设置比如我的ftp主目录设为/home/www/html

[root@localhost ~]# setsebool -P ftp_home_dir=1

[root@localhost ~]#setsebool -P allow_ftpd_full_access=1

[root@localhost ~]#setsebool -P ftpd_connect_db=1

[root@localhost ~]#setsebool -P allow_ftpd_anon_write=1

[root@localhost ~]#chown -R nobody:nobody /home/www/html

因为在配置表中用户和组都使用nobody,所以ftp默认文件夹要设为nobody用户和组的权限。

[root@localhost ~]#chmod 777 /home/www/html

[root@localhost ~]#chcon -R -t public_content_rw_t /home/www/html

查看属性

[root@localhost ~]# ls -Z /home/www/html

drwxrwxrwx. nobody nobody unconfined_u:object_r:httpd_sys_content_t:s0 lisi

drwxrwxrwx. nobody nobody unconfined_u:object_r:httpd_sys_content_t:s0 zhang san

5.设置防火墙,打开21端口。

找到防火墙,点击,出现,

 

ftp选项选中,保存退出即可。

proftpd -nd6

调试proftpd

proftpd -t

netstat -an 查看网络端口开放情况

netstat -an |grep 21 查看21端口开放情况

查看21端口开放情况

6.修改pam设置

yum安装的proftpd其中的pam设置文件/etc/pam.d/proftpd,设置有误,需要重新设置,配置如下:

[root@localhost ~]vim /etc/pam.d/proftpd

#%PAM-1.0

auth required /lib64/security/pam_listfile.so item=user sense=deny file=/etc/ftpusers Onerr=succeed

auth required /lib64/security/pam_pwdb.so shadow nullok

account required /lib64/security/pam_pwdb.so

session required /lib64/security/pam_pwdb.so

#session optional pam_keyinit.so force revoke

#auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers Onerr=succeed

#auth required pam_shells.so

#auth include password-auth

#account include password-auth

#session required pam_loginuid.so

#session include password-auth

蓝色的为需要添加的部分,红色部分为原来自带的。

7.建立mysql数据库

[root@localhost ~]mysql>create database proftpd;
mysql>Grant
select,insert,update,delete,create,drop,index,alter,create temporary
tables,lock tables on proftpd.* to proftpd@localhost Identified by
"123456";
mysql>quit

说明:
create database proftpd; 这行是创建名为proftpd的数据库;
Grant 这行是为proftpd 数据库授权,让用户名为proftpd,密码为123456(这只是一个例子,密码自己定义),这个用来管理proftpd这个数据库;
quit 这行是退出mysql界面;

导入proftpd数据库;
下面是一个现成的数据库,你只需要导入就行了,比较简单;把下面的代码拷贝下来,然后另存为 proftpd.sql;然后通过下面的命令来导入;

[root@localhost ~]# mysql -uproftpd -p proftpd 

下面是proftpd的数据库,您可以拷贝下来,另存为 proftpd.sql ,然后用上面的命令来导入;

-- 数据库: `proftpd`
--
-- --------------------------------------------------------
--
-- 表的结构 `ftpgroups`
-- 
CREATE TABLE `ftpgroups` (
  `groupname` varchar(30) NOT NULL default '',
  `gid` int(11) NOT NULL default '65533',
  `members` varchar(255) NOT NULL default ''
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- 表的结构 `ftpusers`
-- 
CREATE TABLE `ftpusers` (
  `userid` varchar(30) NOT NULL default '',
  `passwd` varchar(80) NOT NULL default '',
  `uid` int(10) unsigned NOT NULL default '999',
  `gid` int(10) unsigned NOT NULL default '999',
  `homedir` varchar(255) NOT NULL default '',
  `shell` varchar(255) NOT NULL default '/sbin/nologin',
  `count` int(10) unsigned NOT NULL default '0',
  `host` varchar(30) NOT NULL default '',
  `lastlogin` varchar(30) NOT NULL default '',
  UNIQUE KEY `userid` (`userid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--
-- 导出表中的数据 `ftpusers`
-- 
INSERT INTO `ftpusers` VALUES ('test', 'test', 999, 999, '/home/www/html/test', '/sbin/nologin',0,'','');
-- --------------------------------------------------------
--
-- 表的结构 `quotalimits`
-- 
CREATE TABLE `quotalimits` (
  `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'
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- 表的结构 `quotatallies`
-- 
CREATE TABLE `quotatallies` (
  `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'
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

8.ProFTPD的配置文件proftpd.conf

首先备份proftpd.conf配置文件,再进行修改。

[root@localhost etc]# mv proftpd.conf proftpd.conf.bak

使用下面的配置。

[root@localhost ~]cat /etc/proftpd.conf

ServerName "My Proftpd FTP SERVER"

ServerType standalone

ServerIdent off

DefaultServer on

UseReverseDNS off

IdentLookups off

CommandBufferSize 128

#最大命令长度,防止缓冲区溢出的攻击

Port 21

Umask 022

PassivePorts 60000 60030

DirFakeUser on FTP

DirFakeGroup on FTP

AllowForeignAddress off

MaxInstances 30

User nobody

Group nobody

MaxLoginAttempts 3

MaxClients 100

MaxClientsPerHost 5

UseReverseDNS off

AllowOverwrite on

AuthPAM on

AuthPAMConfig proftpd

#AuthOrder mod_auth_pam.c* mod_auth_file.c

LoadModule mod_sql.c

LoadModule mod_sql_mysql.c

#很多教程中缺少上面两行,导致无法使用mysql数据库。

RequireValidShell off

#sql认证部分#

DefaultRoot ~

#用户被限制在自己的主目录中

SQLAuthenticate users*

#只认证user,不认证组

SQLAuthTypes Plaintext

#数据库密码类型,使用明文。

#SQLConnectInfo [ connection-info] [ [username]] [ [password]] [ [policy]]

#这里的用户名用mysql的root登录帐号,不然无法连接数据库,很纳闷在phpmyadmin中创建新用户无论权限怎么设置,都无法连接,只要换成root就能连接。

SQLConnectInfo proftpd@localhost:3306 root mysqld

SQLMinUserGid 999

SQLMinUserUid 999

SQLDefaultGID 65533

SQLDefaultUiD 65533

#SQLUserInfo [ user-table user-name passwd uid gid home-dir shell]

#这是SQLUserInfo的使用说明,数据库中数据表必须配置正确。

SQLUserInfo ftpusers userid passwd uid gid homedir shell

CreateHome on

MaxClientsPerHost 3 "Nicht mehr als %m Verbindungen"

MaxClients 5 "Leider sind schon %m Clients"

AllowStoreRestart on

AllowRetrieveRestart on

LogFormat auth "%h %a %t \"%r\" %s"

#日志的格式

LogFormat xfer "%h %u %t \"%r\" %s %b"

LogFormat write "%h %a %t \"%r\" %s %b"

ExtendedLog /var/log/proftpd/auth.log auth auth

#登录日志

ExtendedLog /var/log/proftpd/download.log read xfer

#下载日志

ExtendedLog /var/log/proftpd/upload.log write write

#写操作日志,包括上传,删除,创建目录等。

 

SyslogLevel emerg

SystemLog /var/log/proftpd/proftpd.system.log

TransferLog /var/log/proftpd/proftpd.xferlog

#下面是用户登录统计,更新数据库信息,如:登录时间,次数,主机等。

# Update count every time user logs in

SQLLogFile /var/log/proftpd/proftpd.sql.log

SQLNamedQuery getcount SELECT "count from ftpuserswhere userid='%u'"

SQLNamedQuery getlastlogin SELECT "lastlogin from ftpuserswhere userid='%u'"

SQLNamedQuery updatelogininfo UPDATE "count=count+1,host='%h',lastlogin=current_timestamp() WHERE userid='%u'" ftpusers

SQLShowInfo PASS "230" "You've logged on %{getcount} times, last login at %{getlastlogin}"

SQLLog PASS updatelogininfo

#-------- load sql.mod for mysql authoritative --------#

#-------- load qudes.mod for Quota limit --------#

#打开磁盘限额引擎

QuotaEngine on

# 设置磁盘限额

QuotaDirectoryTally on

# 设置磁盘容量显示时的单位

QuotaDisplayUnits Mb

# 允许显示磁盘限额信息,ftp登录后可执行quote site quota命令查看当前磁盘使用情况

QuotaShowQuotas on

# 设置磁盘限额日志文件

QuotaLog "/var/log/proftpd.quota.log"

# 指定磁盘限额模块使用的数据库信息

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 quotalimitsWHERE 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 FROMquotatalliesWHERE name = '%{0}' AND quota_type = '%{1}'"

#注:红色部分-quotalimits和quotaallies为你的数据库中对用户的限制表名称,一定要正确切记!

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

#--------- load qudes.mod for Quota limit --------#

配置完后应该测试一下,使用命令:

[root@localhost ~]proftpd -n -d9

如果有错误,就不能继续,出现错误提示,这时将要修改proftpd.conf

查看proftpd进程

[root@localhost ~]/etc/init.d/proftpd start

启动proftpd

[root@localhost ~]/etc/init.d/proftpd stop

停止proftpd

[root@localhost ~]/etc/init.d/proftpd restart

重启proftpd

查看proftpd进程

[root@localhost ~]pgrep proftpd

如果没有反馈则未运行成功。

proftpd四个可能用到的配置

UseUTF8 Off
DefaultTransferMode bin
ary

解决中文目录名乱码问题
UseReverseDNS off
IdentLookups off

解决proftpd登录慢的问题

该过程在本人机器上通过。

文章难免有疏漏,不当之处请酌情处理。

祝使用愉快!!!

作者邮箱:easyboot(at)126.com


推荐阅读
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • 本周信息安全小组主要进行了CTF竞赛相关技能的学习,包括HTML和CSS的基础知识、逆向工程的初步探索以及整数溢出漏洞的学习。此外,还掌握了Linux命令行操作及互联网工作原理的基本概念。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • CSS 布局:液态三栏混合宽度布局
    本文介绍了如何使用 CSS 实现液态的三栏布局,其中各栏具有不同的宽度设置。通过调整容器和内容区域的属性,可以实现灵活且响应式的网页设计。 ... [详细]
  • This guide provides a comprehensive step-by-step approach to successfully installing the MongoDB PHP driver on XAMPP for macOS, ensuring a smooth and efficient setup process. ... [详细]
author-avatar
mobiledu2502927267
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有