PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Commandoaufruf aus einem SUID-C-Programm.



c-newbie
29-12-2003, 03:04
Hallo,

ja, ich weiss, dass "system()" böse ist, es ist aber nur für mich zu Testzwecken. Ich wollte sowas machen:



main ()
{
printf("bitte schoen: %s\n",system("/bin/cat /etc/shadow"));
}

Es tretten dabei 2 Probleme auf.

1) Wenn ich es als _nicht_root_ ausführe, bekomme ich:

/bin/cat: /etc/shadow: Keine Berechtigung
Speicherzugriffsfehler
also funktioniert SUID überhaupt nicht. In der man-Page von 'system' steht was von, dass es wegen Sicherheit unterdrückt wird, aber wie kann ich dann sowas machen, wenn ich System-Befehle aus einem SUID-C-Program wirklich brauche?

2) Wenn ich es als root ausführe, bekomme ich zwar den gewünschten output, aber es wird irgendwie unabhängig von meinem printf ausgegeben, dh erst der Inhalt der shadow und erst zu letzt folgt dann mein "bitte schoen: (null)"

Könnte mir jemand kurz helfen?
Danke
Martin, der C-newbie

Trillian
29-12-2003, 11:23
man system:


RETURN VALUE
The value returned is -1 on error (e.g. fork failed), and the return
status of the command otherwise.


cat schreibt den Text auf stdout, deswegen kriegst du ihn noch zu sehen. Erst nachdem cat durchgelaufen ist returned system() und printf() schreibt seine Augabe auf stdout.

c-newbie
29-12-2003, 13:09
OK, danke und wie sieht es mit Befehlsausführung aus einem SUID-C-Programm ?

Danke
Martin