Comment réparer / restaurer Ubuntu 10.04 après 'sudo chmod / 777'

12

Voir aussi:
Pourquoi «chmod -R 777 /» est-il destructeur?

J'ai modifié les autorisations de fichiers de manière récursive sur le répertoire racine /en exécutant sudo chmod -R / 777, et après cela, mon système ne démarre pas (je reçois beaucoup d'erreurs "autorisation refusée").

Veuillez aider.

Marcin
la source
Vous pourriez peut-être utiliser un système Ubuntu en direct. Installer les packages que vous avez installés sur votre système normal puis écrire un script pour les «cloner»? Ce n'est qu'une idée. Peut-être que quelqu'un d'autre peut dire si c'est bon.
Darokthar
Suivez attentivement: Ouvrir en mode de récupération> Monter le lecteur> Ouvrir le shell interactif> cd dans le disque dur monté (pour moi, il était dans / mnt / [répertoire])> chmod -R 755 ./**> #cd ./etc/ ssh / #chmod 600 moduli #chmod 644 ssh_config #chmod 644 ssh_host_dsa_key.pub #chmod 644 ssh_host_key.pub #chmod 644 ssh_host_rsa_key.pub #chmod 600 ssh_host_dsa_key #chmod 600 ssh_host_key #chmod 600 ssh_host_rsa_key #chmod 640 sshd_config
Smit Patel
Je n'ai pas assez de réputation pour publier la réponse dans StackExchange mais je voulais vous aider.
Smit Patel

Réponses:

23

Vous regardez une cause perdue. Enregistrez les données dont vous avez besoin et réinstallez le système d'exploitation.

blueben
la source
Ouaip. Le temps que vous passerez à faire cela sera fou et vous ne saurez jamais avec certitude que vous l'avez bien fait. Démarrez propre, restaurez vos données à partir de la sauvegarde.
ThatGraemeGuy
1
C'est l'un de ces pas en arrière et apprendre des choses. Vos domaines les plus importants sont le contenu de votre dossier de départ, les modifications de configuration que vous avez apportées /etc, /var/wwwle contenu du serveur Web et les bases de données. Prenez un autre disque dur, activez-le comme principal et installez-le. Cela conserve votre autre disque comme sauvegarde jusqu'à ce que vous puissiez le transférer.
Fiasco Labs
J'ai fait la même chose (et, oui, je sais mieux) et j'ai essayé plusieurs des idées ici, mais il me faudrait des semaines pour remettre la machine dans un état décent. Essayez plutôt de sauvegarder vos données et de réinstaller Ubuntu.
MikeHoss
5

Je sais que dpkg stocke les autorisations dans les bases de données et j'ai trouvé le script google suivant qui peut aider.

Edit: J'ai en fait jeté un coup d'œil au script et il semble qu'il manque un peu de magie qui passe de PERMS à MODE, par exemple dpkg -c donne par exemple "-rw-r - r--" mais vous voulez 0644, je suis au travail en ce moment donc je ne suis pas sûr d'avoir le temps de faire la conversion à cet instant mais je pourrai revenir plus tard si personne d'autre n'est intervenu pour ajouter ce bit.

Il y a un script ici qui semble intéressant

#!/bin/bash
# Restores file permissions for all files on a debian system for which .deb
# packages exist. 
#
# Author: Larry Kagan <me at larrykagan dot com>
# Since 2007-02-20

ARCHIVE_DIR=/var/cache/apt/archives/
PACKAGES=`ls $ARCHIVE_DIR`
cd /

function changePerms()
{
    CHOWN="/bin/chown"
    CHMOD="/bin/chmod"
    PERMS=$1
    OWN=`echo $2 | /usr/bin/tr '/' ':'`
    PATHNAME=$3

    echo -e "$CHOWN $OWN $PATHNAME"
    #`$CHOWN $OWN $PATHNAME`
    #`$CHMOD $MODE $PATHNAME`

}

for PACKAGE in $PACKAGES;
do
    echo -e "Getting information for $PACKAGE\n"
    FILES=`/usr/bin/dpkg -c "${ARCHIVE_DIR}${PACKAGE}"`

    for FILE in "$FILES";
    do
        FILE_DETAILS=`echo "$FILE" | awk '{print $1"\t"$2"\t"$6}'`
        changePerms $FILE_DETAILS
    done
done
James
la source
concerne-t-il également les fichiers 04555?
Anneau Ø
4

Il est possible de revenir d'une situation aussi désordonnée , sans réinstaller le système. Eh bien, plus exactement, exécutez un nouveau système à partir d'une clé USB ou dans une boîte Virutal (ou ainsi) si vous avez un système à double démarrage.

J'ai exécuté à nouveau le même type sur le problème (un bug dans un script que j'écrivais) et l'ai résolu, mais vous devez demander l'aide d'un expert. Soyez très prudent!

Tout d'abord, ma situation était plus facile à résoudre car j'avais un système à double démarrage (ubuntu et mon ancienne installation fedora), mais exécuter le système pour une clé USB (ou peut-être un CD / DVD) devrait faire la même chose.

MPOINT = / mount / ubuntu

J'ai d'abord monté mes systèmes de fichiers comme ceci (n'oubliez pas de créer les points de montage): mount / dev / ubuntu / root $ MPOINT mount / dev / ubuntu / home $ MPOINT / home

Ensuite, j'ai exécuté la commande suivante (mon problème n'était que dans quelques répertoires - critiques -) pour copier les autorisations du système en cours d'exécution sur le système en désordre (en fait, dans mon cas, j'ai installé un système ubuntu dans Virtual Box sous fedora et y a obtenu les autorisations):

trouver / etc / usr / bin -exec stat --format "chmod% a $ {MPOINT}% n" {} \; > /tmp/restoreperms.sh

Et puis j'ai exécuté le script restoreperms.sh.

J'ai pu à nouveau démarrer sur Ubuntu.

Le contenu de restoreperms.sh sera quelque chose comme:

(...)
chmod 755 /mount/ubuntu//etc/ppp
chmod 755 /mount/ubuntu//etc/ppp/ipv6-up
chmod 2750 /mount/ubuntu//etc/ppp/peers
chmod 640 /mount/ubuntu//etc/ppp/peers/provider
chmod 755 /mount/ubuntu//etc/ppp/ipv6-up.d
chmod 777 /mount/ubuntu//etc/ppp/resolv.conf
(...)

Je ne l'ai pas testé mais cela doit aussi fonctionner pour les propriétaires et les groupes de propriétaires. Quelque chose comme:

trouver / etc / usr / bin -exec stat --format 'chown% U:% G $ {MPOINT}% n' {} \; > /tmp/restoreperms.sh^

(...)
chown root:root /mount/ubuntu//etc/obex-data-server/imaging_capabilities.xml
chown root:root /mount/ubuntu//etc/obex-data-server/capability.xml
chown root:dip /mount/ubuntu//etc/ppp
chown root:root /mount/ubuntu//etc/ppp/ipv6-up
chown root:dip /mount/ubuntu//etc/ppp/peers
chown root:dip /mount/ubuntu//etc/ppp/peers/provider
chown root:root /mount/ubuntu//etc/ppp/ipv6-up.d
chown root:root /mount/ubuntu//etc/ppp/resolv.conf
(...)

Bien sûr, vous devez faire attention ici, que l'UID et le GID sont les mêmes sur les deux systèmes, mais pour les utilisateurs et les groupes liés au système, cela ne devrait pas être un problème.

Rk:

Une chose importante pour cela est de garder un disque d'installation synchronisé avec la version que vous utilisez, ou au moins de travailler avec la version actuelle d'ubuntu. Maintenant, j'ai ces commandes dans un cronjob, en cours d'exécution tous les jours (peut-être des semaines) afin de conserver ces informations. Cela facilitera la solution la prochaine fois, mais, bien sûr, comme je l'ai maintenant, cela ne se reproduira plus. ;-) Quelque chose comme ça:

0 12 * * * /usr/bin/find / -exec /usr/bin/stat --format="/bin/chmod %a %n" {} \; |/bin/bzip2 -c > /tmp/restore_chmod.$(/bin/date +%w).sh.bz2

0 13 * * * /usr/bin/find / -exec /usr/bin/stat --format="/bin/chown %U:%G %n" {} \; |/bin/bzip2 -c > /tmp/restore_chown.$(/bin/date +%w).sh.bz2

EDIT: pour supporter les liens, la commande combinée est:

/usr/bin/find / -exec /usr/bin/stat --format="[ ! -L {} ] && /bin/chmod %a %n" {}

Skyhawk
la source
4

J'ai modifié le script d'en haut et ça ressemble à ceci:

#!/bin/bash
# Restores file permissions for all files on a debian system for which .deb
# packages exist. 
#
# Author: Larry Kagan <me at larrykagan dot com>
# Since 2007-02-20

ARCHIVE_DIR=/var/cache/apt/archives/
PACKAGES=`ls $ARCHIVE_DIR`
cd /

function changePerms() {
    CHOWN="/bin/chown"
    CHMOD="/bin/chmod"
    PERMS=`echo $1 | sed -e 's/--x/1/g' -e 's/-w-/2/g' -e 's/-wx/3/g' -e 's/r--/4/g'  -e 's/r-x/5/g' -e 's/rw-/6/g' -e 's/rwx/7/g' -e 's/---/0/g'`
    PERMS=`echo ${PERMS:1}`
    OWN=`echo $2 | /usr/bin/tr '/' '.'`
    PATHNAME=$3
    PATHNAME=`echo ${PATHNAME:1}`

#    echo -e "CHMOD: $CHMOD $PERMS $PATHNAME"    

#    result=`$CHOWN $OWN $PATHNAME`
#    if [ $? -ne 0 ]; then
#   echo -e $result
#        exit 123;
#    fi

    echo -e "CHOWN: $CHMOD $PERMS $PATHNAME"
    result=`$CHMOD $PERMS $PATHNAME`
    if [ $? -ne 0 ]; then
    echo -e $result
    fi
}

for PACKAGE in $PACKAGES;
do
    if [ -d $PACKAGE ]; then
    continue;
    fi
    echo -e "Getting information for $PACKAGE\n"
    FILES=`/usr/bin/dpkg -c "${ARCHIVE_DIR}${PACKAGE}"`

    for FILE in "$FILES";
    do
        #FILE_DETAILS=`echo "$FILE" | awk '{print $1"\t"$2"\t"$6}'`
    echo "$FILE" | awk '{print $1"\t"$2"\t"$6}' | while read line;
        do
            changePerms $line
        done
        #changePerms $FILE_DETAILS
    done
done
user102453
la source
3

D'accord avec blueben, la simple réinstallation peut être plus rapide que d'analyser quel fichier / répertoire a besoin de quelle autorisation. Mais si la réinstallation n'est pas une option, voici une idée:

  1. Installer une installation Ubuntu par défaut sur une autre machine
  2. Exécutez cette commande pour obtenir les autorisations de chaque fichier / répertoire du système: find / | xargs stat -c 'chmod %a "'%n'"' > /tmp/chmod.sh
  3. Copiez le fichier chmod.shsur l'ordinateur avec les mauvaises autorisations
  4. Exécutez ce fichier chmod +x /tmp/chmod.sh && /bin/bash /tmp/chmod.sh
  5. J'espère que la plupart des choses fonctionnent (tout ne fonctionnera pas, je crois)
weeheavy
la source
2

ERRATUM à mon message publié en tant qu'utilisateur user100740: pour prendre en charge les liens, la commande combinée est:

/usr/bin/find / -exec /usr/bin/stat --format="[ ! -L {} ] && /bin/chmod %a %n" {} \; -exec /usr/bin/stat --format="/bin/chown -h %U:%G %n" {} \; |/bin/bzip2 -c > /tmp/restore_fileperms.$(/bin/date +%w).sh.bz2
jlovi
la source
2

Si vous pouvez toujours lancer /usr/sbin/synaptic, il est souvent réparable.

Triez les packages par état (packages installés en haut), sélectionnez tous les packages installés, cliquez avec le bouton droit et sélectionnez réinstaller. Ensuite, appliquez, cela vous demandera dpkgde ré-extraire tous les fichiers de ces packages. (Vous perdrez toutes les modifications locales (mais pas les modifications du fichier de configuration).)

Il se peut cependant que tout ne soit pas réparé.
L'autre chose est que si vous allez dans /var/cache, vous pouvez appeler dpkg -x <package name> /pour chaque paquet installé, puis appeler dpkg --reconfigure -a. De plus, si vous utilisez Ubuntu, vous pouvez effectuer une mise à niveau dist qui corrige souvent de nombreuses erreurs (en supposant que vous n'êtes pas déjà sur la dernière version). Généralement, lorsque j'essaie de corriger une erreur comme celle-ci, j'essaie ces correctifs simples et s'ils ne font pas que le faire fonctionner à nouveau, il est temps de réinstaller.

Perkins
la source
-2

démarrer à partir d'un CD live. puis lancez shell, puis sudo -s. Puis chmod 777 / *, puis chmod 600 / etc / passwd. le noyau paniquera si init échoue, ce qui se produira si les scripts / lib / init ne sont pas exécutables. démarrer en mode mono-utilisateur, pour Lilo Linux 1, et exécuter le script de user102453 ci-dessus. Cela amène le démarrage du système à l'invite. Encore faut-il que X fonctionne.

Wiley
la source
3
Wow, c'est une idée assez horrible que vous avez là-bas.
HopelessN00b
-3

La définition de l'autorisation de / à 755 a fonctionné pour moi.

Alors vérifiez d'abord avec

root@ubuntu:/# cd /
root@ubuntu:/# ls -ld

Les autorisations doivent être "drwxr-xr-x" (755).

Stefan
la source
1
Cela n'aborde pas la partie récursive de la question.
kasperd du
Non, et cela n'aide pas non plus avec les 4755 2755 et 6755. Si c'était juste / usr (c'est souvent le cas), vous pouvez récursivement ls -al un système similaire et exclure le 755, cela peut laisser une liste de moins de 1000 fichiers qui peuvent être traités manuellement. Bien sûr, src et les en-têtes n'ont pas vraiment d'importance.
mckenzm