【问题标题】:Linux - create user through PHPLinux - 通过 PHP 创建用户
【发布时间】:2015-07-31 00:23:20
【问题描述】:

我正在编写一个调用 bash 脚本的 PHP 程序。我正在使用 Linux (Centos)。我正在尝试通过在 PHP 页面中输入用户名和密码来在 Linux 中创建一个新用户。这是我正在使用的脚本:

egrep "^$1" /etc/passwd >/dev/null
if [ $? -eq 0 ]; then
    echo "$1 exists!"
    exit 1
else

    sudo useradd -m -p $2 $1
    [ $? -eq 0 ] && echo "User has been added to system!" || echo "Failed to add a user!"
fi

这就是我从 PHP 调用脚本的方式:

echo exec("/var/www/html/addUser.sh ".$username." ".$password);

从终端运行它时它可以工作,但是从 PHP 调用脚本时它不起作用。这是权限问题。我应该怎么做才能让 PHP (apache) 也添加用户? 我尝试将 'apache' 作为用户和组添加到 visudo:

%apache ALL=(ALL)   NOPASSWD: ALL
 apache    ALL=(ALL)       ALL

还是不行。 有任何想法吗?谢谢。

【问题讨论】:

  • Holycow,从 /etc/sudoers 中删除该条目。您实际上授予 Apache 对您系统的完全访问权限。
  • 仍然没有让它工作。还有其他想法吗?谢谢。

标签: php linux bash permissions


【解决方案1】:

您正试图让 PHP 在 Web 服务器上以 root 身份运行任意代码 - 这是非常不可取的,就好像有人要在您的代码中找到一个漏洞并注入自己的代码一样,他们会从字面上看,他们可以用您的服务器做任何他们喜欢的事情!

话虽如此,您可以使用exec("command"); 调用外部脚本或使用反引号,例如:

$command_output = `shell_command`;

欲了解更多信息,请参阅php's exec function

如果您确实想继续执行此操作,我建议您存储您的脚本(您想要运行的位于顶部的那个),然后使用 exec() 调用该脚本,同时只允许 sudo 无密码访问那个脚本。

补充:

您可能想尝试shell_exec 而不是 exec - 这会在 shell 中运行您的命令,我认为这可能会解决您可能遇到的任何环境问题。

【讨论】:

  • 谢谢。我刚刚尝试了 PHP 的完整权限,看看它是否有效。但事实并非如此。关于 'exec' - 我已经在使用它来调用脚本。问题是如何让 PHP 创建一个新用户。
  • 检查 exec() 传递给您的脚本的环境 - 可能是由于缺少“假定的”环境变量而无法找到您的脚本或无法正确设置 sudo。我之前使用反引号从 PHP 页面调用了 useradd,所以这是可能的,我认为 exec() 没有任何不同的原因——正如我所说,非常不可取——无论如何你都想这样做,没有什么不好的反映,但我必须不断重申,以防有人在 6 个月内看到这篇文章;)
  • 我刚刚有一个“离开我的电脑时”的想法——你尝试过使用shell_exec吗?
  • 看看你的 shell 脚本在运行时的完整输出会很有趣 - 你可以修改你的 echo exec("/var/www/html/addUser.sh ".$username." ".$password); 以使用反引号(仅限执行使用一个参数调用时重现最后一行)并在您的问题中发布任何结果?
  • 我收到“添加用户失败!”
猜你喜欢
  • 2012-03-05
  • 1970-01-01
  • 2016-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多