web-dev-qa-db-fra.com

Définir moi-même comme propriétaire de / etc avec la commande chown maintenant toutes sortes d'erreurs

J'avais besoin de modifier un fichier .config (ce qui, je le sais, ne crée pas ces problèmes, mais simplement pour résoudre ce problème) et il ne m'a pas laissé le sauvegarder. J'ai donc pris possession de /etc et tous les contenus avec la commande chown -hR username /etc et qui me permettent d’éditer le fichier .config mais maintenant, chaque fois que j’essaie d’installer des packages ou d’utiliser des commandes Sudo, cela ne fonctionne pas (j’ai vérifié les erreurs dans le fichier Sudo dans sudoers.d et il n’y avait rien de mal à cela).

Alors, comment puis-je le retourner à l'ancien propriétaire?

7
Raf

Certains des fichiers de /etc pouvant ne pas appartenir à root, vous pouvez effectuer les opérations suivantes pour éviter de les réinstaller:

  1. Démarrez dans un système actif et montez la partition contenant le répertoire /etc. Par exemple, si votre partition / est /dev/sda1, vous le feriez à partir du système actif:

    Sudo mount /dev/sda1 /mnt
    
  2. Définissez la propriété de tous les fichiers sur root:

    Sudo chown -R root /mnt/etc
    
  3. À ce stade, tous les fichiers appartiennent à la racine. C’est probablement ce dont vous avez besoin, mais certains fichiers de /etc/ peuvent avoir des droits de propriété différents. Si ces fichiers n'appartiennent pas non plus à root dans le système live, vous pouvez les utiliser comme référence pour modifier les autorisations sur le système installé:

    shopt -s globstar
    liveSystem="/etc"
    cd /mnt/etc
    for file in **/*; do 
        [ -e "$liveSystem/$file" ] &&
            echo Sudo chown --reference "$liveSystem/$file" "$file"
    done
    

    Si vous avez également modifié les autorisations, procédez comme suit:

    shopt -s globstar
    liveSystem="/etc"
    cd /mnt/etc
    for file in **/*; do 
        [ -e "$liveSystem/$file" ] &&
            echo Sudo chown --reference "$liveSystem/$file" "$file" &&
            echo Sudo chmod --reference "$liveSystem/$file" "$file"
    done
    

    Cela affichera simplement quelle commande serait exécutée. Une fois que vous avez vu ce que cela fait et êtes convaincu que c'est correct, supprimez la echo pour qu'elle exécute réellement les commandes.

    Maintenant, cela va parcourir tous les fichiers, y compris ceux dont la propriété est root dans les deux répertoires, mais cela n'a pas d'importance. Vous pouvez écrire une approche plus sophistiquée, mais cela ne vaut pas la peine, car cela prendra quelques secondes.

  4. Redémarrez votre ordinateur: tout devrait revenir à la normale.

IMPORTANT: cela n'aidera pas si vous avez installé quelque chose qui ne se trouve pas sur le système live et dont les fichiers dans /etc n'appartiennent pas à root. Si tel est le cas, vous devrez soit rechercher ce que vous avez installé et le réinstaller, soit vous devrez peut-être réinstaller le système.

13
terdon

Démarrez dans la récupération et lancez les commandes suivantes:

mount -o remount,rw -n /
chown -R root: /etc
3
Frantique