Schnell überprüfen, ob sudo Berechtigungen zur Verfügung stehen
Frage
Ich möchte in der Lage sein, schnell zu prüfen, ob ich beide sudo Zugang und Passwort hat, ist bereits authentifiziert. Ich bin nicht besorgt über sudo Zugang speziell für den Betrieb mit ich bin zu führen, aber das wäre ein schöner Bonus.
Insbesondere was ich versuche, diese zu verwenden, um ein Skript, das ich durch eine Reihe von Benutzern runnable sein will. Einige haben sudo Zugang. Alle wissen das root-Passwort.
Wenn sie mein Skript ausführen, ich will es sudo-Berechtigungen verwenden, ohne ein Kennwort eingeben müssen, wenn das möglich ist, und sonst zu fragen, fallen zurück für die root Passwort (weil sie vielleicht nicht haben sudo-Zugriff).
Mein erster Nicht-Arbeits Versuch war sudo -S true
abzweigen mit STDIN geschlossen oder das Lesen von / dev / null. Aber das fordert nach wie vor für das Kennwort und wartet ein paar Sekunden.
Ich habe einige andere Dinge ausprobiert, darunter warten 0.3sec, um zu sehen, ob es sofort gelungen, aber alles, was ich versuche, endet in irgendeiner Situation versagt werden. (Und nicht, weil mein Timeout zu kurz.) Es ist schwierig, herauszufinden, was vor sich geht, denn ich kann nicht einfach strace wie ich normalerweise tun würde.
Eine Sache I wissen nicht funktioniert, ist STDIN zu schließen oder es an einem Rohr zu befestigen, bevor sudo -S true
läuft. Ich hatte gehofft, das würde das Passwort machen prompt sofort fehlschlagen, aber es fordert nach wie vor und verhält sich seltsam. Ich denke, es könnte ein Terminal wollen.
Lösung
Bei neueren Versionen von sudo
gibt es eine Option für diesen Zweck:
sudo -n true
Ich benutze true
hier für einen no-op, aber man kann jeden Befehl verwenden.
Andere Tipps
Ich weiß nicht, was der letzte Grund für die Notwendigkeit, dies zu tun, aber ich denke, vielleicht müssen Sie möglicherweise überdenken, was der Hauptgrund ist. komplizierte, ungewöhnliche Dinge mit Berechtigungen führt häufig zu Sicherheitslücken zu tun versuchen.
Genauer gesagt, was auch immer es ist das Skript versucht, besser mit setuid getan zu tun könnte statt sudo. (Ich würde auch fragen, warum so viele Menschen das root-Passwort haben. Sudo ist es speziell die Menschen das root-Passwort zu vermeiden.)
getent group admin | grep $particular_user
Sie könnten verwenden whoami um den aktuellen Benutzer zu erhalten.
Edit: Aber das hilft Ihnen nicht, wenn Sie noch Aufgaben zu tun sudo sind authed ... Hmm ..
Ausführen
sudo -S true < /dev/null &>/dev/null
scheint zu funktionieren, obwohl es für eine Sekunde verzögert, bevor ein Fehler.