为什么要删除 Apache/Nginx 用户的 Shell 访问权限?

为什么要删除 Apache/Nginx 用户的 Shell 访问权限?

向运行 Apache/Nginx 的用户帐户授予 shell 访问权限是一个坏主意吗?

我之所以问这个问题,是因为 Guvnr 在他的 VPS 圣经系列中,使用 visudo'd 设置了一个新用户

guvnr  ALL=(ALL) ALL

权限,然后使用该用户设置 Nginx 服务器。

而 Nginx HTTP Server 的作者建议您不要向运行 Nginx 的用户授予 shell 访问权限。

您始终可以删除 guvnr 的 shell 访问权限,但是,您如何管理您的网站呢?

编辑:@Bart Silverstrim — 以下是 guvnr 安装 Nginx 的方式:

  • (以用户 guvnr 登录)
  • sudo 安装 nginx 依赖项
  • 用户 wget nginx 源文件
  • 用户./configure --sbin-path=/usr/local/sbin --with-http_ssl_module
  • 用户制作
  • 安装

因此也许 Nginx 在这里被安装到 root ?

如果在 /etc/ssh/sshd_config 中禁用了 root 登录,这是一种可以的做法吗?

答案1

一般来说,为守护进程/服务创建的任何帐户授予 shell 访问权限都不是好主意,因为这样可以访问不需要 shell 访问权限的特定系统功能。这样可以防止有人破坏(面向 Internet 的)服务并获得不必要的权限。

基本上,如果不需要的话,为什么要增加攻击面?

另一方面,在重新阅读问题时,不清楚 nginx 是否具有 shell 帐户。nginx 是由 guvnr 帐户设置的,还是被授予了自己的实际帐户?每个应用程序都由用户设置,通常具有一些管理访问权限。这并不意味着它始终以该用户的身份运行(即,仅仅因为 cat 是由 root 安装的并不意味着运行 cat 的 jdoe 以 root 身份运行 cat。)只有当 nginx 使用 guvnr 的帐户权限或以 guvnr 身份运行时,它才有权访问 shell;它很可能在分叉后立即放弃权限,或者它可能拥有自己的 nginx 帐户或以几乎没有或没有权限的 Web 用户帐户运行。您可能需要在配置中进行更多挖掘,看看服务器正在以什么身份运行。

答案2

因为安全。如果用户无法获得实际的交互式 shell,那么在保护服务器时就不用担心了。

用户是否可以使用sudo,和用户是否能打开shell没有关系。

答案3

通常,您希望授予用户完成工作所需的最低权限。服务不需要 shell,因此您通常不会向专门用于运行守护进程的帐户授予 shell 访问权限。

尤其是,如果某个可通过网络访问的服务以特定用户身份运行,最好不要授予该用户 shell 访问权限。原因是,如果您的服务受到攻击,那么攻击者将无法获得系统的 shell 访问权限。

如果此用户具有 shell 访问权限,攻击者可能就少了一个障碍来接管您的系统。如果此用户具有root同等权限(通过sudo),那么如果攻击者设法欺骗系统运行某些命令,他就可以有权限地执行它root

虽然您可以考虑让 Web 服务器在具有 shell 访问权限的 uid 下运行,但您的设置非常接近以 的身份运行服务root。在我看来,这是一个糟糕的主意。

您如何管理?要么“手动”管理,要么找到一种不需要您危及系统安全的工具。

相关内容