J'ai couru accidentellement
sudo chmod 755 -R /
au lieu de
sudo chmod 755 -R ./
Je l'ai arrêté après quelques secondes, mais il y a maintenant des problèmes tels que
sudo: must be setuid root
Comment puis-je rétablir les autorisations?
permissions
sudo
chmod
fl00r
la source
la source
sudo
ça veut dire que tu as réfléchi à deux fois à ce que tu vas faire!Upgrade from Ubuntu 11.04 to Ubuntu 11.04
. Acceptez cette option, et cela réinstallera efficacement Ubuntu pour vous, de la manière la plus simple./
à la fin du nom du répertoire pour spécifier le répertoire en tant que cible. C'est une mauvaise habitude , ne le faites pas, jamais ! Le.
nom de répertoire est par lui-même valide, il n'est pas nécessaire de l'ajouter/
. Si tout le monde suivait cette règle, de nombreusessudo
opérations mal typées n'auraient aucun effet sur le répertoire racine et ne causeraient donc aucun dommage à leurs systèmes. Ne le fais pas!cd .
, par exemple, ne fait rien.ls .
est le même quels
. En outre, le..
est un nom de répertoire qui signifie "le parent de.
", et vous le saviez probablement déjà./
à la fin. Si vous voulez développer le chemin d'accès uniquement pour les répertoires. Exemple de listage de répertoires dans le répertoire en cours:echo */
Réponses:
En bref: vous ne pouvez pas, réinstallez votre système.
Je veux dire, les autorisations Posix sont utilisées et sont largement utilisées; il existe une multitude d'endroits dans le système de fichiers où de mauvaises autorisations briseraient le système d'exploitation (indicateurs SUID) ou, pire encore, le rendraient exposé en termes de sécurité (
/etc/ssh/ssh_host_rsa_key
) alors qu'il semblait fonctionner correctement.Par conséquent, une telle reprise est difficile à faire correctement. Manquer une chose - et vous bousiller. Vous avez déjà foiré votre
sudo chmod
commande (si c'est votre amie plutôt que vous, elle pourrait aussi bien apprendre une leçon sur Linux) - et c'est une commande très simple. Une récupération adéquate exigerait beaucoup plus de commandes et beaucoup plus de vigilance. Même si vous utilisez le script de quelqu'un.Alors faites-moi confiance, il suffit de réinstaller. C'est un pari sûr et garanti pour vous éviter des ennuis.
Enfin, quelques conseils pertinents ici.
Premièrement: les réinstallations seront moins pénibles si vous configurez la
/home
prochaine fois sur une partition séparée . En fait, ils seront un jeu d'enfant.Deuxièmement: envisagez de faire de la science folle sous Linux sur une machine virtuelle telle que la VirtualBox et réalisez vos instantanés.
Troisièmement:
chmod -R .
fonctionne. Un point seul.
est un nom de répertoire valide. Il n'y a pas vraiment besoin d'ajouter cette barre oblique. Vous auriez pu éviter le risque catastrophique de sauter le point complètement;simple
chmod: missing operand after ‘755’
VS un système en ruine.la source
sudo
signifie que vous devez vérifier deux fois.J'ai écrit et utilise depuis plusieurs années deux ou trois scripts Ruby pour les
rsync
permissions et la propriété. Scriptget-filesystem-acl
collecte toutes les informations en parcourant tous les fichiers de manière récursive et les met toutes dans le fichier.acl
. Le script.acl-restore
lira.acl
et appliquera tous leschown
'etchmod
'.Vous pouvez exécuter
get-filesystem-acl
une installation Ubuntu similaire, puis copier le.acl
fichier dans votre boîte endommagée par chmod, y mettre.acl
et.acl-restore
dans /, puis exécuter.acl-restore
.Vous aurez besoin de root pour corriger votre problème
sudo
comme l'a suggéré Marco Ceppi.Je peux générer et vous donner le
.acl
fichier pour mon Ubuntu.get-filesystem-acl
.acl-restore
la source
owner_id
est indéfinifind SOME_DIR -depth -printf 'chmod %m %p\n' > saved_permission
En long: tu peux. Vous devez monter le système de fichiers à partir d'un Live CD et commencer à rétablir les autorisations aux emplacements appropriés. Au moins pour récupérer sudo, vous voudrez vous lancer
sudo chmod u+s /usr/bin/sudo
pendant la session LiveCD - cela corrigera le paramètre doit être setuid root.Cependant, il serait probablement plus facile de réinstaller simplement le système.
la source
J'essayerais de réinstaller tous les paquets avec
apt-get install --reinstall
, en utilisant éventuellement le résultat dedpkg --get-selections | grep install
pour en obtenir une liste.la source
sudo apt-get autoremove
?autoremove
supprime uniquement les packages que vous n'avez pas installés manuellement.apt-mark auto $pkg
/apt-mark manual $pkg
qui vous permet de modifier le statut de "installé manuellement / installé automatiquement" par paquet.D'accord, je n'ai pas testé cela (donc utilisez-le à vos risques et périls), mais cela pourrait quand même fonctionner. Je vais tester cela sur une machine virtuelle quand j'ai la chance de:
Premièrement, dans un système qui fonctionne toujours, j’ai fait ce qui suit pour obtenir toutes les autorisations de fichiers d’une liste, en ignorant le
/home/
répertoire:Ceci imprimera les permissions et le nom de fichier pour chaque fichier ou répertoire du système, suivis d'un
\0
caractère (requis ultérieurement pour traiter les noms de fichiers étranges tels que ceux contenant des nouvelles lignes).Ensuite, sur un système où les autorisations de fichiers ont été compromises:
Ceci lira chaque ligne de
fileper.log
, en enregistrant les autorisations en tant que$perm
et le nom du fichier en tant que$file
, puis définira les autorisations du fichier (ou du répertoire) sur ce qui était répertorié dans la liste.fileper.log
Quelques points à noter ici:
/tmp/fileper.log
vous pouvez peut-être lister les paramètres personnalisés, proc, etc.Ce que je suggérerais est de démarrer un LiveCD avec la version Linux que vous avez sur votre disque, exécutez la commande, modifiez le chemin d'accès à l'emplacement où vous avez le disque local monté et exécutez la deuxième commande!
J'ai testé que lorsque je suis démarré à partir d'un CD / USB Ubuntu, je peux choisir de ne pas formater le disque, ce qui signifie qu'il remplacera tout ce qui se trouve dans le
/
répertoire, MAIS ignorer le/home/
répertoire. Cela signifie que la configuration des applications / DATA (musique, vidéo, documents) de vos utilisateurs sera toujours intacte. Et en remplaçant les fichiers système, lechmod
est réglé sur le numéro approprié.la source
chmod $(echo $LINE)
au lieu de justechmod $LINE
? , Vous pouvez également utiliser simplementfind
sansstat
:find … -printf "%#m %p\n"
. Mieux encore, vous pouvez créer la commande entière:,find … -printf "chmod %#m %p\n"
puis exécutez le fichier en tant que script.michael@NEXUS-TWO:~$ sudo find / -name '*' -exec stat -c "%a %n" {} \; >> /tmp/fileper.log
mais elle passe également par-dessus/proc
et d'autres endroits que vous ne souhaitez peut-être pas inclure dans votre liste.(Je sais que je ne devrais pas commenter dans une réponse, mais pas assez de réputation pour commenter.)
La réponse de blade19899 a fonctionné pour moi à l'exception des liens symboliques. Par exemple, il a appliqué 755 à / bin / bash, mais a ensuite appliqué 777 au lien symbolique / bin / rbash, ce qui a pour effet 777-ing / bin / bash.
Comme j'avais déjà le fichier fileper.log, je viens de modifier la commande destination-end:
la source
chmod
.... effectively 777-ing /bin/bash
- Nope; ça ne fonctionne pas comme ça. Voulez-vous dire que je peux remplacer/usr/bin/apt
mon propre compte en tant qu'utilisateur non root , simplement en lui écrivant via un lien symbolique 777? :) Exercez un peu de pensée critique; Les liens symboliques ne peuvent pas fonctionner et ne fonctionnent pas de cette façon. 777 autorisations pour les liens symboliques sont communes et normales.Vous pouvez essayer de restaurer les autorisations avec
apt-get
.Si vous ne pouvez pas exécuter ces commandes avec sudo, vous devrez peut-être démarrer en mode de récupération et les exécuter en tant que root.
Pour démarrer en mode de récupération, voir https://wiki.ubuntu.com/RecoveryMode .
De http://hyperlogos.org/page/Restoring-Permissions-Debian-System
Note: Ceci a été initialement publié sur les forums Ubuntu mais je ne trouve pas le message original.
Essayez, dans l'ordre,
Si cela échoue:
Et enfin, en dernier recours,
Utiliser apt-get
Voici le snip pertinent, édité pour la correction et reformaté:
la source
J'ai eu le même problème, je peux le réparer. Dans mon cas Ubuntu 19.10
Ouvrez votre terminal et tapez ci-dessous un code simple
ouvrez un autre terminal et vérifiez la commande ci-dessous.
la source