* Erich Lindner schrieb am 28.Nov.2002: Bitte Attributzeile stehen lassen, in dem der Vorredner, in diesem Fall ich, erwähnt wird.
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.
Das Programm selbst wird ueber den Webserver mit system() aufgerufen.
Ja, und die man system sagt, daß das SUID-Bit aus Sicherheitsgründen nicht beachtet wird. Es wird empfohlen exec..() statt system() zu verwenden. Wenn man einen neuen Prozeß haben will, sollte man vorher ein fork() machen. system() ist sowieso ein Befehl, den man nicht verwenden sollte. Geht mit fork() und exec.. viel eleganter.
Das Programm ist ziehmlich komplex, und benoetigt auch fuer andere Aktionen root-Rechte,
Das habe ich schon verstanden. Dann darfst Du nicht system() verwenden. Braucht man auch nicht.
zB: das Oeffnen der Geraetedateien /dev/cub0 .. /dev/cub7 Es wird in diesem Programm auch ein Perl-script aufgerufen (aus Sicherheitsgruenden wird die Pruefsumme des Scrips ermittelt).
Na und? Kann man auch mit exec.. machen, etwa gleich mit dem Systemaufruf execve() benutzen sowieso alle anderen exec..s und auch system. Allerdings gibt es dann keine Wiederkehr. Daher sollte man vorher mit fork() einen neuen Prozeß starten. fork() macht eine exakte Kopie des aktuellen Prozesses. Einer bleibt so wie er ist, der andere erhält eine neue PID und die PID des anderen als PPID. Er wird somit zum Kindprozeß des anderen. Dem Elterprozeß gibt fork() die PID des Kindporzesses zurück und dem Kindprozeß gibt fork() 0 zurück. Dieser Prozeß kann dann execve() aufrufen und damit sich selber überschreiben. Das dritte Argument von execve() ist das gesamte Enviroment. Genauer ein Zeiger auf ein Array von Strings. Da kann man überprüfen, ob z.B der PATH stimmt, oder gleich einen eigenen mitgeben. Bei system() geht das nicht. Daher ist es unsicher. Auch benutzt es die shell, um einen Befehl auszuführen. Nicht nur, daß das reichlich umständlich ist, es ist auch unsicher. Bernd -- Bitte die Etikette beachten: http://www.suse-etikette.de.vu/etikette.html Bitte Realnamen angeben, kein Vollquoting, kein Html, PGP oder Visitenkarten benutzen. Signatur mit "-- " abtrennen, bei Antworten "Re: " voranstellen, sonst nichts. |Zufallssignatur 4