Damit Sie Lösungen nicht suchen, sondern finden ! Damit Sie Lösungen nicht suchen, sondern finden !


 

Linux-Kernel:
Datei-Deskriptoren und Zugriffsrechte


zurück zum Artikel

Im vorliegenden Beispiel stehen die Zugriffsrechte der Gerätedateien /dev/dsp? und /dev/audio? auf 666, gewähren also jeweils Lese- und Schreibrecht für user, group und others. Diese Rechte erlauben es einem beliebigen Benutzer, diese Gerätedateien, beispielsweise /dev/dsp0, zum Lesen und/oder Schreiben zu öffnen. Durch Lesen der betreffenden Gerätedatei kann das eingebaute Mikrofon zum Abhören benutzt werden.

Dieses Problem kann nicht dadurch entschärft werden, dass der Display Manager kdm nach dem erfolgreichen Login eines Benutzers diesem die Eigentümerschaft der Audio-Gerätedateien überträgt und die Zugriffsrechte auf 600 (oder möglicherweise auf 660) setzt.

Der konzeptionelle Fehler bei dieser Vorgehensweise besteht in der Missachtung der Tatsache, dass ein Prozess, der eine Datei vor der Änderung der Zugriffsrechte geöffnet hat, hinsichtlich seiner Zugriffsmöglichkeiten auf diese Datei von der später erfolgenden Rechteänderung nicht betroffen ist.


Der Grund:

Wenn zu irgendeinem Zeitpunkt die Rechte beispielsweise von /dev/dsp0 auf 666 stehen, dann kann ein beliebiger Benutzer diese Gerätedatei zu diesem Zeitpunkt unter anderem zum Lesen öffnen. Solange er den Dateideskriptor verwendet, den er bei diesem open() erhalten hat, kann er davon auch zu einem beliebigen späteren Zeitpunkt lesen, und zwar bis zum close() dieses Deskriptors. Dies gilt selbst dann, wenn zwischenzeitlich die Rechte von /dev/dsp0 so gesetzt würden, dass nunmehr ein erneuter open() vom Kernel wegen mangelnder Berechtigung zurückgewiesen würde.

Der Kernel prüft die Zugriffsrechte zwar beim open(), nicht aber bei read()- und write()-Systemaufrufen. Wer also einmal einen Dateideskriptor erhalten hat, darf ihn bis zum close() benutzen.


zum Seitenanfang   Seitenanfang
vorherige Seite   zurück