Hirdetés

Aktív témák

  • WN31RD

    addikt

    válasz FastCatch #7 üzenetére

    Kipróbáltam, és tényleg nem megy... :((( :F

    Nyomoztam kicsit a kernel forrásban (2.6-os) a probléma után, és úgy tűnik, a ''kernel capabilities'' funkció okozza a gondot. Ugyanis nem csak az ioperm()-hez, hanem a /dev/port megnyitásához is szükséges a CAP_SYS_RAWIO, ld.: kernel forrás drivers/char/mem.c, open_port().

    Ha a default capabilites nincsen aktiválva (capability kernel modul), akkor a root processzeknek megvan minden capability, a többinek pedig semmi, és ezen nem lehet változtatni, ld. kernel forrás security/dummy.c, dummy_capable().

    Megoldási javaslatok (nem próbáltam ki):
    a. root-ként induljon a processz, aztán dobálja el a privilégiumait, amint megnyitotta a /dev/port-ot
    b. root-ként induljon egy kisegítő processz, ami mondjuk egy socket-en keresztül átad egy file descriptor-t a /dev/port-ra
    c. kapcsold be a linux capabilites-t, és - pl. a PAM segítségével - add meg a CAP_SYS_RAWIO-t a kérdéses júzernek
    d. piszkálj bele a kernelbe valamelyik helyen, amit említettem

    Érdekelne a kipróbált, működő megoldás, ha majd meglesz. :)

Aktív témák