GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux – Warum funktioniert Setuid nicht?

Für diese Frage gibt es hier bereits Antworten :Setuid auf Shell-Skripten zulassen

(10 Antworten)
Vor 6 Jahren geschlossen.

Ich möchte sicherstellen, dass mein Programm nur von Benutzer xyz ausgeführt werden kann mit Root-Privilegien. Dazu setze ich das setuid-Bit mit:

chmod u+s program1.sh
ls -l program1.sh
rwsr-x--- 1 root house 1299 May 15 23:54 program1.sh

Außerdem habe ich den Benutzer xyz hinzugefügt zum house gruppieren, sodass nur xyz und root kann program1.sh ausführen.

In program1.sh gibt es

id -u

damit es mir die gültige ID zeigen kann.

Ausführen von program1.sh als root wird root angezeigt . Aber läuft mit dem xyz Konto wird xyz angezeigt . Es scheint, dass es nicht mit Root-Rechten ausgeführt wurde. Ich weiß nicht, was hier falsch ist.

Akzeptierte Antwort:

Beim Ausführen von Shell-Skripten mit dem setuid-Bit (z. B. Perms von rwsr-xr-x) werden die Skripte als der Benutzer ausgeführt, der sie ausführt, und nicht als der Benutzer, dem sie gehören. Dies steht im Gegensatz zu der Behandlung von setuid für Binärdateien (z. B. /usr/bin/passwd), die als der Benutzer ausgeführt werden, der sie besitzt, unabhängig davon, welcher Benutzer sie ausführt.

Überprüfen Sie diese Seite:https://access.redhat.com/site/solutions/124693

Dies ist eine Sicherheitsmaßnahme des Betriebssystems. Sie sollten Ihr Skript mit sudo verwenden stattdessen.

Wenn Sie wirklich setuid in Ihrem Skript verwenden müssen, können Sie eine Binärdatei erstellen, die die Arbeit erledigt. Erstellen Sie eine neue Datei „program.c“ und kopieren Sie den folgenden Code:

   #include <stdio.h>
   #include <stdlib.h>
   #include <sys/types.h>
   #include <unistd.h>
     
   int main()
   {
     setuid(0);
     system("./program.sh"); #This line is dangerous: It allows an attacker to execute arbitrary code on your machine (even by accident).
     return 0;
   }

Kompilieren Sie den Code und führen Sie ihn mit den folgenden Befehlen aus:

$ gcc program.c -o program
$ sudo chown root.root program
$ sudo chmod 4755 program
$ ./program

Auf diese Weise wird es funktionieren. Die setuid funktioniert für kompilierte Dateien, und diese Datei kann andere Dateien als root ausführen.


Linux
  1. Linux Setuid funktioniert nicht?

  2. Warum funktioniert Tomcat mit Port 8080, aber nicht mit 80?

  3. Warum erkennt Windows keine Dateien in Linux-Partitionen?

  4. Automatische Wiederholung funktioniert nicht

  5. Warum funktioniert das Setuid-Bit inkonsistent?

Warum funktioniert der reguläre Ausdruck in X, aber nicht in Y?

Linux – Warum verwenden wir Su – und nicht nur Su?

Linux – Arch Linux:Pacman funktioniert beim Chrooten nicht?

Linux – Warum funktioniert Locale Es_mx, aber nicht Es?

Linux – Warum behält Rsync unter Linux nicht alle Zeitstempel (Erstellungszeit) bei?

Wie funktioniert Swap-Speicher in Linux?