Gibt es eine Möglichkeit, festzustellen, ob ich als normaler Benutzer das Recht habe, einen Befehl zu erteilen?
Beispielsweise; Ich möchte überprüfen, ob ich das Recht habe, den Befehl shutdown abzusetzen, bevor ich ihn tatsächlich absetze.
Sowas wie die folgenden Befehle
-> doIhaveRightToIssue shutdown
-> Yes/No
command-line
permissions
Bernhard Colby
quelle
quelle
sudo
) zu versuchen und es herauszufinden. Möglicherweise werden Befehle im Textmodussudo
und grafische Befehle benötigtgksudo
. Sie können auch überprüfen, wo der Befehl installiert istwhich command
. Wenn in/sbin
oder/usr/sbin
- können Sie erwarten, dass der Befehlsudo
oder benötigtgksudo
.Antworten:
Der einfachste Fall ist der einer ausführbaren Binärdatei
gzip
. Zuerst suchen wir die ausführbare Datei:Dann schauen wir uns die Attribute dieser Datei an:
Die drei x zeigen an, dass die Datei vom Eigentümer (der ersten
root
) oder von jedem in der Grupperoot
(der zweitenroot
) bzw. von jedem anderen ausgeführt werden kann. Ihr Benutzer darf also das Programm ausführen.Ihre ausführbare Datei kann jedoch eine Skriptdatei sein, die andere ausführbare Dateien aufruft. Möglicherweise können Sie das Skript ausführen, jedoch nicht die darin aufgerufenen Programme. Es gibt keine Möglichkeit festzustellen, ob Ihr Benutzer dazu berechtigt ist, außer es tatsächlich auszuprobieren.
Dann gibt es spezielle Fälle wie
shutdown
- dies ist wirklich eine symbolische Verknüpfung zu einem so genannten Kerndienstprogrammsystemctl
, das über eigene Mechanismen verfügt, um festzustellen, ob Sie es aufrufen dürfen, und um Sie nach Ihrem Sudo-Passwort zu fragen, wenn Sie dies nicht tun .(Über den
which
Befehl: Hiermit werden ausführbare Dateien in Ihrem $ PATH gesucht, die Sie ausführen dürfen, und es wird angegeben, welche Sie verwenden, wenn Sie mehr als eine Datei mit demselben Namen im $ PATH haben. Es werden nicht nur alle ausführbaren Dateien gesucht. I Verwenden Sie es hier als Beispiel für die Suche nach der Berechtigung. Die Tatsache, dasswhich
die ausführbare Datei bereits gefunden wird, zeigt an, dass Sie über die Berechtigung zum Ausführen verfügen.)quelle
which
Der Befehl sollte für die Dateien ausreichen, die sich in einem der der$PATH
Variablen hinzugefügten Verzeichnisse befinden . Zum Beispiel bewirktsudo chmod 700 /bin/nano
oder , dass keine Ausgabe erzeugt wird. Bei lokalen Skripten, die sich nicht in einem der Verzeichnisse befinden, oder bei Aufrufen ist dies ausreichend. Gute Antwort, aber bitte fügen Sie diese Information zu Ihrem Beitrag hinzusudo chmod 744 nano
which
PATH
ls -l
stat
stat -c '%a' /bin/gzip
und nehmen Sie755
zum Beispiel so etwas wie .Mit
sudo
:Wenn ich keine Erlaubnis hatte,
sudo
werde ich mich beschweren, anstatt den Befehl zu zeigen.Mit polkit suchen Sie nach der Aktion, die Sie ausführen möchten:
Das Finden der relevanten Aktion ist eine andere Frage.
quelle
sudo -l
auch wenn Sie kein Sudoer sind - das ist der springende Punkt-l
-, um festzustellen, ob Sie einen Befehl mit sudo ausführen können.Sie können verwenden:
command -v shutdown
Gibt den Pfad zumshutdown
Befehl zurück.test -x
prüft, ob dieser Pfad für Sie ausführbar ist.Beachten Sie, dass der Befehl möglicherweise fehlschlägt, obwohl Sie ihn möglicherweise ausführen können, da er nicht über die erforderliche Berechtigung zum Ausführen der Aufgabe verfügt. Dies ist der häufigste Fall bei Unix-Systemen, bei denen der Zugriff auf Befehle nicht eingeschränkt, sondern auf die Vorgänge beschränkt wird, die Programme tatsächlich ausführen können.
quelle
alias shutdown="shutdown now"
?$(which shutdown)
oder verwenden$(shopt -u expand_aliases && command -v shutdown)
. Dieses Problem tritt jedoch nur im interaktiven Modus auf.Nun, es kann manchmal ein bisschen schwierig sein ...
Schauen Sie sich zunächst die Berechtigungen an mit
ls -l
...Wenn das letzte / dritte Triplet ein x ("kann ausführen") enthält, dann können andere - und das bedeutet, Sie - es ausführen ... Wenn es ein Shell-Skript oder ähnliches ist, dann benötigen andere r (" kann auch lesen ").
Wenn andere keine Ausführungsberechtigung haben, aber group (das zweite Triplet), können Sie sie ausführen, wenn Sie Mitglied der Gruppe sind - im Beispiel über bin . Zum Beispiel kann das Rad wird -group oft Grenze verwendet , die ausgeführt werden können
su
, so dass nur zu dieser Gruppe gehören Benutzer es überhaupt ausführen können. Ein anderes Beispiel ist die Erstellung einer Gruppe für Entwickler und die Beschränkung der Ausführung des C-Compilers und solcher Tools auf diese Gruppe.Wenn nach dem letzten Triplet ein abschließendes + steht, bedeutet dies, dass AccessControllLists verwendet werden. Dadurch können zusätzliche Benutzer und Gruppen Ausführungsrechte erhalten.
+++
Selbst wenn Sie den Befehl ausführen können, hängt der Befehl möglicherweise vom Zugriff auf Dateien, Verzeichnisse und / oder Geräte ab, auf die Sie keinen Zugriff haben etwas tun).
Schließlich kann es vorkommen, dass Sie einen Befehl ausführen dürfen, der Befehl selbst jedoch Ihre Identität überprüft und die Verwendung verweigert, es sei denn, Sie sind in einer Konfigurationsdatei aufgeführt oder es handelt sich um bestimmte Benutzer (z. B. root ). Zum Beispiel
mount
erlaubt der Befehl nur root , ein Gerät zu mounten - normale Benutzer dürfen nur Geräte mounten, die als solche in / etc / fstab ... aufgeführt sind, die möglicherweise keine sind. Wenn Sie nicht als Root angemeldet sind und versuchen, etwas zu mounten,mount
werden Sie sich beschweren und sich weigern, das Gerät zu mounten. Ein anderes Beispiel istsudo
, das für jeden läuft, aber nur Benutzer, die in / etc / sudoers aufgelistet sind, dürfen tatsächlich Dinge als root ausführen .quelle
Mit
which
,type
,command
usw. ist eine praktische Lösung , die in 99% der Fälle funktioniert, aber 100% sicher sein , werden Sie manuell alle ausführbaren Verzeichnis aufgeführt in Ihrem überprüfen müssen$PATH
. Viele Shells (einschließlichbash
) werden Ihrem Befehl Einträge von voranstellen$PATH
und versuchen, diese Dateien so oft auszuführen, bis sie erfolgreich sind. Dawhich
der Befehl nicht wirklich ausgeführt werden kann, kann er nicht vorhersagen, welche Datei Ihre Shell wirklich auswählt.Stellen Sie sich zum Beispiel vor, ich habe
PATH=/opt/arm/bin:/bin
beide Verzeichnisse mit ausführbaren Dateien, aber für unterschiedliche Architekturen. Runningwhich dd
kehrt zurück/opt/arm/bin/dd
(vorausgesetzt, ich habe die Berechtigung, es auszuführen), da dieser Eintrag an erster Stelle steht. Wenn ich jedochdd
in meiner Shell laufe ,/bin/dd
wird ausgeführt, weil/opt/arm/bin/dd
nicht ausgeführt werden kann. Die gleiche Situation kann bei beschädigten Binärdateien, fehlenden Bibliotheken usw. auftreten. Letztendlich gibt es keine sichere Möglichkeit, festzustellen, ob Sie einen Befehl ausführen können oder nicht, außer wenn Sie es versuchen.Ein weiterer Aspekt ist, was Sie als "mit Berechtigungen" betrachten. Als Benutzer habe ich die Berechtigung zum Ausführen,
rm ~/file
jedoch nichtrm /root/file
. Auch hier gibt es keinen generellen Weg, dies zu wissen, ohne die manuelle Überprüfung oder das Ausgeben des Befehls und das Beobachten der Ergebnisse.quelle