GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verwenden von sudo zum Delegieren von Berechtigungen in Linux

In meinem vorherigen Artikel „Echte Systemadministratoren verwenden kein sudo“ habe ich den wirklich schrecklichen Missbrauch von sudo besprochen durch einige Distributionen. In diesem Artikel, der teilweise aus Kapitel 11 meines Buches „Using and Administering Linux, Zero to SysAdmin, Volume 1:Getting started“ stammt, untersuche ich einige gültige Anwendungsfälle für sudo .

Anwendungsfall 1:Remote-Dateikopie

Ich habe kürzlich ein kurzes Bash-Programm geschrieben, um einige MP3-Dateien von einem USB-Stick auf einem Netzwerkhost auf einen anderen Netzwerkhost zu kopieren. Die Dateien werden in ein bestimmtes Verzeichnis auf dem Server kopiert, den ich für eine Organisation betreibe, der ich angehöre, von wo sie heruntergeladen und abgespielt werden können.

Mein Programm macht ein paar andere Dinge, wie das Ändern des Namens der Dateien, bevor sie kopiert werden, damit sie auf der Webseite automatisch nach Datum sortiert werden. Es löscht auch alle Dateien auf dem USB-Laufwerk, nachdem überprüft wurde, ob die Übertragung korrekt stattgefunden hat. Dieses nette kleine Programm hat ein paar Optionen wie -h um Hilfe anzuzeigen, -t für den Testmodus und ein paar andere.

Mein Programm, so wunderbar es auch ist, muss als Root ausgeführt werden, um seine Hauptfunktionen auszuführen. Leider hat diese Organisation außer mir nur ein paar Leute, die daran interessiert sind, unsere Audio- und Computersysteme zu verwalten, was mich in die Lage versetzt, halbtechnische Leute zu finden, die ich schulen kann, um sich in den Computer einzuloggen, den wir für die Durchführung der Übertragung und verwenden Führen Sie dieses kleine Programm aus.

Es ist nicht so, dass ich das Programm nicht selbst durchführen kann, aber ich bin aus verschiedenen Gründen wie Reise und Krankheit nicht immer dabei. Auch wenn ich als „Lazy SysAdmin“ anwesend bin, lasse ich gerne andere meine Arbeit für mich erledigen. Also schreibe ich Skripte, um diese Aufgaben zu automatisieren, und verwende sudo ein paar Benutzer zu salben, um die Skripte auszuführen. Viele Linux-Befehle erfordern, dass der Benutzer root ist, um ausgeführt zu werden. Dies schützt das System vor zufälligen Schäden, die durch meine eigene Dummheit und vorsätzliche Schäden durch einen Benutzer mit böswilliger Absicht verursacht werden.

Mach das Sudo, das du so gut machst

Das sudo Das Programm ist ein praktisches Tool, das es mir als Systemadministrator mit Root-Zugriff ermöglicht, die Verantwortung für alle oder einige administrative Aufgaben an andere Benutzer des Computers zu delegieren, wie ich es für richtig halte. Es ermöglicht mir, diese Delegierung durchzuführen, ohne das Root-Passwort zu kompromittieren und somit ein hohes Maß an Sicherheit auf dem Host aufrechtzuerhalten.

Nehmen wir zum Beispiel an, dass ich dem normalen Benutzer „ruser“ Zugriff auf mein Bash-Programm myprog gegeben habe , das als root ausgeführt werden muss, um einen Teil seiner Funktionen auszuführen. Zunächst meldet sich der Benutzer als Benutzer mit seinem eigenen Passwort an. Der Benutzer verwendet dann den folgenden Befehl, um myprog auszuführen .

sudo myprog

Das sudo prüft das Programm /etc/sudoers Datei und überprüft, ob der Benutzer myprog ausführen darf . Wenn ja, sudo fordert den Benutzer auf, sein eigenes Passwort einzugeben – nicht das Root-Passwort. Nachdem der Benutzer sein eigenes Passwort eingegeben hat, wird das Programm ausgeführt. sudo protokolliert auch die Fakten des Zugriffs auf myprog mit dem Datum und der Uhrzeit, zu der das Programm ausgeführt wurde, dem vollständigen Befehl und dem Benutzer, der es ausgeführt hat. Diese Daten werden in /var/log/security protokolliert .

