AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1031643
Accepted
mhost
mhost
Asked: 2020-08-27 10:52:48 +0800 CST2020-08-27 10:52:48 +0800 CST 2020-08-27 10:52:48 +0800 CST

php exec 返回 127,因为 /bin/sh 在 apache chroot 中获得“权限被拒绝”

  • 772

我有一个 php 脚本,它试图使用 exec(或 shell_exec)在系统上执行二进制文件。exec 失败,返回码 127。

返回代码 127 通常表示未找到命令。所以我确保使用二进制文件的绝对路径。没变。

Apache 被配置为使用 apache 的 ChrootDir 在 chroot 中运行。

我确保将二进制文件复制到 chroot、/bin/sh 以及这两者所需的所有链接库中的正确路径中。

Apache(以及因此 php)作为 www-data 运行。我已经确认 www-data 具有对二进制文件(包括 /bin/sh)和所有父文件夹的读取和执行权限。为了确认这不是文件权限问题,我使用 /bin/sh -c 使用 sudo 运行命令:

sudo -u www-data /chrootdir/bin/sh -c /chrootdir/path/to/binary

这没有问题。

使用 strace,我得到了这个:

execve("/bin/sh", ["sh", "-c", "/path/to/binary"], 0x7ffe436b3618 /* 11 vars */) = -1 EACCES (Permission denied)

只是为了确认权限问题是针对 sh 二进制文件(以及 chrootdir 中的那个),我尝试将 /chrootdir/bin/sh 重命名为其他内容并再次执行 strace,现在它抱怨找不到文件。

所以,我现在知道问题出在通过 apache 通过 php 运行时访问 /chrootdir/bin/sh ,但不是 www-data 用户的权限。

我不确定下一步该尝试什么。

这是在 Debian 10、apache 2.4.38 和 php 7.3.11 上运行的。

我已经清除了 open_basedir,也清除了 disable_functions。

我已经确认 apache 不受 apparmor 的限制,但无论如何都禁用了它。

最后,如果我禁用 apache chroot,这确实有效。

所以我的问题是在某个地方是否有任何其他限制可能会阻止 apache 这样做?

php chroot exec
  • 1 1 个回答
  • 1166 Views

1 个回答

  • Voted
  1. Best Answer
    mhost
    2020-08-27T13:58:09+08:002020-08-27T13:58:09+08:00

    感谢@Michael Hampton 上面的评论,我尝试使用 chroot 命令以 root 身份简单地 chroot 到 /chrootdir。我无法做到。我会得到:

    chroot: failed to run command ‘/bin/bash’: Permission denied
    

    我也尝试按照他的建议执行 /bin/sh -c /path/to/binary (但由于 www-data 不能使用 chroot 命令,所以以 root 身份执行)。这给出了相同的权限被拒绝错误。

    当我只使用 sudo -u www-data /bin/sh ... 时它会正确执行,而不是使用 chroot 命令,这意味着问题必须与链接库有关。

    经过进一步调查,/chrootdir/lib64/ld-linux-x86-64.so.2 库不可执行。使其可执行解决了这个问题。

    • 1

相关问题

  • 用户特定的 Php.ini 当 php 作为模块运行时?

  • 使 php mail() 函数在 ubuntu-server 上工作的步骤是什么?

  • Web 服务器和数据库服务器位于完全不同的位置

  • PHP 作为 CGI 还是 Apache 模块?

  • 通过 VPN 连接什么是远程服务器 IP?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve