我正在为我想要访问服务器的好朋友创建我的FTP服务器的成员系统,但是我正在使用的FTP服务器(proFTPd)利用linux用户作为每个成员的帐户。所以我需要使用一个带有php的html表单,当然可以访问服务器并能够在系统上创建用户。
现在我已完全设置表单,验证电子邮件/用户名/密码并将其保存到我的sql数据库。我唯一缺少的是创建新用户来完成它。
我知道这并不总是最安全的事情,但我确实想要这样做而且我确实知道危险,所以任何帮助都会很好......
从目前我用来在linux上创建用户(或者至少我的Ubuntu版本)开始,它就是:
useradd [username] -p [password] -d [/path_to_home_directory] -s [/bin/false]
当然没有括号。
我也知道php命令:shell_exec,exec,system()但是我已尝试使用该行中的每一个来创建用户,并且没有任何工作。
我做了一些研究,发现网络服务器正在运行www-data(应该是),并且无法访问useradd命令。所以我'viduso'它仍然没有变化。
从我看到的我可以给www-data访问服务器上的脚本然后以root身份创建用户但是我不知道如何将存储在php中的变量传递给脚本。
如果您需要更多详细信息以帮助您提问。这是我需要完成最后两个月项目的最后一件事,其中包括一个桌面应用程序和所有这些。它如此接近,但我似乎无法得到它。
答案 0 :(得分:3)
您不应该为FTP服务创建Unix用户帐户,您应该将proFTP
服务器集成到使用MySQL
进行身份验证(MySQL中的商店帐户),因此在这种情况下您无需创建Unix帐户,这将是更好,更安全的解决方案:
答案 1 :(得分:2)
您可以在useradd
中设置setuid
bit,因此它以root访问权限运行(例如)。但请注意:这非常危险。这将允许服务器中的任何用户创建用户。
无论如何,我认为允许web-php脚本创建帐户是安全漏洞!
答案 2 :(得分:1)
请注意。使用控制面板类型的东西,您必须以root身份执行操作。我发现最好的方法是在没有任何升级权限的情况下运行PHP控制面板。在不暴露主机系统的情况下制作一个安全的PHP Web应用程序是很困难的。
如果控制面板需要进行需要root访问的更改,或者Web服务器用户之上的任何访问级别,最好存储有关Web服务器用户可以正常访问的某个地方需要进行的更改的信息。 - 在数据库中或通过在某处创建文本文件,Web用户可以编写文件。在存储信息之前,可以对用户提交的数据进行常规的清洁。
然后每分钟,每小时或任何适合该场合的cron脚本以root用户身份运行cron脚本,从存储的任何位置获取数据,并执行所需的操作。您还可以在此脚本中执行完整性检查。
答案 3 :(得分:0)
我认为最安全的方法是将您的web服务器用户设置为sudoer,仅用于以useradd或adduser开头的命令。因此,您不必将您的Web用户设为root用户。
答案 4 :(得分:-1)
脚本将是这样的:
<?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服务器以使用用户数据库,并将用户添加到该数据库。正如Satish所说,proftpd + mariadb(mariadb是来自mysql的更好的分支)对此有好处