Wie erstelle ich eine Setuid-Kopie eines Befehls?

355
cmal

Ich lese das Buch How Linux Worksund verstehe etwas nicht:

Auf normalen Linux-Systemen haben die meisten Prozesse dasselbe effective user IDund real user ID. Standardmäßig psund andere Systemdiagnoseprogramme zeigen die effective user ID. Um sowohl die effektiven als auch die realen Benutzer-IDs in Ihrem System anzuzeigen, versuchen Sie Folgendes: Seien Sie jedoch nicht überrascht, wenn Sie feststellen, dass die beiden Spalten mit den Benutzer-IDs für alle Prozesse in Ihrem System identisch sind:

$ ps -eo pid,euser,ruser,comm 

Um eine Ausnahme zu erstellen, damit Sie verschiedene Werte in den Spalten sehen können, versuchen Sie, zu experimentieren, indem Sie eine setuid-Kopie des sleep Befehls erstellen, die Kopie einige Sekunden lang ausführen und dann den vorhergehenden psBefehl in einem anderen Fenster ausführen, bevor die Kopie beendet wird.

Der Autor sagte try experimenting by creating a setuid copy of ...:, aber wie erstellt man eine setuid-Kopie des sleepBefehls? Vielen Dank.

0

1 Antwort auf die Frage

1
Kamil Maciorowski

Erstellen Sie zuerst eine Kopie an einem Ort, von dem aus Sie sie ausführen könnten (dh Dateisysteme, für die ein Dateisystem eingerichtet wurde, noexecsind nicht qualifiziert). Dies ist /tmp/in meinem Beispiel.

sudo cp /bin/sleep /tmp/ 

(Früher habe ich sudosichergestellt, dass die Kopie rootvon Anfang an gehört; dies spart mich sudo chown …später). Der folgende Befehl legt das Setuid-Bit für die Datei fest :

sudo chmod u+s /tmp/sleep 

Führen Sie es jetzt als normaler Benutzer im Hintergrund aus:

/tmp/sleep 300 & 

Dann überprüfen Sie die Ausgabe von ps:

ps -eo pid,euser,ruser,comm | grep sleep 

Das Ergebnis ist euserauf den Besitzer der Datei, ruserauf den auszuführenden Benutzer.

Hinweis: Denken Sie beim Spielen mit Setuid daran, dass es nicht mit Skripten funktioniert .