在 PHP 中执行具有提升权限的 Shell 脚本
使用 shell_exec 从 PHP 中执行需要提升权限(通过 SUDO)的 bash 脚本,有两种主要方法:
选项 1:禁用密码提示
此方法涉及通过添加允许的规则来修改 sudoers 文件 (/etc/sudoers) Web 服务器用户(例如 www-data)在没有密码提示的情况下运行指定的命令。使用 visudo 命令打开 sudoers 文件并添加类似于以下内容的行:
www-data ALL=NOPASSWD: /path/to/script
这将允许 Web 服务器用户执行脚本,而不会提示输入密码。
选项 2:使用 PHP 的 proc_open
另一种方法是使用 PHP 中的 proc_open 函数。此函数允许您打开进程并指定其他选项,包括提供 SUDO 密码作为参数:
<?php $descriptorspec = array( 0 => array("pipe", "r"), // stdin 1 => array("pipe", "w"), // stdout 2 => array("pipe", "w") // stderr ); $process = proc_open( "sudo /path/to/script", $descriptorspec, $pipes ); // Write the password to stdin fwrite($pipes[0], "your_sudo_password\n"); fclose($pipes[0]); // Read stdout and stderr from pipes while (!feof($pipes[1])) { $stdout .= fgets($pipes[1]); } while (!feof($pipes[2])) { $stderr .= fgets($pipes[2]); } proc_close($process); ?>
在此示例中,SUDO 密码在 fwrite 语句中作为字符串提供。这两种方法都有效地实现了从 PHP 执行特权脚本而不提示输入密码的目标。
以上是如何使用'sudo”从 PHP 运行提升的 Shell 脚本?的详细内容。更多信息请关注PHP中文网其他相关文章!