如何在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