Ich finde, dass das Protokoll jedes Befehls von sudo ausgeführt wird beim Training behilflich sein. Ich kann sehen, wer was gemacht hat und ob er den Befehl tatsächlich richtig eingegeben hat.

Ich habe dies getan, um die Befugnis zum Ausführen eines einzelnen Programms an mich und einen anderen Benutzer zu delegieren. Allerdings sudo kann für so viel mehr verwendet werden. Es kann dem Systemadministrator ermöglichen, die Befugnis zur Verwaltung von Netzwerkfunktionen oder bestimmten Diensten an eine einzelne Person oder an eine Gruppe vertrauenswürdiger Benutzer zu delegieren. Es ermöglicht, dass diese Funktionen delegiert werden, während die Sicherheit des Root-Passworts geschützt wird.

Konfiguration der sudoers-Datei

Als Systemadministrator kann ich die Datei /etc/sudoers verwenden Datei, um Benutzern oder Benutzergruppen Zugriff auf einen einzelnen Befehl, definierte Befehlsgruppen oder alle Befehle zu gewähren. Diese Flexibilität ist der Schlüssel zur Leistungsfähigkeit und Einfachheit der Verwendung von sudo für die Delegation.

Ich habe die gesamten sudoers kopiert Datei in Abbildung 1 von dem Host, auf dem ich es verwende, um es für Sie zu dekonstruieren. Ich fand es sehr verwirrend, als ich es zum ersten Mal begegnete. Hoffentlich wird es für Sie nicht ganz so obskur sein, wenn wir durchkommen. Ich finde es gut, dass Red Hat-basierte Distributionen dazu neigen, Standardkonfigurationsdateien mit vielen Kommentaren und Beispielen zu haben, um Anleitungen zu geben. Das macht die Sache einfacher, da viel weniger Googeln nötig ist.

Verwenden Sie nicht Ihren Standardeditor, um die sudoers zu ändern Datei. Verwenden Sie das visudo Befehl, da er so konzipiert ist, dass alle Änderungen aktiviert werden, sobald die Datei gespeichert ist und Sie den Editor verlassen. Neben vi können auch Editoren verwendet werden genauso wie visudo .

Beginnen wir mit der Analyse dieser Datei am Anfang mit ein paar Arten von Aliasnamen.

Host-Aliase

Der Abschnitt Host-Aliase wird verwendet, um Gruppen von Hosts zu erstellen, auf denen Befehle oder Befehls-Aliase verwendet werden können, um Zugriff zu gewähren. Die Grundidee ist, dass diese einzelne Datei für alle Hosts in einer Organisation verwaltet und nach /etc kopiert wird auf jedem Host. Einige Hosts, wie z. B. Server, können daher als Gruppe konfiguriert werden, um einigen Benutzern Zugriff auf bestimmte Befehle zu gewähren, z. B. die Möglichkeit, Dienste wie HTTPD, DNS, Netzwerke zu starten und zu stoppen, die Möglichkeit, Dateisysteme zu mounten und so weiter.
IP-Adressen können anstelle von Hostnamen in den Host-Aliassen verwendet werden.

## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
##
## Examples are provided at the bottom of the file for collections
## of related commands, which can then be delegated out to particular
## users or groups.
##
## This file must be edited with the 'visudo' command.

## Host Aliases
## Groups of machines. You may prefer to use hostnames (perhaps using
## wildcards for entire domains) or IP addresses instead.
# Host_Alias FILESERVERS = fs1, fs2
# Host_Alias MAILSERVERS = smtp, smtp2

## User Aliases
## These aren't often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname
## rather than USERALIAS
# User_Alias ADMINS = jsmith, mikem
User_Alias AUDIO = dboth, user

## Command Aliases
## These are groups of related commands...

## Networking
# Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool

## Installation and management of software
# Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum

## Services
# Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig

## Updating the locate database
# Cmnd_Alias LOCATE = /usr/bin/updatedb

## Storage
# Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount

## Delegating permissions
# Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp
 
## Processes
# Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall

## Drivers
# Cmnd_Alias DRIVERS = /sbin/modprobe

# Defaults specification
#
# Refuse to run if unable to disable echo on the tty.
#
Defaults !visiblepw
Defaults env_reset
Defaults env_keep =  "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS"
Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
## user MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root ALL=(ALL) ALL

## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL) ALL

## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL

## Allows members of the users group to mount and unmount the
## cdrom as root
# %users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom

## Allows members of the users group to shutdown this system
# %users  localhost=/sbin/shutdown -h now

## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d

################################################################################
# Added by David Both, 11/04/2017 to provide limited access to myprog #
################################################################################
#
AUDIO guest1=/usr/local/bin/myprog

Abbildung 1 :Eine Standard-Sudoers-Datei mit meinen Änderungen in Fettschrift.

Benutzeraliase

Die nächste Gruppe von Konfigurationsbeispielen sind Benutzeraliase. Dadurch kann root Benutzer in Alias-Gruppen sortieren, sodass einer ganzen Gruppe Zugriff auf bestimmte Root-Funktionen gewährt werden kann. Für das kleine Programm, das ich geschrieben habe, habe ich diesem Abschnitt den folgenden Alias ​​hinzugefügt, der den Alias ​​AUDIO definiert und weist diesem Alias ​​zwei Benutzer zu.

User_Alias AUDIO = dboth, ruser

Es ist möglich, wie in den sudoers angegeben Datei selbst, um einfach Linux-Gruppen zu verwenden, die in /etc/groups definiert sind Datei statt Aliase. Wenn Sie dort bereits eine Gruppe definiert haben, die Ihren Anforderungen entspricht, z. B. „Audio“, verwenden Sie diesen Gruppennamen, dem ein % vorangestellt ist Zeichen wie folgt:%audio beim Zuweisen von verfügbaren Befehlen zu Gruppen später in den sudoers Datei.

Befehlsaliase

Weiter unten die sudoers file ist ein Abschnitt mit Befehlsaliasen. Diese Aliase sind Listen verwandter Befehle wie Netzwerkbefehle oder Befehle, die zum Installieren von Updates oder neuen RPM-Paketen erforderlich sind. Diese Aliase ermöglichen es dem Systemadministrator, den Zugriff auf Befehlsgruppen einfach zu gewähren.

In diesem Abschnitt sind bereits eine Reihe von Aliasen eingerichtet, die es einfach machen, den Zugriff auf bestimmte Befehlstypen zu delegieren. Wir brauchen keine davon für unseren Anwendungsfall.

Umgebungsstandardwerte

Im nächsten Abschnitt werden einige standardmäßige Umgebungsvariablen eingerichtet. Das interessanteste Element in diesem Abschnitt ist !visiblepw Zeile, die sudo verhindert nicht ausgeführt werden, wenn die Benutzerumgebung so eingestellt ist, dass das Kennwort angezeigt wird. Dies ist eine Sicherheitsvorkehrung, die nicht außer Kraft gesetzt werden sollte.

Befehlsbereich

Dieser Abschnitt ist der Hauptteil der sudoers Datei. Alles Notwendige kann ohne alle Aliase erledigt werden, indem man hier genügend Einträge hinzufügt. Die Aliase machen es einfach viel einfacher, indem sie die bereits definierten Aliase verwenden, um sudo mitzuteilen wer darf was auf welchen hosts. Die Beispiele sind selbsterklärend, sobald Sie die Syntax in diesem Abschnitt verstanden haben. Schauen wir uns also die Syntax an, die wir im Befehlsabschnitt finden. In Abbildung 2 wir haben einen generischen Eintrag für unseren Benutzer ruser.

ruser ALL=(ALL) ALL

Abbildung 2 :Ein generischer Eintrag, der besagt, dass Benutzer jedes Programm auf jedem Host als beliebiger Benutzer ausführen können.

Das erste ALL in der Zeile gibt an, dass diese Regel für alle Hosts gilt. Das zweite ALL erlaubt dem Benutzer, Befehle wie jeder andere Benutzer auszuführen. Standardmäßig werden Befehle als Root-Benutzer ausgeführt, aber ruser kann auf sudo angeben Befehlszeile, dass ein Programm wie jeder andere Benutzer ausgeführt wird. Das letzte ALL bedeutet, dass der Benutzer alle Befehle uneingeschränkt ausführen kann. Dieser Eintrag würde ruser effektiv zu root machen. Wir werden diesen Eintrag nicht verwenden, weil wir nicht möchten, dass dieser Benutzer alle diese Fähigkeiten hat.

