• [^] # Re: DTrace

    Posté par . En réponse au journal Solaris 10 (mon humble avis). Évalué à 2.

    > ca ressemble plus aux capabilities, developpé chez linux

    capabilities *diminue* les privilèges. Il ne les augmente jamais.

    > mais jamais utilisé.

    apache, named, etc... utilise les capabilites.

    > Et je vois pas bien ce que PAM fait dans la choucroutte.

    Pour gérer les privilèges peut-être ?
    Exemple, j'ai fait un petit wrapeur à mplayer pour que mplayer puisse faire mlockall() et utilise l'ordonnanceur temps réel round Robin.
    Il faut patcher mplayer pour qu'il utiliser mlockall().

    Avec le driver mga_vid (-vo mga ou -vo xmga), ça permet d'avoir un mplayer imperturbable. J'ai testé avec un upload à 150 (compilation de trois linux en parallèle avec "make -j") en lisant un DVD. Pas le moindre accro. Impressionnant.

    Il faut Linux 2.6.9 qui permet de fixer un ulimit sur la mémoire verrouillé en mémoire.
    Mon wrapper (mplayer_rt) utile PAM et a le suid (c'est le seul).

    Le mplayer lancé par le wrapper a deux privilège en plus :
    - ordonnancement à SCHED_RR
    - ulimit -l 65536
    Tu ne peux pas avoir ces deux privilèges avec un processus "normal" et pourtant mon mplayer tourne avec mes droits utilisateurs seulement, mais juste avec ces deux privilèges de plus (capabilities ne peut pas faire ça).

    Donc voilà ce qui est fait :
    - mplayer_rt est appelé comme le mplayer "classique" avec les arguments "qui vont bien".
    - mplayer_rt utilise PAM
    - PAM vérifie si l'utilisateur à la console (pam_console)
    - PAM vérifie que c'est moi (pam_succeed_if)
    - PAM change ulimit (pam_ulimit)
    - PAM change l'ordonnancement (pam_sched : c'est tout petit module PAM que j'ai fait pour le "fun" et qui n'est pas "présentable").
    - mplayer_rt vire les privilège root (seteuid() = getruid())
    - mplayer_rt fait un exec de mplayer
    Je pourrait utiliser les capabilities de Linux mais mon wrapper est si petit et fait si peu de chose que ce n'est pas nécessaire.

    Rappel, seul mplayer_rt a le suid.
    Si j'installe un nouveau mplayer, ça marche toujours (j'ai seulement à ajouter un patch pour utiliser mlockall). Donc avec PAM, j'ai bien fait de la gestion de droits/privilèges.
    Le fait que j'ai du utiliser du C (pour mplayer_rt) montre que ce n'est pas encore suffisament "enrobé".