如何在Ubuntu12.10上使用MySQL后端设置ProFTPD
介绍
本文将指导您在 Ubuntu 上彻底设置 ProFTPD,并为用户和组提供 MySQL 后端。
警告:FTP 本质上是不安全的! 考虑 将 ProFTPd 配置为使用 SFTP,这是在 SSH 下实现的 FTP 的安全替代方案。
Prerequisite
本教程假定您已经安装并配置了 MySQL 和 phpMyAdmin。
如果您还没有,您可以按照 如何在 Ubuntu 12.04 上安装和保护 phpMyAdmin。
安装带有 MySQL 支持的 ProFTPD
sudo apt-get install proftpd-basic proftpd-mod-mysql
这将安装所有必需的软件包。 如果安装询问,请选择独立模式。
配置数据库
转到您的 phpMyAdmin 安装并登录。
选择“权限”选项卡,然后单击“添加用户”。
现在您需要选择所需的用户名,我建议使用“ftpd”(不带引号)并为用户生成密码。 存储该信息,我们稍后将需要它。
在“用户的数据库”部分中,选择“创建具有相同名称的数据库并授予所有权限”。
这将创建 ProFTPD 可以使用的用户和数据库。 现在我们需要用一些表填充数据库。 在左侧,您现在应该会看到一个新数据库(与用户同名,在我们的例子中为“ftpd”)- 单击它。
现在单击 SQL 选项卡,粘贴以下内容并单击“Go”:
CREATE TABLE IF NOT EXISTS `ftpgroup` ( `groupname` varchar(16) COLLATE utf8_general_ci NOT NULL, `gid` smallint(6) NOT NULL DEFAULT '5500', `members` varchar(16) COLLATE utf8_general_ci NOT NULL, KEY `groupname` (`groupname`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='ProFTP group table'; CREATE TABLE IF NOT EXISTS `ftpuser` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `userid` varchar(32) COLLATE utf8_general_ci NOT NULL DEFAULT '', `passwd` varchar(32) COLLATE utf8_general_ci NOT NULL DEFAULT '', `uid` smallint(6) NOT NULL DEFAULT '5500', `gid` smallint(6) NOT NULL DEFAULT '5500', `homedir` varchar(255) COLLATE utf8_general_ci NOT NULL DEFAULT '', `shell` varchar(16) COLLATE utf8_general_ci NOT NULL DEFAULT '/sbin/nologin', `count` int(11) NOT NULL DEFAULT '0', `accessed` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', PRIMARY KEY (`id`), UNIQUE KEY `userid` (`userid`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='ProFTP user table';
这将创建我们需要的表。
创建您的用户
单击左栏中的“ftpuser”表,然后单击“插入”选项卡。
这允许您插入用户。 填充用户 ID(这是用户将登录到 FTP 的用户名)和 homedir(FTP 用户 home - 应该存在于系统上)。
passwd 字段中的密码应加密,为此您可以使用此代码段(在您的服务器外壳上)生成可以粘贴到 passwd 字段中的密码字符串:
/bin/echo "{md5}"`/bin/echo -n "password" | openssl dgst -binary -md5 | openssl enc -base64`
当然,将“密码”替换为您/用户所需的密码。
在这里,您可以看到其他一些不言自明且通常稍后使用的字段(登录计数、上次登录...)。
在那里,你有正确的数据库,现在我们只需要配置 ProFTPD 来使用它。
配置 ProFTPD
首先编辑 ProFTPD 配置文件:
sudo nano /etc/proftpd/proftpd.conf
将 ServerName 指令更改为您想要的服务器名称。
如果您希望将用户监禁到他们的主目录(以便他们只能看到他们的主目录),请添加:
DefaultRoot ~
要添加 SQL 配置并关闭 shell 验证,请在配置底部添加:
Include /etc/proftpd/sql.conf RequireValidShell off
现在编辑 sql 配置文件:
sudo nano /etc/proftpd/sql.conf
所以它看起来像这样(我建议你现在删除文件中的所有内容):
SQLBackend mysql #Passwords in MySQL are encrypted using CRYPT SQLAuthTypes OpenSSL Crypt SQLAuthenticate users groups # used to connect to the database # databasename@host database_user user_password SQLConnectInfo mysql_database@localhost mysql_user mysql_password # Here we tell ProFTPd the names of the database columns in the "usertable" # we want it to interact with. Match the names with those in the db SQLUserInfo ftpuser userid passwd uid gid homedir shell # Here we tell ProFTPd the names of the database columns in the "grouptable" # we want it to interact with. Again the names match with those in the db SQLGroupInfo ftpgroup groupname gid members # set min UID and GID - otherwise these are 999 each SQLMinID 500 # Update count every time user logs in SQLLog PASS updatecount SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" ftpuser # Update modified everytime user uploads or deletes a file SQLLog STOR,DELE modified SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser SqlLogFile /var/log/proftpd/sql.log
当然,您需要将“mysql_database”、“mysql_user”和“mysql_password”替换为您在本教程前面选择/生成的正确值。 如果您遵循建议的命名约定,则该行应如下所示:
SQLConnectInfo ftpd@localhost ftpd password
要在 ProFTPD 编辑中启用 MySQL 模块:
sudo nano /etc/proftpd/modules.conf
并取消注释(或简单地添加)这两行:
LoadModule mod_sql.c LoadModule mod_sql_mysql.c
现在我们需要重启 ProFTPD:
sudo service proftpd restart
测试一下
现在,您可以使用您最喜欢的 FTP 客户端(例如 FileZilla)与您之前添加的示例用户连接到服务器。
常见问题
- 用户无法登录 - 始终检查您是否正确粘贴了生成的用户密码行
- 用户无法写入主目录 - 您应该在主目录上设置正确的权限:
故障排除
您可以查看 ProFTPD 本身的日志文件:
tail -f /var/log/proftpd/proftpd.log
ProFTPD 的 SQL 部分:
tail -f /var/log/proftpd/sql.log