现在(2020.02.26)CentOS Linux 8下通过dnf安装的Pure-ftpd默认版本是1.0.49。
这个版本的Pure-ftpd在使用MySQL认证方式的时候,有个“mysql.sock”相关的bug,如果设置不好,会出现无法使用的情况。
第一步:将MySQL的配置文件/etc/my.cnf:
vi /etc/my.cnf
相关的“mysql.sock”设置如下:
socket = /tmp/mysql.sock
第二步:将Pure-ftpd的配置文件/etc/pure-ftpd/pureftpd-mysql.conf:
vi /etc/pure-ftpd/pureftpd-mysql.conf
相关内容设置如下:
MYSQLSocket /tmp/mysql.sock
第三步:开启MySQL和Pure-ftpd服务:
systemctl start mysqld
systemctl start pure-ftpd
第四步:跟踪日志,并开启ftp访问:
跟踪日志:
tail -f /var/log/messages
使用熟悉的任何一个ftp客户端,连接Pure-ftpd的ftp服务,连接一定会失败,日志那边会出现类似以下内容:
[ERROR] The SQL server seems to be down [Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)]
Pure-ftpd根本就没有使用咱们配置的“mysql.sock”,它自己使用默认的“mysql.sock”来连接MySQL,想要处理只能通过修改它的源代码解决。为了迅速的部署,咱们就将MySQL的“mysql.sock”改为这个位置来提供服务。
vi /etc/my.cnf
相关的“mysql.sock”设置如下:
socket = /var/lib/mysql/mysql.sock
第二步:将Pure-ftpd的配置文件/etc/pure-ftpd/pureftpd-mysql.conf:
vi /etc/pure-ftpd/pureftpd-mysql.conf
相关内容设置如下:
MYSQLSocket /var/lib/mysql/mysql.sock
重启 一下MySQL和Pure-ftpd服务:
systemctl restart mysqld
systemctl restart pure-ftpd
MySQL的安装请参考Tristone微博的相关文章,并将MySQL的“mysql.sock”修改为“/var/lib/mysql/mysql.sock”。
Pure-FTPd安装
dnf -y install pure-ftpd
FTP配置文件pure-ftpd.conf
vi /etc/pure-ftpd/pure-ftpd.conf
对应位置做修改如下:
Bind *,2221
MinUID 80
NoAnonymous yes
MySQLConfigFile /etc/pure-ftpd/pureftpd-mysql.conf
LimitRecursion 20000000 80
MaxClientsNumber 500
VerboseLog yes
LogPID yes
NoChmod yes
NoRename yes
ProhibitDotFilesRead yes
PassivePortRange 30000 50000 #被动模式端口,防火墙要同步开启
Pure-FTPd的MySQL配置文件:
vi /etc/pure-ftpd/pureftpd-mysql.conf
对应位置做修改如下:
MYSQLServer localhost
MYSQLPort 3306
MYSQLSocket /var/lib/mysql/mysql.sock
MYSQLUser pureftpd
MYSQLPassword pureftpd
MYSQLCrypt md5
MYSQLDefaultUID 80
MYSQLDefaultGID 80
用你熟悉的方法在MySQL里面进行以下操作:
----新建数据库pureftpd
----创建pureftpd用户,主机名为:localhost
----设置用户pureftpd的密码为pureftpd
执行以下SQL,创建users表,并插入一条数据:
CREATE TABLE `pureftpd`.`users` (
`id` int(32) unsigned NOT NULL auto_increment,
`User` varchar(16) NOT NULL default '',
`Password` varchar(64) NOT NULL default '',
`Uid` varchar(11) NOT NULL default '-1',
`Gid` varchar(11) NOT NULL default '-1',
`Dir` varchar(128) NOT NULL default '',
`QuotaSize` smallint(5) NOT NULL default '0',
`QuotaFiles` int(11) NOT NULL default '0',
`ULBandwidth` smallint(5) NOT NULL default '0',
`DLBandwidth` smallint(5) NOT NULL default '0',
`ULRatio` smallint(6) NOT NULL default '0',
`DLRatio` smallint(6) NOT NULL default '0',
`comment` tinytext NOT NULL,
`ipaccess` varchar(15) NOT NULL default '*',
`status` enum('0','1') NOT NULL default '0',
`create_date` datetime NOT NULL default '1970-01-01 00:00:00',
`modify_date` datetime NOT NULL default '1970-01-01 00:00:00',
PRIMARY KEY (`id`,`User`),
UNIQUE KEY `User` (`User`)
) ENGINE=MyISAM ;
GRANT ALL PRIVILEGES ON `pureftpd`.* TO 'pureftpd'@'localhost';
flush privileges;
INSERT INTO `pureftpd`.`users` VALUES (1, 'upload', md5('123456'), '80', '80', '/wwwroot', 0, 0, 0, 0, 0, 0, '', '*', '1', '2016-09-28 13:41:33', '2016-09-28 13:41:33');
这样ftp用户名就是:upload,密码:123456,服务器的目录是:/wwwroot,使用的CentOS用户是www(用户ID和组ID都是80)。
将pureftpd负责的目录权限设置一下:
chown -R www:www /wwwroot
PS:Pure-ftpd日志默认存储在:/var/log/messages
启动服务:
systemctl start pure-ftpd
随服务器启动:
systemctl enable pure-ftpd