Heim  >  Artikel  >  Betrieb und Instandhaltung  >  So verwenden Sie den Sudo-Befehl im Linux-System

So verwenden Sie den Sudo-Befehl im Linux-System

王林
王林nach vorne
2023-05-14 15:01:205442Durchsuche

Zum Beispiel: Führen Sie einige Befehle wie mount, halt, su usw. aus oder bearbeiten Sie einige Systemkonfigurationsdateien wie /etc/mtab, /etc/samba/smb.conf usw. Auf diese Weise wird nicht nur die Anzahl der Root-Benutzeranmeldungen und die Verwaltungszeit reduziert, sondern auch die Systemsicherheit verbessert.

1. Merkmale von sudo

Die Rolle, die sudo spielt, erfordert, dass es in Bezug auf die Sicherheit besonders vorsichtig sein muss, da sonst illegale Benutzer Root-Rechte an sich reißen. Gleichzeitig muss auch die Benutzerfreundlichkeit berücksichtigt werden, damit Systemadministratoren es effizienter und komfortabler nutzen können. Das Ziel der Sudo-Designer bestand darin, den Benutzern so wenige Berechtigungen wie möglich zu geben und ihnen dennoch die Möglichkeit zu geben, ihre Arbeit abzuschließen. Daher hat sudo
die folgenden Eigenschaften:

# 1. sudo kann bestimmte Benutzer daran hindern, bestimmte Befehle auf bestimmten Hosts auszuführen.
# 2. sudo kann Protokolle bereitstellen, zuverlässig aufzeichnen, was jeder Benutzer mit sudo getan hat, und die Protokolle an den zentralen Host oder Protokollserver übertragen.
# 3. sudo stellt Konfigurationsdateien für Systemadministratoren bereit, sodass Systemadministratoren Benutzerberechtigungen und Hosts zentral verwalten können. Der Standardspeicherort ist /etc/sudoers.
# 4.sudo verwendet Zeitstempeldateien, um ein System ähnlich der „Ticketprüfung“ zu vervollständigen. Wenn der Benutzer sudo ausführt und das Passwort eingibt, erhält der Benutzer ein „Ticket“ mit einer Standardüberlebenszeit von 5 Minuten (der Standardwert kann während der Kompilierung geändert werden). Nach dem Timeout muss der Benutzer das Passwort erneut eingeben.

2. Sudo-Befehl

Das Sudo-Programm selbst ist eine Binärdatei mit gesetztem Suid-Bit. Wir können seine Berechtigungen überprüfen:

Kopieren Sie den Code. Der Code lautet wie folgt:


$ls -l /usr/bin/sudo
---s--x--x 2 root root 106832 02-12 17 :41 /usr/bin/sudo

Sein Besitzer ist Root, sodass jeder Benutzer das Programm als Root ausführen kann. Ein Programm mit festgelegter suid kann dem Benutzer beim Ausführen die Euid des Besitzers mitteilen. Deshalb müssen Programme, die suid setzen, sorgfältig geschrieben werden. Aber das Festlegen der suid einer Befehlsdatei und deren Ausführung mit sudo sind unterschiedliche Konzepte und spielen unterschiedliche Rollen.

Sudo-Konfigurationen werden in der Datei /etc/sudoers aufgezeichnet, die wir im Folgenden ausführlich erläutern. Konfigurationsdateien legen fest, welche Benutzer welche Befehle ausführen können. Um sudo verwenden zu können, muss der Benutzer einen bestimmten Benutzernamen und ein bestimmtes Passwort angeben. Hinweis: Für sudo ist nicht das Passwort des Zielbenutzers erforderlich, sondern das Passwort des Benutzers, der sudo ausführt. Wenn ein Benutzer, der nicht in sudoers ist, einen Befehl über sudo ausführt, meldet sudo dieses Ereignis dem Administrator. Benutzer können mit sudo -v prüfen, ob sie zu den Sudoern gehören. Wenn ja, kann es auch die Zeit auf Ihrem „Ticket“ aktualisieren; andernfalls werden Sie zwar dazu aufgefordert, der Administrator jedoch nicht benachrichtigt. Das

sudo-Befehlsformat lautet wie folgt:

Code kopieren Der Code lautet wie folgt:


