Dies beantwortet die Frage nicht direkt, aber ich denke nicht, dass hier die richtige Frage gestellt wird. Mir scheint, der Fragesteller möchte ein Programm, das sich vermutlich anders verhält, wenn es bestimmte Berechtigungen hat oder nicht. Ich würde jedoch argumentieren, dass das Überprüfen auf sudo nicht der richtige Weg ist. Erstens können viele Systeme kein "sudo" implementieren, es ist auf keinen Fall unter Linux oder vielen Unixen erforderlich.
Beispielsweise ist ein Benutzer möglicherweise bereits als root angemeldet, was das sudo unsinnig macht, oder das System verfügt möglicherweise über Benutzer ohne Rootberechtigung, die weiterhin die vom Programm gewünschten Verwaltungsaufgaben ausführen können. Schließlich hat das System vielleicht überhaupt kein root oder sudo und verwendet stattdessen ein obligatorisches Zugriffskontrollsystem mit unterschiedlichen Fähigkeiten und keinen Zugriff auf alle Superuser, in die sudo soll. Oder der Benutzer kann sudoed werden, aber aus Sicherheitsgründen in ein Konto, das -less- Berechtigungen als sein eigenes Konto hat (Ich führe häufig nicht vertrauenswürdigen Code mit einem temporären nichtprivilegierten Benutzer aus, der nur auf RAM-Disks schreiben kann, um meine Berechtigungen zu löschen, nicht aber zu erhöhen ). Es ist insgesamt eine schlechte Idee, ein bestimmtes Berechtigungsmodell wie sudo oder das Vorhandensein von root anzunehmen oder anzunehmen, dass ein sudo-Benutzer über bestimmte Berechtigungen verfügt.
Wenn Sie herausfinden möchten, ob Sie über Berechtigungen zum Ausführen eines Vorgangs verfügen, versuchen Sie es in der Regel einfach und überprüfen Sie errno auf Berechtigungsprobleme, wenn der Vorgang fehlschlägt oder wenn es sich um einen mehrstufigen Vorgang handelt, bei dem entweder alle fehlschlagen oder alle erfolgreich sind Sie können überprüfen, ob eine Operation mit Funktionen wie der POSIX- Zugriffsfunktion funktioniert (achten Sie hier auf mögliche Rennbedingungen, wenn Berechtigungen aktiv geändert werden).
Wenn Sie zusätzlich den tatsächlichen Benutzer hinter dem sudo kennen müssen, können Sie die getlogin- Funktion verwenden, die für jede interaktive Sitzung mit einem zugrunde liegenden Terminal funktionieren sollte und es Ihnen beispielsweise ermöglichen würde, herauszufinden, wer den Befehl für die Prüfung „wirklich“ ausführt, oder die Funktion zu finden Ausgangsverzeichnis des realen Benutzers zum Speichern von Protokollen.
Wenn Sie wirklich herausfinden möchten, ob ein Benutzer über Root-Zugriff verfügt (immer noch eine schlechte Idee, aber weniger implementierungsspezifisch), können Sie getuid verwenden , um nach einer UID von 0 und damit root zu suchen.