Sudoers für einen Tag pro Woche?

10

Ich wurde von meinem Chef freiwillig als Systemadministrator für unseren Produktions-Redhat-Server gemeldet. Er bat mich, die Sicherheit zu verschärfen, um rm -f *solche Pannen zu vermeiden , die vor nicht allzu langer Zeit aufgetreten waren.

Im Moment haben wir 53 Benutzer, die in die Maschine eintauchen, und es ist ein Audit-Albtraum. Ich frage mich, ob es möglich ist, Benutzerzugriff nur an bestimmten Wochentagen zuzulassen.

Kann ich beispielsweise zulassen, dass sich Benutzer 'Joe' NUR dienstags und donnerstags und 'Jane' nur sonntags anmeldet? Kann etc/sudoersangepasst werden, um dies zu ermöglichen?

Gibt es einen besseren Weg, anstatt Sudoer zu verwenden?

Chris
quelle
10
Ich würde empfehlen, die Handbuchseite NICHT zu lesen. Siehe xkcd # 1343
user60684
3
Nein, ich sage ihm, er soll das Handbuch nicht lesen, weil es meiner Meinung nach unmöglich ist, es zu lesen. Das OP würde wahrscheinlich eine Antwort in der Manpage finden, wenn es leichter zu lesen wäre.
user60684
10
Sie können dies tun, aber denken Sie daran, dass Benutzer sich an jedem Tag, an dem sie root sind, jederzeit den Sudo-Zugriff zurückgeben können.
Nick Matteo
2
@ Mark0978 Wenn du den Namen des Unternehmens wüsstest, würdest du wahrscheinlich sterben und deinen Kopf ablachen. Es ist eine Schande, dass es erlaubt ist ... auf einem Produktionsserver.
Chris
3
Das scheint irgendwie albern. Es bedeutet nur, dass Bill warten muss, bis sein Zeitfenster am Mittwochmorgen läuft rm -rf /.
Michael Hampton

Antworten:

21

sudo führt seine Authentifizierung über PAM durch, wie so ziemlich alles andere auf einer Linux-Box.

Sie sollten also in der Lage sein, dies pam_time.sozu tun.

Zumindest unter Debian ist dieses Modul standardmäßig nicht aktiviert. Sie müssen eine Zeile hinzufügen, die folgendermaßen aussieht:

account    requisite  pam_time.so

entweder /etc/pam.d/sudoum nur für sudo zu aktivieren oder um /etc/pam.d/common-account(nach dem Block pam-auth-update) für alle Programme auf dem System zu aktivieren.

Bearbeiten Sie dann /etc/security/time.conf, um Ihre Einschränkungen festzulegen. Der Dienstname sollte sein sudo. Damit Fred sudoam Freitag nur zwischen 15 und 17 Uhr arbeiten darf:

sudo;*;fred;Fr1500-1700

(HINWEIS: Ich habe dies nicht getestet.)

Bearbeiten: Um klar zu sein, stimme ich der anderen Antwort und den verschiedenen Kommentatoren zu. Sie scheinen zu viele Leute zu haben, die zu viele Befehle als root ausführen, und Sie müssen das wirklich beheben. Und wenn sie root werden können, können sie natürlich die pam-Konfiguration bearbeiten ...

derobert
quelle
Die Implementierung von PAM scheint komplex zu sein, ermöglicht jedoch auch eine genauere Kontrolle darüber, wer was wann tut. Akzeptiert und abgestimmt. Vielen Dank.
Chris
2
Ich denke nicht, dass es die richtige Antwort ist, ihn zu ermutigen. IMAO ist die richtige Antwort auf diese Frage "RUN FOR THE HILLS !!!! 1! 1 !! 1! 1"
o0 '.
Funktioniert das eigentlich? Ich kann verschiedene Anmeldemechanismen wie "login", "ssh", "gdm", "su" mit pam_time.so steuern, aber es funktioniert nicht für sudo. Ich möchte verhindern, dass jemand außerhalb der Bürozeiten durch einen normalen Mechanismus verwurzelt wird. (Mir ist klar, dass es nicht kugelsicher ist, jemand könnte im Voraus eine Setuid-Hülle oder eine Hintertür vorbereiten, aber ich erwarte nicht, dass dies in dieser Situation passieren wird.)
Sam Watkins
20

Ich würde fragen, warum 53 Benutzer sudo benötigen, um ihre tägliche Arbeit zu erledigen - für die meisten Benutzer (sogar Entwickler) sollte sudo eine seltene Ausnahme sein, nicht so routinemäßig, dass jemand beiläufig einen sudo rm -rf *Befehl ausführen würde .

