热门标签 | 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


推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • Ubuntu 9.04中安装谷歌Chromium浏览器及使用体验[图文]
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
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社区 版权所有