On Don, 28 Nov 2002 at 21:41 (+0100), Bernd Brodesser wrote:
* Jan Trippler schrieb am 28.Nov.2002:
Das Set-UID-Bit der Programmdatei verleiht dem Programm nur das _Recht_, die effektive UID zu der des Eigentümers der Datei zu ändern und damit mit seinen Rechten zu laufen, das Programm muss es aber explizit tun (dazu hatte ich vor ein paar Wochen schon mal ausführlich was geschrieben im Thread *cdbakeoven*).
Du musst also, bevor Du Aktionen ausführst, die Root-Rechte erfordern, erst die ID wechseln mit dem Call setuid(0) - dann klappts auch mit dem Nachbarn. Siehe dazu: man 2 setuid
Nein. Das kann gar nicht sein. Es wird das effektive Recht überrüft, nicht das reale. Wenn das effektive Recht stimmt, dann darf man.
Hmm, jetzt müsste man IMHO mal tiefer in die System-Calls einsteigen. Dein fopen() klappt ohne setuid() (auch in /var/run), der system() klappt nur mit setuid() - siehe meine andere Mail. Andere Funktionen (wie z. B. ein stat("/etc/shadow", R_OK) - das hatte ich vor ein paar Wochen mal in einem anderen Thread benutzt) klappen auch nur _mit_ setuid(). man setuid() sagt auch aus, dass hier die _effektive_ User-ID gesetzt wird. [Programm]
Dieses Progrämmchen übersetzt. Den Owner root.root geben und das SUID-Bit setzen. Anschließend ausführen. Falls die Datei suid.out noch nicht existiert, wird sie angelegt und hat die Rechte root.root.
root:user bei mir (es ist ja nur das SUID-Bit gesetzt). Mir stellt sich jetzt die Frage, warum fopen() klappt - das widerspricht meiner Weltanschauung ;-) Jan