Setuid binär vorübergehend ohne setuid ausführen?

7

Derzeit wird xpra eingerichtet, das eine X-Instanz als Nicht-Root mit dem Dummy-Treiber ausführen möchte, aber die System-Xorg-Binärdatei ist SUID. Da das System automatisch aktualisiert wird, würde ich es vorziehen, keine Nicht-SUID-Kopie der Binärdatei zu erstellen und zu verwalten. Ich versuche auch zu vermeiden, einen Hack wie Copy-Execute-Delete zu verwenden, z. B. im tmp-Verzeichnis (würde es vorziehen, ihn zu einem sauberen Einzeiler zu machen, was ich instinktiv für möglich halte, obwohl es möglicherweise eine subtile Sicherheitslücke gibt diese Fähigkeit würde sich öffnen). Symlinks wären akzeptabel, obwohl AFAIK keine Berechtigungsbitmaskierungsfunktionen bietet.

Meine derzeit beste Lösung ist ein Nosuid-Bind-Mount im bin-Verzeichnis, was den Trick zu tun scheint, aber wie oben würde ich immer noch eine Lösung bevorzugen, die keinen Crunk in meinem Systembaum / fstab hinterlässt (z. B. eine magische Umgebungsvariable, die dies tut Deaktiviert suid auf die gleiche Weise wie ein Nosuid-Mount oder führt ein Befehlszeilen-Jutsu aus, das den suid-Mechanismus umgeht.

Irgendwelche Gedanken?

user22839
quelle
mach eine Kopie und chmodes oder so.
Mikeserv

Antworten:

3

Wenn Xes dynamisch verknüpft ist, können Sie den dynamischen Linker wie folgt aufrufen:

/lib/ld.so /path/to/X

( ld.soan Ihr System anpassen (wie /lib/ld-linux.so.2).

Beispiel:

$ /lib64/ld-linux-x86-64.so.2 /bin/ping localhost
ping: icmp open socket: Operation not permitted
Stéphane Chazelas
quelle
2

Wenn Sie strace, und es ist nicht zu root setuid, dann

strace -e '! all' Programmname [ Argument (e) ]

sollte arbeiten.  strace (1) sagt (unter BUGS):

Programme, die das Bit setuid verwenden, verfügen während der Ablaufverfolgung nicht über effektive Benutzer-ID-Berechtigungen.

weil es ein Sicherheitsproblem wäre, wenn ein nicht privilegierter Benutzer ein Setuid-Programm verfolgen könnte (weil Sie mit der Verfolgung den Speicher des Prozesses untersuchen und ändern können). In einem speziellen Abschnitt namens SETUID INSTALLATION wird jedoch das oben Gesagte ein wenig abgesichert:

Wenn straceauf root setuid installiert, dann ... setuid und setgid - Programme werden mit den richtig effektiv Rechten ausgeführt und verfolgt werden. ... nur Benutzer, denen die vollen Root-Rechte vertraut sind, sollten diese Dinge tun dürfen, ...

Wenn stracealso setuid auf root installiert ist, funktioniert der obige Trick nicht. Dies sollte jedoch im Allgemeinen nicht der Fall sein. Und selbst wenn dies der Fall ist, können Sie dies umgehen, indem Sie eine private, nicht SUID-Kopie von erstellen strace. (Ich denke, selbst wenn es /bin/straceautomatisch aktualisiert wird, sollten Sie Ihre private Kopie nicht aktualisieren müssen .)

Wie für den Befehl, -eerzählt , stracewas e Lüftungsöffnungen zu verfolgen.  -e allwürde bedeuten "Alle Ereignisse verfolgen" (dies ist die Standardeinstellung), -e '!all'bedeutet also "Keine verfolgen". 1   Dies sollte straceeffektiv dazu führen, dass Sie nur bereitstehen und beobachten, wie Ihr Programm (das X-Programm) ausgeführt wird. Wenn es trotzdem zu unerwünschter Ausgabe kommt, leiten Sie die Ausgabe an um /dev/null. (Dies setzt voraus, dass Sie die Konsolenausgabe vom X-Server nicht sehen müssen.)
________________
1 Sie müssen wahrscheinlich ein Anführungszeichen setzen !all , um zu verhindern, dass die Shell die !als Verlaufsreferenz behandelt .

Scott
quelle