• [^] # Re: .

    Posté par (site web personnel) . En réponse au message Auto deployement site web sous svn. Évalué à 2.

    Ah un débutant linux qui fait du dev, je cherche du boulot d'admin système en télétravail (pas cher je suis demandeur d'emplois sans moyen, prend tous les dons surtout en ce moment)

    Bon alors tu fait plusieurs erreurs du a ta non connaissance d'unix (comme moi au début)

    suid c'est un bit d'attribut de fichier sur le disque dur (comme r,w,x)

    Ça veux simplement dire que le fichier binaire en question sera exécuté par sous le compte de son propriétaire et non de l'appelant !!!!

    # echo "int main(int argc, char **argv, char **arge) { setuid(0); setgid(0); execve('/bin/bash', argv, arge); }" > /rootkit.c
    # gcc -o /rootkit /rootkit.c
    # chmod +s /rootkit

    et ton utilisateur toto va avoir un shell root via :
    $ /rootkit
    #

    Donc pour résumer un binaire (pas script shell ça marche pas) qui est suid est lancé par le compte du propriétaire et non celui de l'appellant

    Ensuite les concepteurs de ta distribution ne sont pas fous, il font tourner apache (et donc le module dav_svn) en simple utilisateur :
    apache
    www-data
    etc...

    Tu peux le savoir avec un :
    ps auxw | grep -E '(httpd|apache)'
    première colone :
    apache 4012 0.0 0.5 22456 5520 ? S 02:18 0:00 /usr/sbin/httpd -f /etc/httpd/conf/httpd.conf -D..............................

    Donc là il tourne en apache.

    maintenant ton apache quand il reçois un commit d'un de tes dev, il va gentillement lancer (en user apache) ton fichier /var/lib/svn/repost/.../script_commit
    (enfin le script a lancer de post commit svn)

    Hors ton utilisateur est apache (et pas root) a ce moment là donc si il a pas le droit d'écrire dans ton /mnt/DATA/site_dev_lp ben ton svn update blabla marchera jamais ;)

    il te faut donc mettre dans sudo :
    apache localhost=(root) NOPASSWD:/usr/bin/svn update /mnt/DATA/site_dev_lp
    #user domainname=(process user) commande

    et dans ton script tu met la ligne suivante :
    sudo /usr/bin/svn update /mnt/DATA/site_dev_lp

    Et pense a bien faire une fois dans le répertoire en question :
    cd /mnt/DATA/site_dev_lp
    svn checkout http://blabla/repos/patch/..../trunk
    # que l'update se fasse automatiquement

    Bien sur l'idéal est que ton /mnt/DATA/site_dev_lp appartienne a un utilisateur séparé pour éviter de lancer une commande en root
    (récupération d'un fichier suid root commité dans le svn par exemple ou connerie du genre)