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


推荐阅读
  • 实现Win10与Linux服务器的SSH无密码登录
    本文介绍了如何在Windows 10环境下使用Git工具,通过配置SSH密钥对,实现与Linux服务器的无密码登录。主要步骤包括生成本地公钥、上传至服务器以及配置服务器端的信任关系。 ... [详细]
  • PHP中Smarty模板引擎自定义函数详解
    本文详细介绍了如何在PHP的Smarty模板引擎中自定义函数,并通过具体示例演示了这些函数的使用方法和应用场景。适合PHP后端开发者学习。 ... [详细]
  • 本文详细探讨了如何根据不同的应用场景选择合适的PHP版本,包括多版本切换技巧、稳定性分析及针对WordPress等特定平台的版本建议。 ... [详细]
  • 本文分享了作者在使用LaTeX过程中的几点心得,涵盖了从文档编辑、代码高亮、图形绘制到3D模型展示等多个方面的内容。适合希望深入了解LaTeX高级功能的用户。 ... [详细]
  • 【MySQL】frm文件解析
    官网说明:http:dev.mysql.comdocinternalsenfrm-file-format.htmlfrm是MySQL表结构定义文件,通常frm文件是不会损坏的,但是如果 ... [详细]
  • 随着Linux操作系统的广泛使用,确保用户账户及系统安全变得尤为重要。用户密码的复杂性直接关系到系统的整体安全性。本文将详细介绍如何在CentOS服务器上自定义密码规则,以增强系统的安全性。 ... [详细]
  • 在Android应用开发过程中,开发者经常遇到诸如CPU使用率过高、内存泄漏等问题。本文将介绍几种常用的命令及其应用场景,帮助开发者有效定位并解决问题。 ... [详细]
  • 本文探讨了如何使用Scrapy框架构建高效的数据采集系统,以及如何通过异步处理技术提升数据存储的效率。同时,文章还介绍了针对不同网站采用的不同采集策略。 ... [详细]
  • 解决Linux中wget无法解析主机的问题
    本文介绍了如何通过修改/etc/resolv.conf文件来解决Linux系统中wget命令无法解析主机名的问题,通过添加Google的公共DNS服务器地址作为解决方案。 ... [详细]
  • 笔记说明重学前端是程劭非(winter)【前手机淘宝前端负责人】在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系& ... [详细]
  • 解决ADODB连接Access时出现80004005错误的方法
    本文详细介绍了如何解决在使用ADODB连接Access数据库时遇到的80004005错误,包括错误原因分析和具体的解决步骤。 ... [详细]
  • 本文详细介绍如何安装和配置DedeCMS的移动端站点,包括新版本安装、老版本升级、模板适配以及必要的代码修改,以确保移动站点的正常运行。 ... [详细]
  • 探讨了在HTML表单中使用元素代替进行表单提交的方法。 ... [详细]
  • 本文详细介绍了如何在 Ubuntu 14.04 系统上搭建仅使用 CPU 的 Caffe 深度学习框架,包括环境准备、依赖安装及编译过程。 ... [详细]
  • 尽管在WPF中工作了一段时间,但在菜单控件的样式设置上遇到了一些基础问题,特别是关于如何正确配置前景色和背景色。 ... [详细]
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社区 版权所有