Es gibt keinen Systemaufruf, bei dem ein Prozess Root-Berechtigungen erhalten kann. Sie könnten erwarten, dass seteuid
auf diese Weise funktioniert, aber es kann nur von Prozessen mit Root-Prozessen verwendet werden (unprivilegierte Prozesse können nur die euid gleich der uid setzen).
sudo
ist speziell, weil seine ausführbare Datei setuid Berechtigungen hat. Dies bedeutet, dass wenn ausgeführt wird, es als der Benutzer ausgeführt wird, der es besitzt (root), anstatt den Benutzer, der es ausführt. sudo
kann überprüfen, ob Sie Root-Zugriff haben, indem Sie Ihr Passwort überprüfen und eine Konfigurationsdatei lesen. Wenn die Prüfung erfolgreich ist, ruft sie fork
und execve
auf, um den angeforderten Befehl auszuführen.
Um root-Privilegien in einer nicht privilegierten Anwendung zu erhalten, müssten Sie durch einige Ringe springen. Sie können fork
/execve
verwenden, um sudo
für Ihren eigenen Befehl aufzurufen. Sobald Sie authentifiziert sind, haben Sie einen privilegierten Kindprozess. Sie könnten ein spezielles Argument oder eine Umgebungsvariable übergeben, sodass der untergeordnete Prozess zu Code springen kann, der privilegiert sein soll. Der übergeordnete Prozess wartet nur darauf, dass der untergeordnete Prozess abgeschlossen wird.
Ich habe die Lösung gefunden, indem ich einfach den Befehl "sudo/path/to/my/c/file" ausgeführt habe ... – JNK