Ist es für meinen SSH-Benutzer sicher, ein passwortloses Sudo für "apt-get update" und "apt-get upgrade" zu erhalten?

7

Ich habe ein SSH-Standardbenutzerkonto auf meinem persönlichen Server und es hat Sudo-Zugriff (über sein Passwort).

Ich verwende einen öffentlichen Schlüssel, damit ich nicht das Kontokennwort eingeben muss, um mich anzumelden. Ist es für mich sicher, diesem Benutzer einen kennwortlosen Sudo-Zugriff zu erlauben, nur die Befehle apt-get updateund apt-get upgrade(oder apt-get dist-upgrade) auszuführen? Ich frage aus Sicherheitsgründen, nicht aus Sicht eines "defekten / fehlerhaften Updates". Ich bin der einzige, der sich anmeldet, und wenn ich mit einem Update etwas kaputt mache, kann ich immer sudo (mit einem Passwort), um Dinge zu reparieren.

Der wichtigste Punkt ist, zeitnahe Updates auf meinem Server ausführen zu können, ohne unnötig ein Passwort eingeben zu müssen. Wenn jedoch jemand Zugriff auf dieses Konto erhalten hat, möchte ich nicht, dass er etwas installieren kann, und ich weiß nicht, ob ich mit diesen beiden Befehlen andere Bedenken haben sollte.

Hier ist die genaue Zeile in meiner sudoersDatei:

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

Stephen Schrauger
quelle
3
Das einzige Problem, das ich sehe, ist, dass Upgrades manchmal die Ausführung einer interaktiven Sub-Shell ermöglichen, wenn Änderungen an der Konfigurationsdatei kollidieren.
1
Stellen Sie sich das so vor: Können Sie es täuschen apt-get update, Updates aus einem gefälschten Repository abzurufen? Sagen wir, mit einer kleinen DNS-Cache-Vergiftung?
lcd047
1
@ lcd047 Werden Pakete nicht von Canonical signiert oder von welchem ​​Repository das Upgrade stammt? Selbst wenn DNS vergiftet würde, dachte ich, dass manipulierte Pakete nicht funktionieren würden, da es einen anderen Unterzeichner hat. Aber es ist ein guter Punkt, wenn sie nicht unterschrieben sind.
Stephen Schrauger
@Nasha Das ist ein sehr guter Punkt! Ich habe nicht an eine Kollisionslösung gedacht.
Stephen Schrauger
1
Selbst wenn die Pakete signiert sind, müssen Sie sie nicht tatsächlich installieren, um das Leben für den Systemadministrator interessant zu machen. Ziehen Sie in Betracht, das System dazu zu bringen, eine 10-TB-Datei aus Ihrem gefälschten Repository abzurufen (und auch hier benötigen Sie keine tatsächliche 10-TB-Datei, um 10 TB ausgewählter Auszüge aus /dev/urandomüber HTTP bereitzustellen). Signaturen können dies nicht verhindern, da sie erst nach dem Herunterladen einer Datei überprüft werden können.
lcd047

Antworten:

8

Zulassen, dass ein weniger vertrauenswürdiger Benutzer ausgeführt wird apt-get update ist in Ordnung. Das Schlimmste, was sie tun können, ist, viel Bandbreite zu verbrauchen und Speicherplatz zu füllen, und sie haben viele andere Möglichkeiten, dies zu tun, es sei denn, Sie haben strenge Maßnahmen ergriffen, um dies zu verhindern.

Wenn Sie einem Benutzer das Ausführen apt-get upgradeerlauben, erhalten Sie wahrscheinlich Root-Zugriff. Einige Pakete fragen den Benutzer ab und ermöglichen möglicherweise ein Shell-Escape. Beispielsweise wird der Benutzer, der Zugriff auf das Terminal hat, auf dem apt-get upgrade(oder ein dpkg -iAnruf) ausgeführt wird, möglicherweise gefragt, was zu tun ist, wenn eine Konfigurationsdatei aktualisiert wurde. Eine der Optionen besteht darin, eine Shell auszuführen, um die Situation zu untersuchen.

Sie müssen den Befehl noch weiter einschränken:

#!/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

Dies sollte dem Benutzer keine Möglichkeit geben, root zu werden, da er nicht mit dem Paketmanager interagieren kann. Da Upgrades manchmal ein System beschädigen können und ein Benutzer mit nur diesen Berechtigungen nichts reparieren kann, sollte dies nur mit einer stabilen Version erfolgen, bei der nur Sicherheitsupdates ausstehen. Wenn es sich um ein Kernel-Update handelt, lassen Sie einen Benutzer mit vollem Root-Zugriff entscheiden, wann ein Neustart ausgelöst werden soll.

Übrigens wäre der Benutzer nicht in der Lage, Paketinhalte einzuspeisen. Dazu müsste er die Kontrolle über den Server haben, der das Paket verteilt, und zusätzlich zum Server, der das Paket signiert, wenn das Paket signiert ist ( Dies gilt für alle offiziellen Quellen. Es ist für diesen Angriffsvektor irrelevant, der zum Zeitpunkt des Upgrades das Kommando über die Maschine hat.

All dies gesagt ... verwenden Sie unbeaufsichtigte Upgrades , wenn Sie dies möchten.

Gilles 'SO - hör auf böse zu sein'
quelle
Kann ich nicht einfach benutzen NOEXEC? Die Ubuntu-Dokumente für Sudoers besagen ...you can also use NOEXEC to prevent any programs launching shells themselves (as once a program is running with sudo it has full root privileges so could launch a root shell to circumvent any restrictions in the sudoers file. - help.ubuntu.com/community/Sudoers
Programster
@Programster Wenn Sie NOEXEC verwenden, schlägt die Installation der meisten Pakete fehl, da deren Postinst und andere Skripte nicht ausgeführt werden.
Gilles 'SO - hör auf böse zu sein'
Gut zu wissen, wenn ich Ihr Skript verwende, kann ein Administrator später ein Upgrade ausführen und die Upgrade-Auswahl treffen, oder werden diese Pakete als "installiert" betrachtet und ausgewählt, nichts zu tun?
Programster
@Programster Die Installation würde fehlschlagen, die Pakete würden in einem halb installierten Zustand bleiben (mit den Dateien an Ort und Stelle, aber nicht verwendbar).
Gilles 'SO - hör auf böse zu sein'
Ich denke, die "Faustregel" lautet, Nicht-Sudo-Benutzern nur dann keinen Zugriff auf die Upgrade-Funktionalität zu gewähren sudo apt-get updateund möglicherweise mehr darüber zu erfahren unattended-upgrades.
Programster