授予 www-data sudo nopasswd 访问权限的实际风险是什么?

授予 www-data sudo nopasswd 访问权限的实际风险是什么?

我有一台刚刚安装了 apache 的服务器。服务器上有一个 php 脚本,我想从中运行 sudo 命令。我一直在网上搜索为什么在 sudoers 文件中授予 www-data sudo nopasswd 访问权限是错误的,但我实际上不明白为什么?如果这是服务器上唯一的 php 脚本,并且服务器的唯一目的是处理这个 php 脚本,那么它是否仍然很危险?如果是这样,我还应该怎么做。我想不通。我正在运行一个 python 脚本,它将使用 os.system() 执行 sudo 命令,这就是我想授予它访问权限的原因。我注意到的另一件事是,当我将它指向仅包含我的 python 脚本的文件夹时,它不起作用。当我将它指向 ALL 时,它起作用了。我不知道该怎么做。谢谢。

答案1

在任何情况下都不允许你的 Web 服务器运行带有 的命令sudo。即使是非常特定的命令也不行。

这是一个巨大的安全风险。不应授予 Web 服务器访问sudo命令的权限,从而允许 root 访问命令。尤其是当给定nopasswd形式时sudo,如果您的 Web 服务器被攻破,恶意威胁行为者运行的任何命令都可以以上帝权限运行root,因此您的整个系统都可能遭受数据盗窃、数据删除、损坏和操作系统损坏

许多 Web 应用程序都不是采用安全方法编写的,如果您的 Apache 安装遭到破坏,您将无法保护自己免受脚本和恶意威胁行为者的攻击,无法运行任何任意命令。

如果你必须授予 Web 服务器以 root 身份运行某些程序的权限,那么你肯定做错了,应该重新评估你正在尝试做的事情。鉴于你的问题没有说明你到底想要实现什么,也没有说明你的脚本到底在做什么,作为系统管理员和安全人员,我唯一能给出的建议是不要尝试授予 Web 服务器sudo访问权限

答案2

用户背后的原则www-data是,它是一个无特权用户。

当您运行守护进程(类似于 Web 服务器的后台程序)时,出于安全目的,最好在启动后放弃权限,以便它在剩余时间内以尽可能低的权限运行。

过去,该nobody账户经常用于此目的。这样做的好处是,“nobody”这个名字清楚地表明,这应该是一个无特权帐户,没有任何权限。

但是,偶尔会出现例外情况,即有人需要守护进程在此处或此处具有写入权限。修改帐户nobody将影响所有守护进程。

因此,www-data诞生了一种只为 Web 服务器设置大多数无特权用户的方法,但与其他守护进程或目的隔离,因此如果你确实需要为该用户帐户授予一些额外的权限,它只会影响 Web 服务器,而不会降低其他系统守护进程。

应为非特权用户这一想法www-data仍然很重要。您赋予它的权限越多,您就越需要担心如果守护进程(或其运行的任何脚本或命令)受到损害或暴露任何类型的安全漏洞会发生什么。

授予www-data某些sudo访问权限是与此原则背道而驰的。虽然可以选择性地使用 sudo 访问权限,但由于可能出现人为错误,或者 Web 服务器或其运行的任何脚本可能存在安全漏洞,因此仍然会带来相当大的安全风险。

如何避免这种情况?

  • 有什么方法可以设计任务使其不需要超级用户权限?
  • 如果不是,那么任务是否真的需要由 Web 服务器上提供的脚本来运行?如果它由不面向公众的程序(如 Cron)运行,或者通过 SSH 手动运行,则会更安全。

相关内容