当前位置: 首页 > 面试题库 >

通过PHP执行root命令

松旻
2023-03-14
问题内容

我有一个CentOS 5.7 linux服务器,并使用php5.3.x。

在pfSense系统上,您可以使用php网页重新启动需要root权限的服务。

我正在尝试做类似的事情,我已经写了一些php代码来执行shell命令。例如,重新启动sshd服务:

<?php
exec('/sbin/service sshd restart');
?>

我试图通过exec函数执行该命令,但是它需要root权限,但是我们拥有apache用户权限。

我遇到了一些解决方案:

  1. “以root用户运行apache”确实不安全。我不想那样做。
  2. 我尝试了“ apache ALL = NOPASSWD:/ sbin / service到/ etc / sudoers”,但是仍然有问题。

还有其他解决方案吗?感谢您的回答。

现在..这很有趣。我尝试了@refp post,它在我的本地ubuntu服务器上起作用。但是,当我在cenOS
vps服务器上尝试相同的操作时。它不起作用。这是apache的错误日志“ rm:无法删除`/ var / lock / subsys /
vsftpd’:权限被拒绝”


问题答案:

在尝试之前,请阅读整个文章,然后进行选择。

使用二进制包装器(带有suid位)的解决方案

1) 创建一个脚本(最好是.sh),其中包含要作为root用户运行的脚本。

# cat > php_shell.sh <<CONTENT
  #!/bin/sh
  /sbin/service sshd restart
CONTENT

2) 该文件应归root用户所有,因为以后它将以root用户权限运行,因此请确保只有root用户具有写入文件的权限。

# chown root php_shell.sh
# chmod u=rwx,go=xr php_shell.sh

3) 要以root用户身份运行脚本,无论执行该脚本的用户是什么,我们都需要一个二进制包装器。创建一个将执行我们的php_shell.sh

# cat > wrapper.c <<CONTENT
  #include <stdlib.h>
  #include <sys/types.h>
  #include <unistd.h>

  int
  main (int argc, char *argv[])
  {
     setuid (0);

     /* WARNING: Only use an absolute path to the script to execute,
      *          a malicious user might fool the binary and execute
      *          arbitary commands if not.
      * */

     system ("/bin/sh /path/to/php_shell.sh");

     return 0;
   }
CONTENT

4) 编译并设置适当的权限,包括suid位(假设它应以root特权运行):

# gcc wrapper.c -o php_root
# chown root php_root
# chmod u=rwx,go=xr,+s php_root

php_root现在将以root权限运行,并执行中指定的命令php_shell.sh

如果您不需要轻松更改将要执行的命令的选项,建议您直接在wrapper.c步骤 4
下编写这些命令。然后,您无需让二进制文件执行外部脚本来执行所讨论的命令。

在中wrapper.c,用于system ("your shell command here");指定您要执行的命令。



 类似资料:
  • 本文向大家介绍通过什么命令查找执行命令?相关面试题,主要包含被问及通过什么命令查找执行命令?时的应答技巧和注意事项,需要的朋友参考一下 答案: which 只能查可执行文件 whereis 只能查二进制文件、说明文档,源文件等  

  • 问题内容: 我正在尝试通过Java执行命令行参数。例如: 上面的命令打开命令行,但是不执行或。有任何想法吗?我正在运行Windows XP,JRE6。 (我已经对问题进行了更详细的修订。以下答案很有用,但不能回答我的问题。) 问题答案: 你发布的代码使用自己的命令启动三个不同的过程。要打开命令提示符然后运行命令,请尝试以下操作(请勿自己尝试):

  • 问题内容: 我在Linux(Debian)上开发了C代码。有时,我需要通过执行一些命令 我想知道是否可以通过root用户执行命令。如果不是这种情况,是否有任何功能可以我在C代码上以root身份执行命令(或运行二进制文件)? 问题答案: 在遇到普通用户要执行root命令之前,我们遇到了这种情况,这是我们的解决方案(使用setuid / SUID): 假使,假设: 用户名 : 组别 : C程序文件 :

  • 我正在尝试使用Java ProcessBuilder获得以下ImageMagick命令: 文件路径(源映像、掩码映像和目标映像)是可配置的。如果我在PowerShell或Windwos Cmd中输入命令,它将按预期工作。当我试图通过Java ProcessBuilder执行相同的命令时,它失败了。 这是我最后的代码: 这是来自流程构建器的ourput: 似乎这些命令的解释方式不正确 我尝试过以下几

  • 我正在使用java执行一个curl命令。 我想在我的代码中获取这个curl命令的输出,但是我的stdoutout是空的。 尝试手动执行curl命令,工作正常。然后我打印了标准误差,我可以看到: 当curl命令被手动执行时,它工作得很好,那么为什么不通过Runtime.getRuntime()呢? 请建议!!任何帮助将不胜感激。

  • 本文向大家介绍PHP执行普通shell命令流程解析,包括了PHP执行普通shell命令流程解析的使用技巧和注意事项,需要的朋友参考一下 这里演示一些普通的shell命令   php执行shell命令,可以使用下面几个函数: string system ( string $command [, int &$return_var ] ) string exec ( string $command [,