* Erich Lindner schrieb am 27.Nov.2002:
ich arbeite gerade an einem Problem, das ich mit suid loesen wollte.
Ein selbst geschriebenes C-Programm , das ich als user wwwrun aufrufe,
soll mit root-Rechten laufen.
# chown root.uucp /sbin/boxprog
# chmod 4750 /sbin/boxprog
# usermod -G uucp wwwrun
~> /sbin/boxprog start
das Programm legt seine PID in "/var/log/PID/" ab,
dieses Verzeichnis hat die Rechte 775 root.root
nun geschieht folgendes:
- wenn ich das Programm als root aufrufe klapt alles
- wenn ich das Programm als user wwwrun aufrufe, dann beendet sich
das Programm wieder weil es seine PID nicht ablegen darf,
also ein Rechte-Problem hat.
sollte das Programm nicht mit vollen root-Rechten laufen ?
Wie legst Du denn die Datei an? Wenn Du z.B system verwendest,
funktioniert es, aus den gleichen Gründen wie bei der shell direkt,
nicht. Siehe man system und da unter BUGS.
Leg Deine Datei mit fopen an, und beschreibe sie mit fprintf.
#include
...
FILE *datei;
...
datei = fopen ("/var/log/PID/DATEINAME", "w");
...
fprintf (datei, "Formatstring\n");
...
fclose (datei);
Dabei ist datei eine Variable, die Du beliebig benennen kanst. FILE
ist in stdio.h definiert und muß exakt so heißen. Auch in
Großbuchstaben. DATEINAME steht für den Dateiname Deiner Logdatei,
den Du hier angeben mußt.
fopen gibt ein NULL zurück, falls es nicht funktioniert hat, daher
kanst Du nachfragen:
if ((datei = fopen ("/var/log/PID/DATEINAME", "w")) == NULL)
{
fprintf (stderr, "DATEINAME konnte nicht geöffnet werden!\n")
exit (1);
}
NULL wird ebenfalls in stdio.h definiert und muß ebenfalls groß
geschrieben werden. stderr wird auch in stdio.h definiert und wird
klein geschrieben.
Wenn Du die Fehlermeldung genauer haben möchtest, mußt Du errno
auswerten. Siehe hierzu die manpages von fopen, open und malloc
sowie man errno
man fopen
man fclose
man fprintf
Bernd
--
Was ist quoten? Quoten ist das Zitieren aus einer mail, der man antwortet.
Und wie macht man es richtig? Zitate werden mit "> " gekennzeichnet.
Nicht mehr als nötig zitieren. Vor den Abschnitten das Zitat, auf das man sich
bezieht, mit einer Zeile Abstand oben und unten. |Zufallssignatur 12