使用PHP创buildLinux用户?

我目前正在为我的FTP服务器创build一个成员系统,用于我想要访问服务器的密友,但是我正在使用的FTP服务器(proFTPd)利用Linux用户作为每个成员的帐户。 所以我需要使用PHP的forms,当然这将有权访问服务器,并能够在系统上创build一个用户。

现在我的表单完全设置与validation电子邮件/用户名/密码,并将其保存到我的SQL数据库。 唯一缺less的是创build新用户来完成它。

我知道这并不总是最安全的事情,但我确实希望这样做,我知道危险,所以任何帮助都会很好。

现在从我一直用来在linux上创build一个用户(或者我的Ubuntu atleast版本),它是:

useradd [username] -p [password] -d [/path_to_home_directory] -s [/bin/false] 

没有括号当然。

我也知道php命令:shell_exec,exec,system()然而,我已经尝试过每一个这样的行来创build用户,没有什么会工作。

我做了一些更多的研究,发现Web服务器在www-data(应该是)上运行,并且没有访问useradd的命令。 所以我'viduso'它,仍然没有改变。

从我所看到的,我可以将www-data访问到服务器上的脚本,然后以root身份创build用户,但是我不知道如何将存储在php中的variables传递给脚本。

如果你需要更多的细节来帮助只是问。 这是我需要最后完成我的最后2个月的项目,其中包括一个桌面应用程序和所有的最后一件事。 这是如此接近,但我似乎无法得到它。

您不应该为FTP服务创建Unix用户帐户,您应该集成您的proFTP服务器以使用MySQL进行身份验证(在MySQL中存储帐户),所以在这种情况下您不需要创建Unix帐户,这将是更好更安全的解决方案:

proFTP与MySQL

您可以在useradd设置setuid位 ,所以它以root权限运行(例如)。 但请注意: 这是非常危险的 。 这将允许服务器中的任何用户创建用户。

无论如何,我认为这是一个安全漏洞,允许一个web-php脚本创建帐户!

只是一个说明。 使用控制面板类型的东西,您必须有时以root身份执行操作。 我发现最好的方法是运行PHP控制面板,而不需要任何权限升级。 制作一个安全的PHP Web应用程序是很困难的,因为它没有暴露主机系统。

如果控制面板需要进行需要root权限的更改或Web服务器用户上方的任何访问级别,则最好将有关需要在Web服务器用户正常访问的地方进行的更改的信息存储在数据库或通过在Web用户可以写入文件的地方创建文本文件。 在存储信息之前,用户提交的数据可能会发生通常的卫生处理。

然后以root身份每分钟或每小时运行一次cron脚本,或者从该脚本的任何地方抓取数据,然后执行所需的操作。 你也可以在这个脚本中进行健全性检查。

我认为最安全的方法是将您的Web服务器用户设置为只有以useradd或adduser开头的命令的sudoer,无论您的distrib是什么。 所以你不必以root身份让你的web用户。

脚本将是这样的:

 <?php $user_name = "uuttyy"; $user_pass = "passwer9911"; $ret_useradd = 0; $ret_passwd = 0; passthru('useradd -m '.$user_name, $ret_useradd); if ($ret_useradd) { printf("Something wrong with useradd, code: %d\n", $ret_useradd); exit(); } passthru('echo "'.$user_name.':'.$user_pass.'" | chpasswd', $ret_passwd); if ($ret_passwd) { printf("Something wrong with chpasswd, code: %d\n", $ret_passwd); echo exec('userdel '.$user_name); exit(); } printf("All done!\n"); ?> 

但是正确的答案不是这样做,它有安全问题! 调整(或更改)您的FTP服务器以使用用户数据库,并将用户添加到该数据库。 就像萨蒂什,proftpd + mariadb(mariadb是一个更好的分支从MySQL)是好的