使用代理用户和组映射进行 MySQL 密码验证

使用代理用户和组映射进行 MySQL 密码验证

我实际上在这里使用的是 MariaDB,但我以 MariaDB 是 MySQL 的“替代品”为借口。如果这最终成为跨平台差异/问题,我不会感到惊讶,但我希望你能看一看。

情况是这样的:我使用 CentrifyDC 进行 Active Directory 域的 PAM 身份验证。它对 SSH/sudoer 访问运行良好,现在我正尝试为 MySQL... 呃,MariaDB 制定 authN/Z。

用户身份验证似乎运行良好。我创建了一个用户,它按预期运行:

MariaDB [(none)]> grant all privileges on *.* to myuser identified via pam;

为了完整起见,我将登录并检查我的授权和我的身份:

MariaDB [(none)]> show grants;
+---------------------------------------------------------------+
| Grants for myuser@%                                            |
+---------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED VIA pam |
+---------------------------------------------------------------+
1 row in set (0.00 sec)

MariaDB [(none)]> SELECT USER(), CURRENT_USER(), @@proxy_user;
+-----------------+----------------+--------------+
| USER()          | CURRENT_USER() | @@proxy_user |
+-----------------+----------------+--------------+
| myuser@localhost | myuser@%        | NULL         |
+-----------------+----------------+--------------+
1 row in set (0.00 sec)

在我不太专业的眼里这看起来是正确的。

现在我尝试遵循 MySQL 文档http://dev.mysql.com/doc/refman/5.5/en/pam-authentication-plugin.html,标题为“6.3.6.2.2.3. 使用代理用户和组映射进行 Unix 密码身份验证”。这很可能是我的问题:遵循 MariaDB 的 MySQL 文档 - 但我找不到 MariaDB 等效文档。以下是发生的情况。

根据文档,我创建了代理用户、组等...请注意,“myuser”是组“my-domain-group”的成员。

CREATE USER ''@'' IDENTIFIED WITH pam as 'mysql, my-doman-group=admin';
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'really weird password';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost';
GRANT PROXY ON 'admin'@'localhost' to ''@'';

以“myuser”身份登录有效。让我们检查一下我们的授权:

MariaDB [(none)]> SHOW GRANTS;
+------------------------------------------------------------------------------------------+
| Grants for @                                                                             |
+------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO ''@'' IDENTIFIED VIA pam USING 'mysql, my-doman-group=admin' |
| GRANT PROXY ON 'admin'@'localhost' TO ''@''                                              |
+------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

这就是我期望看到的。现在,根据文档,让我们检查一下我们被代理了:

MariaDB [(none)]> SELECT USER(), CURRENT_USER(), @@proxy_user;
+-----------------+----------------+--------------+
| USER()          | CURRENT_USER() | @@proxy_user |
+-----------------+----------------+--------------+
| myuser@localhost | @              | NULL         |
+-----------------+----------------+--------------+
1 row in set (0.00 sec)

所以 - 就是这样。'myuser' 帐户没有像它应该的那样从 'my-domain-group' 获得访问权限,但它被允许登录。发生了什么?有什么建议吗?

答案1

截至回答此问题时,它在引用的 mysql 文档页面的顶部声明:

PAM 身份验证插件是一个商业扩展

这意味着它可用于 mySQL Enterprise,这是 Oracle 专有的 mySQL 代码库分支。MariaDB 或社区版 mySQL 中不存在任何 Enterprise 功能,除非它们由 Oracle 以外的人从头重写。

看起来 MariaDB 有一个用于此的插件,文档位于:

https://kb.askmonty.org/en/pam-authentication-plugin

我没有看到关于组映射的提及,它可能没有在 GPLed 源代码中实现。

相关内容