在创buildMySQL DB帐户的同时创build一个Linux帐户

我在六个月前问过这个问题 ,我想我可能会在这里得到更好的答复。

我有一个几乎完全用javascript(HTML canvas)编写的网站,还有一个通过PHPpipe理的MySQL数据库。 服务器端,我执行的脚本被作为用户的www-data 。 现在假设我想要创build一个新的linux帐户,并将用户的名称/密码添加到数据库中。 我将如何自动化?

我想要的实际function还扩展到为用户创build组,创build主文件夹的骨架目录,并具有对其主文件夹和子文件夹的读/写访问权限。 实质上,我需要以root身份执行某些命令,但我显然无法从键盘input它们。

我有一个想法是build立一个/ /home/www-data/.ssh/文件夹无密码SSHlogin到根,但我担心,是太多的权力。


疯帽子指出,这是一个潜在的重复这个问题,所以我正在提炼我原来的问题。

在我的网站上,每个用户都可以创build自己的脚本并执行它们。 有一个复杂的库创build,它可以dynamic加载JavaScript脚本,执行它们,几乎总是重画HTML Canvas元素。 除此之外,他们可以创buildPHP脚本。

因为用户可以创build他们自己的PHP脚本,所以我不能仅仅通过编辑/etc/sudoers文件来提交创build新用户的root访问权限给www-data。 我想要的是当用户注册时执行下面的命令/ PHP脚本(因此以用户www-data连接)

 shell_exec("sudo useradd JCDenton"); 

但是要避免这样的情况:用户编写PHP脚本来使用上面的PHP文件开始创build自己的用户。

我理想的情况是能够login一个用户不仅仅是一个PHP会话,并且只允许他访问他/她有权访问的SQL数据库的元素,而是实际上将他login到Apache服务器中,案例, JCDenton

你有没有考虑使用像pam_mysqlpam_ldap东西,并把用户帐户信息数据库? 这样,您可以将系统帐户(本地/etc/passwd )与用户帐户分开,从而增加了灵活性和安全性。 pipe理你的用户将通过MySQL进行,不需要root权限。

然后, pam_mkhomedir将在首次login时创build主目录(以及所需的骨架文件)。

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

因为除非在应用程序中实现相关的结构,否则不能“实际上将他login到Apache服务器中,因为这种情况下JCDenton不存在。 虽然您可以使用HTTP身份validation,但这不能提供安全模型所需的所有其他部分。

您正试图在这里处理3种不同的安全模式

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

是的,合理化这些潜在的冲突模型应该在你的devise优先级清单上很高 – 但是你是否应该把它放在Unix权限模型的基础上呢? 有使用PHP 将其扩展到应用程序域的工具 – 但它不是唯一的解决scheme。

除此之外,在Unix / Linux / POSIX系统上,从命令行创build用户很简单 – 但有一些注意事项。 同样,你可以使用SQL创buildmysql用户 。 但是请注意, 我所了解的pam_mysql模块 使用MySQL的身份validation和用户pipe理function,而只是提供一个authentication数据的存储库。

将所有这些捆绑到一个shell或php脚本中是微不足道的。 唯一需要注意的是,如果你想从root拥有的shell以外的东西调用它,那么你仍然应该使它只能被root用户读/可执行,但是configurationsudo允许它从web服务器运行。

所以为了使你的模型能够工作,你需要计划一下你将如何构buildUnix权限的一些细节,并使用suPHP。