Beachten Sie, dass es einen Eintrag für root gibt, wie in Abbildung 3 gezeigt . Dieser Eintrag ermöglicht root den allumfassenden Zugriff auf alle Befehle auf allen Hosts.

root ALL=(ALL) ALL

Abbildung 3 :Ein Eintrag, der besagt, dass toot jedes Programm auf jedem Host als beliebiger Benutzer ausführen kann.
Aber natürlich musste ich das ausprobieren, also habe ich die Zeile in Abbildung 3 auskommentiert und als root versucht, chown auszuführen ohne sudo . Das hat funktioniert – sehr zu meiner Überraschung. Dann habe ich sudo chown verwendet und das schlug fehl mit der Meldung „root is not in the sudoers file. Dieser Vorfall wird gemeldet.“ Das bedeutet, dass root alles als root ausführen kann, aber nichts, wenn sudo verwendet wird Befehl. Dies würde root daran hindern, Befehle wie andere Benutzer über sudo auszuführen Befehl, aber root hat viele Möglichkeiten, diese Einschränkung zu umgehen.

Der Eintrag in Abbildung 4 ist derjenige, den ich hinzugefügt habe, um den Zugriff auf myprog zu kontrollieren . Es gibt an, dass Benutzer, die in der AUDIO-Gruppe aufgeführt sind, wie oben in sudoers definiert Datei haben Zugriff auf nur das eine Programm, myprog , auf einem Host, guest1.

AUDIO guest1=/usr/local/bin/myprog

Abbildung 4 :Dies ist der Eintrag, den ich hinzugefügt habe, um Benutzern, die Teil der AUDIO-Gruppe sind, Zugriff auf myprog zu gewähren auf dem Host guest1.

Beachten Sie die Syntax der Zeile in Abbildung 4 gibt nur den Host an, auf dem dieser Zugriff erlaubt werden soll, und das Programm. Es gibt nicht an, dass der Benutzer das Programm wie jeder andere Benutzer ausführen kann.

Passwörter umgehen

Abbildung 5 veranschaulicht die Verwendung von NOPASSWORD, um den in der Gruppe AUDIO angegebenen Benutzern zu erlauben, myprog auszuführen ohne dass sie ihre Passwörter eingeben müssen.

AUDIO guest1=NOPASSWORD : /usr/local/bin/myprog

Abbildung 5 :Dieser hypothetische Eintrag würde Benutzern, die Teil der AUDIO-Gruppe sind, Zugriff auf myprog gewähren ohne ihre Passwörter eingeben zu müssen.

Ich habe dies für mein Programm nicht getan, weil ich glaube, dass Benutzer mit sudo access muss aufhören und darüber nachdenken, was sie tun, und das kann dabei ein wenig helfen. Ich habe den Eintrag für mein kleines Programm nur als Beispiel verwendet.

Rad

Die Radspezifikation im Befehlsabschnitt des sudoers Datei wie in Abbildung 6 gezeigt ermöglicht allen Benutzern in der Wheel-Gruppe, alle Befehle auf jedem Host auszuführen. Die Radgruppe wird in /etc/group definiert Datei und Benutzer müssen der Gruppe dort hinzugefügt werden, damit dies funktioniert. Der % Zeichen vor dem Gruppennamen bedeutet, dass sudo nach dieser Gruppe in /etc/group suchen Datei.

%wheel ALL = (ALL) ALL

Abbildung 6 :Dieser Eintrag besagt, dass alle Benutzer, die Mitglieder der Wheel-Gruppe sind, wie in /etc/group definiert Datei kann alle Befehle auf jedem Host ausführen.

Dies ist eine gute Möglichkeit, den vollen Root-Zugriff an mehrere Benutzer zu delegieren, ohne das Root-Passwort anzugeben. Durch einfaches Hinzufügen eines Benutzers zur Wheel-Gruppe erhält dieser Zugriff auf die vollen Root-Befugnisse. Es bietet auch eine Möglichkeit, ihre Aktivitäten über die von sudo erstellten Protokolleinträge zu überwachen . Einige Distributionen wie Ubuntu fügen Benutzer-IDs zur Wheel-Gruppe in /etc/group hinzu was ihnen erlaubt, sudo zu verwenden Befehl, um alle privilegierten Befehle zu verwenden.

Anwendungsfall 2:Die Präsentation