Können Sie Gruppenberechtigungen (oder sogar erweiterte ACLs) verwenden, um Benutzern Zugriff auf die Dateien zu gewähren, die sie für ihre Arbeit benötigen, möglicherweise mit einigen festgelegten oder sudo'ed-Skripten oder Binärdateien, damit sie beispielsweise Dienste neu starten können? (Beachten Sie, dass es schwierig ist, ein sicheres Setuid / Sudo-Skript zu schreiben, daher ist es mehr, ehrliche Menschen ehrlich zu halten).

Selbst wenn Sie den Sudo-Zugriff auf einen Tag pro Woche beschränken können, sind dies in einer Woche immer noch 53 Personen mit Sudo-Zugriff. Dies hilft also nicht wirklich bei Ihrem Kernproblem.

Im Übrigen würde ich fragen, ob so viele Benutzer überhaupt Zugriff auf einen Produktionsserver benötigen. Können Sie Protokolle oder die benötigten Daten / Dateien an eine Nichtproduktionsmaschine senden?

Johnny
quelle
Oder können Sie eine Art Zugriff auf die Protokolldateien veröffentlichen, die sie möglicherweise benötigen, eine sftp-Einrichtung mit Chroot-Gefängnis.
Bootscodierer
@Johnny Der Großteil der auf diesem Host geleisteten Arbeit besteht darin, Shell-Skripte zu erstellen / bearbeiten und auszuführen. Benutzer sollten nicht dazu berechtigt sein vi/cp/mv/rm. Nur cdund more. Nichts anderes.
Chris
@Johnny Wenn ich eine ACL für ein Verzeichnis festlege, erben die Dateien in diesem Verzeichnis standardmäßig die Attribute der ACL?
Chris
@Chris Ja, wenn Sie die Standard-ACL für das Verzeichnis festlegen.
Michael Hampton
Dies sollte ein Kommentar sein, keine Antwort. Unabhängig davon, ob das OP-Szenario sinnvoll ist, müssen andere Personen zu bestimmten Zeiten "sudo" für einige Benutzer sperren.
Sam Watkins
7

Am einfachsten wäre es, suders.d (via inludedir) für Ihre Konfiguration zu verwenden. Sie könnten dann Cron-Jobs haben, die die Regeln für jeden Benutzer für die von Ihnen gewünschte Zeit in dieses Verzeichnis stellen könnten.

Die Anweisung #includedir kann in / etc / sudoers verwendet werden, um ein sudo.d-Verzeichnis zu erstellen, in das Sie sudoers-Regeln als Teil Ihrer Regeln ablegen können. Beispiel:

#includedir /etc/sudoers.d

sudo liest jede Datei in /etc/sudoers.d und überspringt Dateinamen, die mit '~' enden oder ein '.' enthalten. Zeichen, um Probleme mit temporären / Sicherungsdateien des Paketmanagers oder -editors zu vermeiden. Dateien werden in sortierter lexikalischer Reihenfolge analysiert. Das heißt, /etc/sudoers.d/01_first wird vor /etc/sudoers.d/10_second analysiert. Beachten Sie, dass /etc/sudoers.d/1_whoops nach /etc/sudoers.d/10_second geladen wird, da die Sortierung lexikalisch und nicht numerisch ist. Die Verwendung einer konsistenten Anzahl führender Nullen in den Dateinamen kann verwendet werden, um solche Probleme zu vermeiden.

Beachten Sie, dass visudo im Gegensatz zu Dateien, die über #include enthalten sind, die Dateien in einem Verzeichnis #includedir nur bearbeitet, wenn eine davon einen Syntaxfehler enthält. Es ist weiterhin möglich, visudo mit dem Flag ‑f auszuführen, um die Dateien direkt zu bearbeiten.

/etc/sudoers.d/joe ist vorhanden, wenn Sie möchten, dass Joe Zugriff hat, und Sie können die Datei einfach entfernen, um den Zugriff zu entziehen.

Jamespfinn
quelle
1
Ich hatte ein Problem mit meinen benutzerspezifischen sudoers-Dateien: 'sudoers.user1' usw. Sie bemerken das '~' und '.' Zeichen haben mein Problem gelöst. Ich bin so froh, dass Sie das Handbuch gelesen haben! Vielen Dank.
Han
0

Sie können eine Crontab hinzufügen, um einen Benutzer in eine Sudo-Gruppe aufzunehmen, und dann eine zweite Crontab, um diesen Benutzer herauszunehmen.

PolarisUser
quelle