Protéger un repertoire en shell !!!

Bonjour,
j'ai un serveur dédié .je fais appel à un prestataire pour modifier le code et faire des test PHP sur mon site.
toutefois j'aimerais protéger un repertoire précis .j'aimerais que mon prestataire n'ait pas acces à ce repertoire ni au fichier dans ce repertoire .
Comment faire celui en shell ?
Vraiment un grand merci si vous avez une solution
Configuration: Windows 2000
Firefox 3.5.4

10 réponses

  1. Modérateur
    Il suffit qu'il n'ait pas les droits en exécution sur ce fichier. A toi de régler le propriétaire (a priori toi ?) et le groupe propriétaire (avec la commande chown en root) et les droits (avec la commande chmod) en conséquence. Supposons que ce répertoire appartienne à mando et au groupe users auquel ton prestataire appartient. À ce moment-là seul mando doit avoir les droits en exécution sur ce répertoire.
    chmod 700 le_repertoire


    Si certains de tes collaborateurs doivent en plus de toi y avoir accès, à toi de créer un groupe (par exemple tapir) et d'affecter ce répertoire à ce groupe (voir commande addgroup et le fichier /etc/group). Naturellement le groupe tapir aura les droits en exécution et ton prestataire ne devra pas en faire partie.

    sudo chown -R mando:tapir le_repertoire
    chmod 770 le_repertoire


    Si le groupe tapir ne doit pas pouvoir modifier (juste lire) le contenu du répertoire :

    chmod 750 le_repertoire


    Pour plus de détails :

    man 5 group
    man addgroup
    man chown
    man chmod


    Bonne chance
    1. merci infiniment mamiemando.
      je reflechis à tes réponses pour voir si j'ai compris
  2. je pensais faire quelques choses comme ca:
    pour proteger le repertoire le_repertoire
    creer un user presta et créer un groupe presta
    pour le repertoire protégés le_repertoire
    1-affecter au groupe presta le repertoire
    chgrp -R presta le_repertoire
    2-et lui donner que le droit d'execution
    chmod 10
    pour les autres répertoires , presta a le meme droit que le proprietaire
    d'ou presta peut modifier mon site mais ne peut voir les fichiers dans le repertoire le_repertoire

    maintenant comment écrire correctement en shell
    1. bonjour
      fais sa :
      groupadd presta
      useradd presta
      chown -R presta:presta /ton/path/vers/le_repertoire
      chmod 770 /ton/path/vers/le_repertoire
      1. Modérateur
        @jerem1985 : non ca ne marche pas car le répertoire à "protéger" doit justement être refusé à presta.

        @sarat92 : idem. Et le chmod est faux. Supposons que tu aies un groupe developer (auquel tu appartiens avec presta) et un groupe admin (auquel tu appartiens avec tes collègues ayant le droit d'aller dans le répertoire protégé, mais pas presta). Ces deux groupes devront être créés avec la commande addgroup et remplis en corrigeant /etc/group. Supposons que ton login soit mando et que tu sois propriétaire des fichiers du projet.

        Alors :
        1) tous les fichiers appartiennent à mando
        2) les fichiers protégés appartiennent au groupe admin, les autres au groupe developer
        3) les droits en exécution sont activés uniquement pour le propriétaire et le groupe.

        En notation octale voici comment fonctionnent les droits :
        - r (read) droits en lecture : vaut 4
        - w (write) droits en écriture (supprimer, modifier...) : vaut 2
        - x (execute) droits en exécution (pour un répertoire, ceci correspond à pouvoir rentrer dedans) : vaut 1.

        Ainsi :
        - les droits rwx correspondent en notation octale à 4+2+1=7
        - les droits rx correspondent en notation octale à 4+1=5
        - aucun droit correspond à 0 en notation octale

        Comme tu le sais, les droits sont linux se déclinent en trois jeux de droits rwx, comme le montre la commande "ls -l". Le premier triplet correspond au droit de l'utilisateur, le second au groupe propriétaire, et le troisième aux autres. Comme il y a trois jeux de droits, en theorie ta notation octale devrait comporter 3 chiffres.

        Résumons tout ça. Quand tu écris :

        chmod 770 mon_repertoire


        Ceci revient à donner des droits rwx à l'utilisateur, au groupe, et au aucun droit aux autres.

        En espérant que ce soit plus clair pour toi...
        1. baleze mamiemando.
          je suis en train d'essayer de comprendre ta logique .Je crois avoir compris .Il me faut plusieurs heures avant d'êtr bien sur d'avoir .Je répondrais par la suite
      2. meacoulpa
        j'avais compris que seul presta et son group devait accèder au repertoire
        1. Modérateur
          je suis en train d'essayer de comprendre ta logique .Je crois avoir compris .Il me faut plusieurs heures avant d'êtr bien sur d'avoir .Je répondrais par la suite

          C'est pas ma logique, c'est celle de linux ^^. Je te rappelle que tu peux voir les droits, le propriétaire et le groupe propriétaire avec la commande ls -l :

          (mando@aldur) (~) $ ls -l plop.cpp
          -rw-r--r-- 1 mando users 1711 sep 25 11:16 plop.cpp


          Ici :
          - le propriétaire est mando et il a les droits en lecture et écriture (4+2)
          - Le groupe propriétaire est users il a juste les droits en lecture (4)
          - Les autres ont juste les droits en lecture (4)
          ... soit 644 en octal.

          Comme tu le vois tu as trois niveaux de permission.

          - le propriétaire (qui en général peut faire tout ce qu'il y a à faire) ie lire, modifier, supprimer le fichier et l'exécuter s'il s'agit d'un exécutable ou d'un répertoire. Ainsi sur un répertoire ou un exécutable il aura en général les droits rwx, et sinon les droits rx.
          - le groupe utilisateur a généralement des droits égaux ou moindres
          - les autres ont généralement des droits encore moindres.

          Dans ton cas le but on pourrait imaginer :

          -rwxr-x---  mando admin mon_repertoire


          Ainsi :
          - seul mando peut tout faire (ainsi que root bien sûr) (4+2+1),
          - les membres du groupe admin peuvent juste lire et aller dans le répertoire (car les ils ont les droits en exécution) mais pas le supprimer (car ils n'ont pas les droits en écriture) (4+1),
          - les autres ne peuvent rien faire (0).
          ... ce qui donne des droits 650.

          En espérant que
          1. - seul mando peut tout faire (ainsi que root bien sûr) (4+2+1),
            - les membres du groupe admin peuvent juste lire et aller dans le répertoire (car les ils ont les droits en exécution) mais pas le supprimer (car ils n'ont pas les droits en écriture) (4+1),
            - les autres ne peuvent rien faire (0).
            ... ce qui donne des droits 650. 
            

            ca m'a l'air tres cohérent tout ca .Du coup le groupe developper qui n'est pas propriétaire du repertoire en question ne peut rien faire (ni voir le code, ni modifier )
            Par contre il est préférable qu'il puisse executer et donc plutot 651 car sinon le fichier ne pourra même plus être lu par apache
            je suis bon là ou pas ?
            1. Modérateur
              Du coup le groupe developper qui n'est pas propriétaire du repertoire en question ne peut rien faire (ni voir le code, ni modifier ) .

              Voilà :-)

              Par contre il est préférable qu'il puisse executer et donc plutot 651 car sinon le fichier ne pourra même plus être lu par apache je suis bon là ou pas ?

              Il faut effectivement que le fichier appartienne à apache ou que apache appartienne au groupe propriétaire, sinon tu vas avoir un "permission denied" ou message d'erreur voisin.

              Bonne chance
              1. merci mamiemando pour ton aide et ta patience
                et comment faire en shell pour que apache appartienne au groupe propriétaire ?
                donc 651 t'es d'accord avec moi ?j'aimerais une confirmation de la part d'un connaisseur comme toi
            2. je sais pas ce que t'appel connaisseur
              donc pour confirmer voici une copie du man

              DESCRIPTION
              La commande usermod modifie les fichiers d´administration des comptes
              du système selon les modifications qui ont été indiquées sur la ligne
              de commande.

              -a, --append
              Ajouter l´utilisateur aux groupes supplémentaires. N´utilisez cette
              option qu´avec l´option -G.

              -G, --groups GROUPE1[,GROUPE2,...[,GROUPEN]]]
              A list of supplementary groups which the user is also a member of.
              Each group is separated from the next by a comma, with no
              intervening whitespace. The groups are subject to the same
              restrictions as the group given with the -g option. If the user is
              currently a member of a group which is not listed, the user will be
              removed from the group. This behaviour can be changed via the -a
              option, which appends the user to the current supplementary group
              list.

              donc si tu fais sa se sera bon

              usermod -aG nom-du-group nom-user-a-ajouter-au-group

              usermod -aG proprietaire apache

              si tu veux vérifier
              vi /etc/group
              1. Modérateur
                et comment faire en shell pour que apache appartienne au groupe propriétaire ?

                La commande groups permet de retourner le groupe auquel appartient l'utilisateur courant. On peut changer d'utilisateur avec la commande su :

                su - apache
                groups


                Les groupes et membres des groupes sont définis dans /etc/group dont la syntaxe est détaillée ici :

                man 5 group


                Tu peux sois modifier directement ce fichier, soit utiliser la commande usermod, comme vient de l'indiquer jerem1985.

                Bonne chance