sudo -k -l -v -h -k -l -vsudo [-hpsb] [-a auth_type] [-c class-] [- p prompt] [-u username#uid] {-e file [...] -i -s command}

Werfen wir einen Blick auf einige andere häufig verwendete Parameter von sudo:

Option Bedeutung Funktion
sudo-hhelp-Spalte Verwendung anzeigen und beenden.
sudo-vversion zeigt Versionsinformationen an und wird beendet.
sudo-llist listet Befehle auf, die der aktuelle Benutzer ausführen kann. Nur Benutzer in Sudoers können diese Option verwenden.
sudo-uusername#uiduser führt den Befehl als angegebener Benutzer aus. Die folgenden Benutzer sind keine Root-Benutzer und können Benutzernamen oder #uid sein.

sudo-kkill löscht die Zeit auf der „Eintrittskarte“ und fordert Sie bei der nächsten Verwendung von sudo zur erneuten Eingabe des Passworts auf.

sudo-ksurekill ähnelt -k, zerreißt aber auch die „Eintrittskarte“, also die Zeitstempeldatei.

sudo-bcommandbackground führt den angegebenen Befehl im Hintergrund aus.

sudo-ppromptcommandprompt kann die Passwortabfrage ändern, wobei %u durch den Namen des Benutzerkontos ersetzt wird und %h den Hostnamen anzeigt. Sehr benutzerfreundliches Design.
sudo-efileedit führt keinen Befehl aus, sondern ändert Dateien, was dem Befehl sudoedit entspricht.

Es gibt auch einige weniger häufig verwendete Parameter, die in der Manpage sudo(8) zu finden sind.

3. Sudo konfigurieren

Die Konfiguration von sudo muss durch Bearbeiten der Datei /etc/sudoers erfolgen, und nur Superuser können sie ändern, und sie muss auch mit visudo bearbeitet werden. Es gibt zwei Gründe, warum visudo verwendet wird: Zum einen kann es verhindern, dass zwei Benutzer gleichzeitig Änderungen vornehmen. Zum anderen kann es auch eine eingeschränkte Syntaxprüfung durchführen. Selbst wenn Sie der einzige Superuser sind, sollten Sie also besser visudo verwenden, um die Syntax zu überprüfen.

Visudo öffnet standardmäßig die Konfigurationsdatei in vi und verwendet vi, um die Datei zu ändern. Wir können dieses Standardelement zur Kompilierungszeit ändern. visudo speichert Konfigurationsdateien mit Syntaxfehlern nicht ohne Autorisierung. Es zeigt Ihnen die Probleme an und fragt Sie, wie Sie damit umgehen sollen, z. B.:


Kopieren Sie den Code. Der Code lautet wie folgt:

>>> sudoersfile:syntaxerror ,line22<<



An diesem Punkt haben wir drei Möglichkeiten: Geben Sie „e“ ein, um die Bearbeitung erneut durchzuführen, geben Sie „x“ ein, um den Vorgang ohne Speichern zu beenden, und geben Sie „q“ ein, um den Vorgang zu beenden und zu speichern. Wenn q ausgewählt ist, wird sudo nicht erneut ausgeführt, bis der Fehler behoben ist.

Werfen wir nun einen Blick auf die mysteriöse Konfigurationsdatei und lernen, wie man sie schreibt. Beginnen wir mit einem einfachen Beispiel: Lassen Sie den Benutzer foobar alle ausführbaren Root-Befehle über sudo ausführen. Öffnen Sie die Konfigurationsdatei mit visudo als Root, und Sie sehen Zeilen ähnlich der folgenden:

Kopieren Sie den Code. Der Code lautet wie folgt:


#runasaliaspecification
#userprivilegeSpezifikationrootall=(all)all

Wir können verstehen Auf einen Blick hat Root alle Berechtigungen. Wir fügen unten eine Zeile hinzu (am besten verwenden Sie Tab als Leerzeichen):

Kopieren Sie den Code. Der Code lautet wie folgt:


foobarall =(all)all


Speichern Wechseln Sie nach dem Beenden zum foobar-Benutzer, und wir verwenden seine Identität, um den Befehl auszuführen:

Kopieren Sie den Code. Der Code lautet wie folgt:


[foobar@localhost~] $ls/root
ls:/root: Unzureichende Berechtigungen
[foobar@localhost ~]$sudols/root
password:
anaconda-ks.cfgdesktopinstall.loginstall.log.syslog

Okay, schränken wir die Rechte von foobar ein und verhindern ihn davon ab, zu tun, was er will. Wir möchten zum Beispiel nur, dass er ls und ifconfig wie root verwendet. Ändern Sie diese Zeile in:

Kopieren Sie den Code. Der Code lautet wie folgt:


foobarlocalhost=/sbin/ifconfig,/bin/ls


Führen Sie den Befehl erneut aus:

Code kopieren Der Code lautet wie folgt:


[foobar@localhost~]$sudohead-5/etc/shadow
Passwort:
sorry,userfoobarisnotallowedtoexecute'/usr/bin/head-5/ etc/shadow'asrootonlocalhost.localdomain.
[foobar@localhost~]$sudo/sbin/ifconfigeth0linkencap:ethernethwaddr00:14:85:ec:e9:9b...


Werfen wir nun einen Blick auf diese drei bedeuten. Das erste bezieht sich auf den Host im Netzwerk. Wir haben es später in den Hostnamen geändert. Es zeigt an, dass
foobar nachfolgende Befehle auf diesem Host ausführen kann. Das „All“ in der zweiten Klammer bezieht sich auf den Zielbenutzer, also auf die Identität, die den Befehl ausführen soll. Das letzte
all ist natürlich der Befehlsname. Wir möchten beispielsweise, dass der Benutzer foobar den Kill-Befehl als Jimmy oder Rene auf dem Linux-Host ausführt und die Konfigurationsdatei wie folgt schreibt:

foobarlinux=(jimmy,rene)/bin/kill
Aber es gibt immer noch ein Problem. Wird es als Jimmy oder Rene ausgeführt? Zu diesem Zeitpunkt sollten wir an sudo-u denken, das genau zu diesem Zeitpunkt verwendet wird. foobar kann sudo-ujimmykillpid oder sudo-urenekillpid verwenden, aber das ist sehr mühsam. Tatsächlich müssen wir nicht jedes Mal -u hinzufügen, sondern einfach rene oder jimmy als Standardzielbenutzer festlegen. Fügen Sie oben eine weitere Zeile hinzu:

defaults:foobarrunas_default=rene
Wenn nach den Standardeinstellungen ein Doppelpunkt steht, ist dies die Standardeinstellung für nachfolgende Benutzer. Wenn nicht, ist dies die Standardeinstellung für alle Benutzer. Genau wie die Zeile, die mit der Konfigurationsdatei geliefert wird:

defaultsenv_reset
Ein weiteres Problem besteht darin, dass wir oft bereits angemeldet sind und es umständlich ist, das Passwort jedes Mal einzugeben, wenn wir sudo verwenden. Können wir aufhören, Passwörter einzugeben? Natürlich können wir die Konfigurationsdatei wie folgt ändern:

foobarlocalhost=nopasswd:/bin/cat,/bin/ls
Lassen Sie uns noch einmal sudo ausführen:

Kopieren Sie den Code. Der Code lautet wie folgt:


[foobar@ localhost~]$sudols/rootanaconda -ks.cfgdesktopinstall.log

install.log.syslog

Natürlich können Sie mit dem Operator ! auch sagen: „Einige Befehle können nicht als Benutzer foobar ausgeführt werden“, aber das ist nicht der Fall eine gute Idee. Da die Verwendung des !-Operators zum „Entfernen“ einiger Befehle im Allgemeinen keine Wirkung hat, kann ein Benutzer diesen Befehl an eine andere Stelle kopieren, seinen Namen ändern und ihn dann ausführen.
4. Protokolle und Sicherheit

sudo legt großen Wert auf Sicherheit. Es kann nicht nur Protokolle aufzeichnen, sondern bei Bedarf auch dem Systemadministrator Bericht erstatten. Die Protokollierungsfunktion von sudo erfolgt jedoch nicht automatisch und muss vom Administrator aktiviert werden. Machen Sie es so:

Kopieren Sie den Code. Der Code lautet wie folgt:


#touch/var/log/sudo
#vi/etc/syslog.conf

Fügen Sie eine Zeile am Ende von syslog.conf hinzu (muss durch Tabulator getrennt werden) Und speichern:

local2.debug/var/log/sudo
Starten Sie den Log-Daemon-Prozess neu,

psauxgrepsyslogd
Geben Sie die erhaltene PID des Syslogd-Prozesses ein (die zweite Spalte der Ausgabe ist die pid) wie folgt:

kill–huppid
Auf diese Weise kann sudo /log/sudojul2822:52:54localhostsudo:foobar:
tty=pts/1;pwd=/home/foobar;user=root;command=/ protokollieren bin/ls/root

Es gibt jedoch einen kleinen „Fehler“, die Sudo-Protokollierung ist nicht sehr zuverlässig:


Code kopieren Der Code lautet wie folgt:



[foobar@localhost~]$sudocat/etc/ shadow>/dev/null
[foobar@localhost~]$
cat/var/ log/sudo...jul2823:10:24localhostsudo:foobar:tty=pts/1;pwd=/home/foobar;user=root ;command=/bin/cat/etc/shadow


Weiterleitungen werden nicht protokolliert! Warum? Da die Shell die Umleitung abgeschlossen hat, bevor der Befehl ausgeführt wird, sieht sudo die Umleitung überhaupt nicht. Dies hat auch einen Vorteil, die folgenden Methoden werden nicht erfolgreich sein:

Kopieren Sie den Code. Der Code lautet wie folgt:


[foobar@localhost~]$sudols/root>/etc/shadowbash:/etc/shadow: Unzureichende Berechtigungen


sudo hat seine eigene Art, die Sicherheit zu schützen. Führen Sie sudo
-v als Root aus, um die Sudo-Einstellungen zu überprüfen. Aufgrund von Sicherheitsproblemen werden einige Umgebungsvariablen nach sudo nicht an den Befehl übergeben oder nach Prüfung übergeben, z. B. Pfad, Home,
Shell usw. Natürlich können Sie diese Umgebungsvariablen auch über Sudoers konfigurieren.

Das obige ist der detaillierte Inhalt vonSo verwenden Sie den Sudo-Befehl im Linux-System. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen