Das Programm, das ich ausführe, benötigt root privledges und wird daher mit sudo
ausgeführt, aber es muss auch wissen, welcher Benutzer es ausführt. getuid
und geteuid
beide zurück root
. Wie erhalte ich den Benutzernamen (oder die Benutzer-ID)?Wie bekomme ich die Benutzer echte UID, wenn das Programm mit Sudo ausgeführt wird?
Danke!
Ich hasse wirklich die Verwendung von Umgebungsvariablen, gibt es einen anderen Weg? (Der Hauptgrund, warum ich sie hasse, ist, weil sie nicht zuverlässig sind: von einem Sicherheits-POV oder einem kompatiblen POV) – chacham15
Die Umgebungsvariablen sollten vertrauenswürdig sein - Sie müssen 'sudo' vollständig vertrauen, um es auf diese Weise zu verwenden.Jeder Angriff gegen 'sudo', der marginal vertrauenswürdigen Benutzern erlaubt, Programme mit modifizierten Umgebungsvariablen auszuführen, wird den Fokus von Dutzenden von Sicherheitsteams auf der ganzen Welt bringen, um den Fehler zu beheben (oder das Feature zu entfernen, wenn es nicht behoben werden kann). Was die Kompatibilität anbelangt, ist dies tragbarer als die andere Option, an die ich gerade gedacht habe - sie wurde separat für ihre eigenen Kommentare beantwortet. Und das ist wahrscheinlich sicherer als das Schreiben eines eigenen setuid-root-Programms. – sarnold
Das Sicherheitsproblem, auf das ich Bezug nehme, stammt entweder von anderen Programmen, die auf dem System laufen, oder von Plugin-Code, der Umgebungsvariablen ändern kann. Aber wenn man sieht, wie die andere Lösung nicht funktioniert, werde ich wahrscheinlich damit anfangen und die Variable selbst beim Programmstart zwischenspeichern (also hoffentlich wird sie vorher niemand modifizieren). – chacham15