在创建 MySQL DB 账户的同时创建 Linux 账户

在创建 MySQL DB 账户的同时创建 Linux 账户

我问这个问题大约六个月前,我认为我可能会在这里得到更好的回应。

我有一个几乎完全用 javascript(HTML canvas)编写的网站,以及一个通过 PHP 管理的 MySQL 数据库。在服务器端,我执行的脚本以用户身份执行www-data。现在假设我想创建一个新的 Linux 帐户,并将用户的名称/密码添加到数据库。我该如何自动执行此操作?

我想要的实际功能还包括为用户创建组、为主文件夹创建框架目录以及对其主文件夹和子文件夹具有读/写访问权限。实际上,我需要以 root 身份执行某些命令,但显然我无法从键盘输入这些命令。

我的一个想法是设置一个/home/www-data/.ssh/文件夹,使用无密钥 ssh 登录到 root,但我担心这会赋予太多权力。


疯了指出这是这个问题所以我正在改进我最初的问题。

在我的网站上,每个用户都可以创建自己的脚本并执行它们。我创建了一个复杂的库,可以动态加载 javascript 脚本并执行它们,几乎总是重新绘制 HTML Canvas 元素。除此之外,他们还可以创建 PHP 脚本。

因为用户可以创建自己的 PHP 脚本,所以我不能仅仅将创建新用户的 root 访问权限交给 www-data(通过编辑文件/etc/sudoers)。我想要的是一种在用户注册时执行以下命令/PHP 脚本的方法(因此以用户身份连接www-data

shell_exec("sudo useradd J.C.Denton");

但要避免出现这样的情况:随后用户编写 PHP 脚本来使用上述 PHP 文件开始创建自己的用户。

我的理想情况是,不仅能够以 PHP 会话的形式登录用户,并允许他访问他/她有权访问的 SQL 数据库元素,而且实际上还可以将他登录到 Apache 服务器,在本例中,J.C.Denton

答案1

您是否考虑过使用类似pam_mysql或的东西pam_ldap并将用户帐户信息放入数据库?这样,您可以将系统帐户(本地/etc/passwd)与用户帐户分开,从而提高灵活性和安全性。管理用户将通过 MySQL 进行,无需 root 访问权限。

pam_mkhomedir然后会在第一次登录时创建主目录(和所需的骨架文件)。

感谢 PAM,我能想到的大多数服务(shell 访问、电子邮件、[s]ftp、www……)都可以使用pam_mysqlpam_ldap透明地使用,您的最终用户不会以任何方式注意到这一点。

答案2

您无法“实际以 JCDenton 的身份登录到 Apache 服务器”,因为除非您在应用程序中实现相关构造,否则该功能将不存在。虽然您可以使用 HTTP 身份验证 - 但这并不提供安全模型所需的所有其他部分。

你正在尝试处理 3 种不同的安全模型

  • 文件系统访问的 unix 用户安全性
  • mysql 数据访问安全
  • Web 应用程序内的应用程序安全性

是的,合理化这些潜在冲突的模型应该在您的设计优先级中名列前茅 - 但您真的应该以 Unix 权限模型为基础吗?有扩展工具使用 PHP 将其引入应用程序域 - 但这不是唯一的解决方案。

暂时不考虑这一点,在 Unix/Linux/POSIX 系统上从命令行创建用户很简单 - 但有一些注意事项。同样,你也可以使用 SQL 创建 mysql 用户。但请注意我所知道的 pam_mysql 模块不是使用 MySQL 的身份验证和用户管理功能 - 但仅仅提供身份验证数据的存储库。

将所有这些捆绑到单个 shell 或 php 脚本中很简单。唯一需要注意的是,如果您想从 root 拥有的 shell 以外的其他程序调用它,那么您仍应使其仅可由 root 读取/执行,但配置 sudo 以允许它运行,例如从 Web 服务器运行。

因此,为了使您的模型发挥作用,您需要更详细地规划如何构建 Unix 权限并使用 suPHP。

相关内容