Forum Linux.général Récupérer droits sur fichiers

Posté par  .
Étiquettes : aucune
0
3
sept.
2008
Bonjour,
Suite à un petit problème de droits, sur un fichier, j'ai modifié les droits sur tout mon home !
Afin de pouvoir à nouveau lancer ma session, j'ai du faire un :
chmod -R 777 /home/moi
Ca ma sortie de ma galère, mais ce n'est pas très sécurisé n'est pas !

Mais j'ai une idée lumineuse mais bien au dessus de mes capacités !
J'effectue régulièrement des sauvegarde de mon home sur un DD externe.
J'aimerais donc récupérer les droits de mes fichiers de sauvegarde, pour les remettre sur mon home courant.
Je ne veux pas faire une restauration complète, car je ne veux tout de même garder mes mise à jour effectuées depuis (ex garder les mails mais réatribuer les bon droit au fichiers de mon profil Thunderbird. )
Mes fichiers de sauvegarde sont ici :
/mnt/sauvegarde/home/moi
mon home :
/home/moi/

Si vous avez une idée elle sera la bienvenue.
Je ne veux pas avoir à changer un à un les droits des milliers de fichiers de mon home !
Merci.
  • # tar

    Posté par  (site web personnel) . Évalué à 2.

    Bah tu fais une archive (tar) éventuellement compressé (gz, bz2, etc.) et tu dis à tar (le logiciel) de conserver les droits quand du décompresse l'archive. Les options qui t'intéresseront sont :
    --same-owner
    --same-permissions

    Pour plus d'info, voir le manuel de tar.

    Voila, j'espère que j'ai bien compris ton problème, parce que ça me paraît trop simple. :)
    • [^] # Re: tar

      Posté par  (site web personnel) . Évalué à 1.

      Le problème était de remplacer les permissions sans remplacer les fichiers.
      • [^] # Re: tar

        Posté par  (site web personnel) . Évalué à 2.

        En effet c'est tout le contraire.
        Mais ça ne veut pas dire que la méthode n'est pas bonne, il suffit juste de la précéder d'une restauration de la sauvegarde.

        - tar du home
        - recupération de la sauvegarde
        - untar du home sans les droits
        • [^] # Re: tar

          Posté par  . Évalué à 1.

          Merci pour cette idée, mais j'ai effectué ma sauvegarde avec rsync. C'est beaucoup plus rapide.
          • [^] # Re: tar

            Posté par  (site web personnel) . Évalué à 2.

            s/- récupération de la sauvegarde/- rsync de l'acienne version/
  • # Pourquoi faire si compliqué ?

    Posté par  (site web personnel) . Évalué à 2.

    Bonjour,
    Pourquoi faire si compliqué ?

    Tu met les répertoires en 750 ou 755 et les fichiers en 640 ou 644.

    find /home/moi -type d -exec chmod 750 {} \;
    find /home/moi -type f -exec chmod 640 {} \;

    Il restera les exécutables. Tu peux travailler avec des patterns :
    for i in pl sh py rb
    do
    find /home/moi -type f -name "*.$i" -exec chmod +x {} \;
    done

    • [^] # Re: Pourquoi faire si compliqué ?

      Posté par  . Évalué à 1.

      Merci, mais je préfèrerai un truc moins brutal. C'est ce qui m'a conduit à faire mon erreur dont je rougie encore...
      • [^] # Re: Pourquoi faire si compliqué ?

        Posté par  . Évalué à 4.

        rétablir les droits des fichiers pour ton utilisateur... qui te reviennent de droit, avec chown, et mettre les bons droits avec chmod, c'est la méthode normale et la moins brutale.

        Par contre récupérer une vieille sauvegarde pour remettre les droits des fichiers, là c'est carrément crade, surtout que logiquement tous les fichiers dans ton /home devraient t'appartenir, avec un 640 pour les fichiers par exemple (perso je n'ai pas d'exécutables dans mon /home, sauf des scripts, et ils sont tous dans le même dossier)

        Par rapport à la question d'unison évoquée plus bas, c'est vraiment l'idéal selon moi pour synchroniser ses données entre plusieurs sauvegardes / sources. Je l'utilise en local avec un disque dur externe, et par internet (ssh), pour synchroniser les données avec un autre ordinateur. Récemment j'ai eu un vilain crash sur mon ordinateur, et j'ai eu des fichiers corrompus. J'ai pu ainsi vérifier rapidement que mes données importantes n'avaient pas eu de modifications. Mais d'un autre côté si unison compare juste les changements avec la date (je ne sais pas exactement comment cela fonctionne), possible que 2 fichiers restent différents si la différence vient d'une corruption sauvage et non pas de façon normale.
        Ici cela suggère que la corruption a été bien détectée (mais pas dans un sens qui l'arrageait) :
        http://marc.info/?l=unison-users&m=120101133132567&w(...)
        Quoi qu'il en soit Unison permet aussi de vérifier par un diff la différence entre les fichiers à synchroniser, cela permet de rapidement tester si le changement est normal ou pas.

        Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it

  • # unison ?

    Posté par  . Évalué à 1.

    unison est un utilitaire permettant la synchronisation de répertoires et fichiers. Il sait gérer les droits. Reste à savoir s'il est possible de lui demander de ne synchroniser que les droits des fichiers et répertoires.

    http://www.cis.upenn.edu/~bcpierce/unison/download.html

    Bon courage.
    • [^] # conduit

      Posté par  (site web personnel) . Évalué à 2.

      Sinon dans la mallette des projet gnome il y a conduit : http://www.conduit-project.org/
      • [^] # Re: conduit

        Posté par  . Évalué à 1.

        Ce soft à l'air bien prometteur. Je ne sais pas si il est capable de me dépatouiller maintenant, mais il répond à un besoin de beaucoup : pouvoir superviser tout ce qu'on mets en ligne dans une seule interface.
  • # idee comme ça

    Posté par  . Évalué à 3.

    Je pense qu'un script du genre pourrait faire l'affaire :

    premierement, aller dans /mnt/sauvegarde/home/moi, faire un find dans argument pour recuperer la liste de tous les fichiers.

    Ensuite :

    while read fichier;
    fichier_home=`echo $fichier | sed 's#/mnt/sauvegarde##'`
    chmod --reference $fichier $fichier_home
    done < liste

    Bon, c'est pas vraiement testé. La bonne idée la dedans, c'est le coup du chmod --reference. Ensuite, faut blinder un peut plus le script (nom de fichier avec espaces, ...)

    • [^] # Re: idee comme ça

      Posté par  . Évalué à 1.

      C'est exactement ce genre de manip que je veux faire.
      Par contre je me dit que plutôt de faire un script pour ça, je vais peux-être tout simplement faire la liste des fichier.
      Puis trier les fichiers par droits à supprimer. Ca me fera 8 listes : tous mes fichiers étant en 777, il y aura les listes suivantes :
      user-w
      user-x
      grp-r
      grp-w
      grp-x
      other-r
      other-w
      oter-x
      (pas de user-r évidement)
      Puis je vais changer les droits de mes fichiers avec les listes créer.
      • [^] # Re: idee comme ça

        Posté par  . Évalué à 2.

        Voilà, j'ai trouvé !
        Il n'y a plus qu'a tester :
        Créer la liste des fichiers :
        find /mnt/suavegarde/moi/* -printf %p\\t%m\\n > liste-fichier
        me donne la liste des fichier avec leurs droits. La plus part sont en 640
        Donc je commence à faire la manip de d-jo.
        ensuite, je récupère les listes des autres droits :
        find /mnt/suavegarde/moi/* -perm 777 -printf %p\\n > liste-777
        find /mnt/suavegarde/moi/* -perm 600 -printf %p\\n > liste-600
        ...

        Ensuite, le petit script suivant me permet de changer les droits de mes fichiers :
        $ scrpit-chmod 600 liste-600

        #script-chmod
        while read i
        do
        chmod "$1" "$i"
        done < "$2"


        Merci pour vos contributions.
        • [^] # Re: idee comme ça

          Posté par  . Évalué à 1.

          Bonjour,

          Tant qu'a faire un find, tu peux faire un peu plus simple:
          find /mnt/suavegarde/moi/ -printf 'chmod %m %p' | sed -e 's@/mnt/suavegarde/moi@/home/moi@' | sh
          Cela devrait normalement passer.

Suivre le flux des commentaires

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