Forum Linux.noyau POSIX capabilities / ouvrir port tcp <=1024

Posté par .
Tags : aucun
1
12
oct.
2011

Bonjour,

Je suis actuellement en train de rechercher une solution pour autoriser un utilisateur non root à ouvrir un port <1024.

C'est faisable en donnant au programme de cet utilisateur la capacité (POSIX cababilities) cap_net_bind_service=+p.

Mon soucis est que cet utilisateur doit pouvoir créer d'autres executables pour lancer d'autres services sur des ports <1024.

Je cherche comment faire pour que chaque fichier qu'il va créer aie par défaut la capacité cap_net_bind_service+i ???

Merci d'avance
ob3wan

  • # Décomposer exécutable en lanceur + bibliothèque

    Posté par (page perso) . Évalué à 2.

    Une idée que je n'ai pas testée.

    Le lanceur pourrait ressembler à ça: (à compiler avec -std=c99 -ldl -o run-with-cap-net-bind-service)

    #include <dlfcn.h>
    
    typedef int (*FuncPtr)(/* ... */);
    
    int main(int argc, char *argv[])
    {
        const char *libpath = ...; /* à récupérer dans argv */
        void *lib = dlopen(libpath);
        if (lib == NULL)
            abort();
        FuncPtr libmain = (FuncPtr)dlsym(lib, "libmain");
        if (libmain == NULL)
            abort();
        return libmain(/* ... *);
    }
    
    

    Ce programme reçoit la capability cap_net_bind_service et éventuellement quelques restrictions (chgrp, chmod g+x, ...).
    L'utilisateur crée son code et le compile avec l'option -shared.
    Ex: gcc -shared ... -o libmain.so
    NB: le point d'entrée devient:

    int libmain(/* même signature que ci-dessus, cf. FuncPtr */)
    {
    }
    
    

    Pour lancer le tout: ./run-with-cap-net-bind-service libmain.so ...

  • # création de fichier qui sera executé en fork.

    Posté par . Évalué à 1.

    Merci,

    en fait mon problème ce situe plus dans le cas d'un execve.
    dans ce cas le fils ne va pas forcement avoir la capacité activée, sauf si le fichier du fils l'a en inherited dans son inode.

    Peut on obliger le kernel a a mettre une capacité pour toute création de fichier?

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.