我实际上在这里使用的是 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 源代码中实现。