我正在尝试研究如何将变量从 php 获取到脚本中,因为我想创建一个用户注册页面,以便用户可以注册并且 php 将调用脚本并将变量发送给它。
特别是这一行我遇到了麻烦(它在php页面中):
PHP: $结果 = bash /home/*******/public_html/add_user $login '$pwd'
;
add_user.sh:
#!/bin/bash
adduser -u "$1" -p "$2" -g users -s /bin/bash
$results = exec("bash /home/*******/public_html/add_user $login '$pwd'");
请记住,运行此进程的用户(网络用户,可能是 www-data、www、web 等)必须具有 sudo 或提升的访问权限才能执行此操作。我还想告诫不要这样做,除非你真的花时间考虑了所有的影响和后果,如果你把它暴露在网络上。
如果你真的想从 PHP 调用一个外部程序,你可以使用类似system()
或的调用exec()
来做到这一点。您必须使用 PHP 变量在 PHP 中构建命令行。
话虽如此,这种方法是 Web 应用程序中最常见的安全漏洞来源之一。您将不得不竭尽全力确保您将要传递的数据是有效且正确的(想想如果$login
contains会发生什么"; rm -rf /"
)。
adduser
另一个考虑因素是需要超级用户权限的事实。上次我检查时,shell 脚本不支持 SUID,所以我不确定直接的方法是否可行 - 您可能需要使用sudo
或重写 Perl 中的脚本(例如)并使用suidperl
.
您可以从 PHP 脚本中回显变量并将其读入 shell 变量,如下所示:
read -r user pass < <(/path/to/php/script.php)