SUID Bit geht nicht so wie erhofft

04/03/2011 - 11:33 von Hans Müller | Report spam
Moin,

ich wollte ein kleines Prog schreiben, welches als root einen mysql Server startet oder stoppt.

Ich habe also einen kleinen test gemacht und ein simpelst C Programm gemacht:

#include <stdio.h>

int main(int argc, char **argv)
{
system("sleep 30");
}

Dieses zu a.out übersetzt, mit chown root:root root vermacht (als root), mit chmod u+s das suid bit gesetzt und dann als normaler Benutzer gestartet.
ps axl liefert dann für den Prozess als User ID 0 (== root) wie erwünscht.
Jedoch làuft der von diesem Prozess gestartete sleep wieder unter der ID des Benuters (hier 500).

Warum ?

Laut Doku die ich gefunden habe sollte die ID vererbt werden.
Mache ich die SUID Nummer mit einem Shellscript wechselt die damit beschàftigte Shell wie erwüschnt die ID, nicht jedoch
davon gerufen Programme.
Mist.
Ein damit gestartetes rcmysql start oder stop geht so natürlich schief.

Wie kann ich das erreichen ?

Ich kann natürlich auch sudo dafür einrichten, macht aber auf den Zielsystem Arbeit, ein einfache kleines Programm wàre schöner.

Gruß
Hans
 

Lesen sie die antworten

#1 Stefan Heimers
04/03/2011 - 11:39 | Warnen spam
Hans Müller wrote:

#include <stdio.h>

int main(int argc, char **argv)
{
system("sleep 30");
}

Dieses zu a.out übersetzt, mit chown root:root root vermacht (als root),
mit chmod u+s das suid bit gesetzt und dann als normaler Benutzer
gestartet. ps axl liefert dann für den Prozess als User ID 0 (== root) wie
erwünscht. Jedoch làuft der von diesem Prozess gestartete sleep wieder
unter der ID des Benuters (hier 500).

Warum ?






Versuchs mal so:

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>


int main(int argc, char **argv)
{
setuid(0);
system("sleep 30");
}


Stefan

Ähnliche fragen