Normalerweise denken wir bei Präsentationen an schicke Folien, die mit LibreOffice Impress oder PowerPoint, animierten Übergängen und Grafiken erstellt wurden, aber das muss nicht der Fall sein. Am 3. März dieses Jahres habe ich auf der Open Source 101 in Columbia, South Carolina, eine erweiterte Sitzung mit dem Titel „Using and Configure Bash“ präsentiert.

Nun, wenn Sie an einer langen Sitzung über die Verwendung von Bash teilnehmen, warum sollten Sie dann viele ausgefallene Folien sehen wollen? Ich persönlich möchte Bash im Einsatz sehen. Also habe ich ein Bash-Skript erstellt, das zu meiner Präsentation wurde. Ich bin keine schnelle oder genaue Schreibkraft, daher konnte ich auch alle Befehle, die ich demonstrieren wollte, in das Bash-Skript vorprogrammieren, sodass ich nur die Enter drücken musste Taste, um zur nächsten Folie mit Text zu wechseln oder einen Befehl zu erteilen. Das funktionierte sehr gut für mich und die Teilnehmer schienen es auch zu mögen, weil es ein wirklich guter Anwendungsfall für Bash-Skripte war.

Dies ist relevant, da nur einer der Befehle in diesem 1500-Zeilen-Bash-Shell-Skript Root-Rechte erforderte. Es wäre unglaublich unsicher, sich als root anzumelden und das gesamte Programm auszuführen. Was wäre, wenn ein Fehler auftreten würde, der einige wichtige Dateien auf Systemebene löscht oder verstümmelt? Als Systemadministrator und Bash-Programmierer bin ich nicht perfekt und Fehler passieren.

Die Antwort war also, das Programm als „Student“-Benutzer auszuführen und den sudo zu verwenden Befehl als Präfix für den einen Befehl, der privilegierten Zugriff erfordert. Selbst mitten in meiner Präsentation war die Eingabe des Passworts für den studentischen Benutzer einfach. Ich habe dies auch in meiner Präsentation als Beispiel für eine angemessene Verwendung von sudo verwendet .

Die Einrichtung für diesen Anwendungsfall ist dieselbe wie für den vorherigen Fall, nur mit anderen Benutzernamen und Befehlsnamen.

Abschließende Gedanken

Ich habe sudo verwendet in diesen Fällen für ein sehr begrenztes Ziel – einem oder zwei Benutzern den Zugriff auf einen einzigen Befehl zu ermöglichen. Ich habe dies mit zwei Zeilen erreicht, wenn Sie meine eigenen Kommentare ignorieren. Das Delegieren der Befugnis zum Ausführen bestimmter Aufgaben an Benutzer ohne Root-Zugriff ist einfach und kann Ihnen als Systemadministrator viel Zeit ersparen. Es kann auch die Sicherheit erheblich verbessern, indem der Zugriff auf bestimmte Befehle nur bei Bedarf gewährt wird.

Das sudo Der Befehl generiert auch Protokolleinträge, die bei der Erkennung von Problemen helfen können. Die sudoers file bietet eine Fülle von Möglichkeiten und Optionen zur Konfiguration. Überprüfen Sie den man Dateien für sudo und sudoers für die heruntergekommenen und schmutzigen Details.

[ Jetzt herunterladen:Eine Anleitung für Systemadministratoren zum Bash-Skripting. ]


Linux
  1. Führen Sie Container unter Linux ohne sudo in Podman aus

  2. Fügen Sie einen Linux-Benutzer mit Dokument-Root-Berechtigungen hinzu

  3. Wenn ich CPAN in Linux Ubuntu verwende, sollte ich es mit sudo / als root oder als meinen Standardbenutzer ausführen

  4. Führen Sie den cd-Befehl als Superuser unter Linux aus

  5. Android - Wie roote ich Samsung S6 mit Linux?

So führen Sie bestimmte Befehle ohne Sudo-Passwort in Linux aus

So führen Sie Linux-Apps unter Windows 10 und 11 mit WSL aus

So führen Sie einen Befehl regelmäßig unter Linux mit Watch aus

So blockieren Sie einen Port mit einer Firewall in Linux

Führen Sie Hintergrundprozesse in Linux mit dem Screen-Befehl aus

So führen Sie einen Alias ​​mit Sudo in Linux aus