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 / 问题 / 540298
Accepted
Safado
Safado
Asked: 2013-09-20 11:55:10 +0800 CST2013-09-20 11:55:10 +0800 CST 2013-09-20 11:55:10 +0800 CST

给 Apache 用户一个 shell 的危险

  • 772

tl;dr - 在 /etc/passwd 中给 Apache 一个 shell 有什么危险?


我正在努力使用 Apache 设置 mod_evasive 以对抗 DOS 尝试。我使用DOSSystemCommand运行一个脚本,将有问题的 IP 地址添加到 iptables 中的 BANNED 链中。

我发现让这个过程正常工作的唯一方法是将 Apache 的 shell 从 更改/sbin/nologin为/bin/bash. 但实际上只有脚本的一部分因没有更改外壳而失败。这DOSSystemCommand是它运行的行和脚本:

 DOSSystemCommand    "/usr/bin/sudo /bin/bash /var/www/html/ban_ip.sh %s"

和脚本......(注意我只是在测试......这就是为什么我有详细的输出和短暂的禁止期)

#!/bin/bash

IP=$1
IPTABLES=/sbin/iptables

sudo $IPTABLES -I BANNED -p tcp -s $IP --dport 443 -j DROP
sudo $IPTABLES -I BANNED -p tcp -s $IP --dport 80 -j DROP

echo sudo $IPTABLES -v -D BANNED -p tcp -s $IP --dport 80 -j DROP | at -m now + 1 minutes
echo sudo $IPTABLES -v -D BANNED -p tcp -s $IP --dport 443 -j DROP | at -m now + 2 minutes
echo rm -fv /tmp/dos-$IP | at -m now + 2 minutes

因此,Apache 的外壳为/sbin/nologin,它将添加 IPTABLES 规则并创建at作业,但是当我收到一封包含 at 作业结果的电子邮件时,它指出User is currently unavailable,因此永远不会删除 iptables 规则。如果我将 Apache /bin/bash 作为其 shell,则会添加 iptables 规则,创建 at 作业,并且 iptables 删除将在指定时间按预期工作。

所以我的问题是:通过给 Apache 用户一个 shell,我以什么方式将我的服务器置于危险之中?

centos
  • 2 2 个回答
  • 2656 Views

2 个回答

  • Voted
  1. Best Answer
    BMDan
    2013-09-24T12:53:15+08:002013-09-24T12:53:15+08:00

    相关代码在 mod_evasive.c 的第 224 行:

            if (sys_command != NULL) {
              snprintf(filename, sizeof(filename), sys_command, text_add);
              system(filename);
            }
    

    现在,让我们检查一下man 3 system:

    DESCRIPTION
           system()  executes  a command specified in command by calling /bin/sh -c command,
           and returns after the command has been completed.  During execution of the
           command, SIGCHLD will be blocked, and SIGINT and SIGQUIT will be ignored.
    

    然后,我们可以看到,指定的命令正在 shell 中运行。诚然,system(3)文档在这一点上令人困惑,但我们当然可以看到正在发生的事情并做出适当的推断——它在用户的默认 shell 中运行,而不仅仅是/bin/sh.

    正确的解决方案相对简单:只需将system(3)调用替换为 afork(2)和 an execve(2)(或类似的东西)。如果您不想这样做,您还可以编写一个非常小的限制性外壳来适当地锁定事物。

    巧合的是,这个问题促使我仔细检查,你会很高兴知道一个有能力编写 .htaccess 文件的用户不能仅仅因为安装了 mod_evasive 就接管了你的盒子(RSRC_CONF是正确的设置,所以在这一点上对 mod_evasive 的作者表示敬意)。但是,鉴于您对配置的描述方式,极有可能至少,任何能够以 Apache 运行代码的用户(例如,禁止mod_su*等,任何可以运行 PHP、Perl、CGI 等的用户)都可以使用 Apache。 ),可以禁止您使用 IPTables 访问您自己的服务器。

    • 3
  2. Daniel Widrick
    2013-09-24T11:18:28+08:002013-09-24T11:18:28+08:00

    为什么 apache 需要运行这个脚本?看起来您正在将 apache 提升为 root,并在您可以以 root 身份运行脚本时为其分配一个 shell。

    授予 apache sudo 访问权限很像锁定建筑物的所有门窗......而且还为装运码头安装高架门并将其敞开。(理论上,用户只能访问运输区中的某些东西……但他们仍然可以进入建筑物,并且可以开始窥探更多的入口点。

    为 apache 用户提供一个 shell 来使用 sudo 访问权限很像将钥匙切割机留在所述运输区。运气好的话,攻击者可以制作他/她需要的密钥(获得访问/特权)。

    https://unix.stackexchange.com/questions/78985/deleting-users-with-nologin-shell 根据上述问题:/bin/nologin shell 阻止任何人以相关用户身份登录(请参阅:控制台, ssh、su 等)。

    您还可以查看: https ://security.stackexchange.com/questions/5707/recommendations-for-chang-the-default-shell-for-service-accounts——关于 nologin vs / 安全性的讨论dev/null 作为外壳。

    • 1

相关问题

  • 如何在 Linux 机器上找到有关硬件的详细信息?

  • 使用 crontab 和 /etc/cron.hourly,daily,weekly 的区别

  • 持续监控许多服务器运行状况的简单方法?

  • Hudson 无法在 tomcat5 中启动

  • CentOS 的依赖挑战

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