为我的 ssh 用户提供“apt-get update”和“apt-get update”的无密码 sudo 是否安全?

为我的 ssh 用户提供“apt-get update”和“apt-get update”的无密码 sudo 是否安全?

我的个人服务器上有一个 SSH 标准用户帐户,并且它具有 sudo 访问权限(通过其密码)。

我使用公钥进行 ssh 登录,因此无需输入帐户密码即可登录。允许此用户无密码 sudo 访问运行对我来说是否安全仅有的和(或apt-get update)命令?我从安全角度问,apt-get upgradeapt-get dist-upgrade不是从“损坏/有缺陷的更新”的角度来看。我是唯一登录的人,如果我因更新而破坏了某些内容,我始终可以使用 sudo (使用密码)来修复问题。

要点是能够在我的服务器上及时运行更新,而无需输入密码。但是,如果有人确实访问了此帐户,我不希望他们能够安装任何东西,而且我不知道这两个命令是否还有其他问题。

这是我的文件中的确切行sudoers

stephen ALL=(root) NOPASSWD: /usr/bin/apt-get update, /usr/bin/apt-get upgrade, /usr/bin/apt-get dist-upgrade

答案1

允许不太受信任的用户运行apt-get update是可以的。他们能做的最糟糕的事情就是消耗大量带宽并填满一些磁盘空间,并且他们有很多其他方法来做到这一点,除非您采取了严格的措施来防止这种情况。

允许用户运行apt-get upgrade可能会授予他们 root 访问权限。有些软件包会查询用户并可能允许 shell 转义;例如,有权访问正在运行的终端apt-get upgrade(或任何调用)的用户dpkg -i可能会收到提示,询问配置文件已更新后该怎么做,并且选项之一是运行 shell 来检查情况。

您需要进一步限制命令:

#!/bin/sh
set -ex
exec </dev/null >"/var/log/automatic-apt-upgrade-$(date +%Y%m%d-%H%M%S)-$SUDO_USER.log" 2>&1
apt-get --assume-no upgrade

这不应该为用户提供成为 root 的方法,因为他们无法与包管理器交互。由于升级有时会破坏系统,并且仅具有这些权限的用户将无法修复任何内容,因此只能通过稳定版本来完成此操作,并且仅等待安全更新。如果是内核更新,请让具有完全 root 访问权限的用户决定何时触发重新启动。

顺便说一句,用户将无法注入包内容 - 为此,他们需要控制分发包的服务器,并且除了服务器对包进行签名(如果包已签名)(所有官方来源都是如此)。这与升级时控制机器的攻击媒介无关。

话虽这么说……使用无人值守升级, 如果那是你想要的。

相关内容