Eu acidentalmente corri
sudo chmod 755 -R /
ao invés de
sudo chmod 755 -R ./
Parei depois de alguns segundos, mas agora existem alguns problemas, como
sudo: must be setuid root
Como posso reverter as permissões novamente?
permissions
sudo
chmod
fl00r
fonte
fonte
sudo
significa que você pensou duas vezes o que fará!Upgrade from Ubuntu 11.04 to Ubuntu 11.04
. Aceite esta opção e ela efetivamente reinstalará o Ubuntu para você, da maneira mais indolor./
no final do nome do diretório para especificar o diretório como um destino. É um mau hábito , não faça isso, nunca ! O.
nome do diretório é por si só válido, não há necessidade de anexá/
-lo. Se todos seguissem essa regra,sudo
operações muito digitadas incorretamente não teriam efeito no diretório raiz; portanto, nenhum dano teria sido causado a seus sistemas. Não faça isso!cd .
, por exemplo, não faz nada.ls .
é o mesmo quels
. Além disso,..
é um nome de diretório que significa "o pai de.
" e você provavelmente já sabia./
no final. Se você deseja fazer a expansão do nome do caminho apenas para diretórios. Exemplo de listagem de diretórios dentro do diretório atual:echo */
Respostas:
Em resumo: você não pode, reinstale o seu sistema.
Quero dizer, as permissões do Posix são usadas e muito dependentes; existem vários lugares no sistema de arquivos em que permissões erradas podem interromper o sistema operacional (sinalizadores SUID) ou pior ainda, torná-lo exposto em termos de segurança (
/etc/ssh/ssh_host_rsa_key
) enquanto parece estar funcionando bem.Portanto, é difícil fazer essa recuperação corretamente. Perca uma coisa - e você estraga tudo. Você já estragou o seu
sudo chmod
comando (se esse é seu amigo e não você, ela também pode aprender algumas lições do Linux) - e esse é um comando muito simples. A recuperação adequada exigiria muito mais comandos e muito mais vigilância. Mesmo se você usar o script de alguém.Então confie em mim, basta reinstalar. É uma aposta segura e garantida para mantê-lo longe de problemas.
Finalmente, algumas dicas relevantes aqui.
Primeiro: as reinstalações serão menos dolorosas se você configurar sua
/home
partição separada na próxima vez. Na verdade, eles serão uma brisa.Segundo: considere fazer ciência maluca do Linux em uma máquina virtual como a VirtualBox e faça seus instantâneos.
Terceiro:
chmod -R .
funciona. Um ponto por si só.
é um nome de diretório válido. Não há necessidade real de acrescentar essa barra. Você poderia ter evitado o risco catastrófico de pular o ponto totalmente;mero
chmod: missing operand after ‘755’
VS um sistema arruinado.fonte
sudo
significa que você precisa verificar duas vezes.Escrevi e utilizo há vários anos alguns scripts Ruby para
rsync
permissões e propriedade. O Scriptget-filesystem-acl
coleta todas as informações atravessando recursivamente todos os arquivos e coloca tudo no arquivo.acl
. O script.acl-restore
lerá.acl
e aplicará todos oschown
'schmod
' e 's.Você pode executar
get-filesystem-acl
em uma instalação semelhante do Ubuntu e, em seguida, copiar o.acl
arquivo na sua caixa danificada pelo chmod, colocar.acl
e.acl-restore
/ / e executar.acl-restore
.Você precisará ter o root para consertar o seu
sudo
como Marco Ceppi sugeriu.Eu posso gerar e fornecer o
.acl
arquivo para o meu Ubuntu.get-filesystem-acl
.acl-restore
fonte
owner_id
é indefinidofind SOME_DIR -depth -printf 'chmod %m %p\n' > saved_permission
Em muito tempo: você pode. Você precisará montar o sistema de arquivos a partir de um Live CD e começar a reverter as permissões nos locais apropriados. No mínimo, para recuperar o sudo, você deverá executar
sudo chmod u+s /usr/bin/sudo
enquanto estiver na sessão do LiveCD - isso corrigirá a raiz do setuid.No entanto, provavelmente seria mais fácil simplesmente reinstalar o sistema.
fonte
Eu tentaria reinstalar todos os pacotes com
apt-get install --reinstall
, possivelmente usando a saída dedpkg --get-selections | grep install
para obter uma lista deles.fonte
sudo apt-get autoremove
?autoremove
remove apenas pacotes que você não instalou manualmente.apt-mark auto $pkg
/apt-mark manual $pkg
que permitem modificar o status de "manualmente instalado / instalado automaticamente" por pacote.Tudo bem, eu não testei isso (use por sua conta e risco), mas ainda pode funcionar. Vou testar isso em uma máquina virtual quando tiver a chance de:
Primeiro, em um sistema ainda em funcionamento, fiz o seguinte para obter todas as permissões de arquivo em uma lista, pulando o
/home/
diretório:Isso imprimirá as permissões e o nome do arquivo para cada arquivo ou diretório do sistema, seguido de um
\0
caractere (isso é necessário posteriormente para lidar com nomes de arquivos estranhos, como os que contêm novas linhas).Em seguida, em um sistema em que as permissões de arquivo foram comprometidas:
Isso lerá cada linha de
fileper.log
, salvando as permissões como$perm
e o nome do arquivo$file
e, em seguida, definirá as permissões do arquivo (ou do diretório) para o que estiver listado no diretóriofileper.log
Algumas coisas a serem observadas aqui:
/tmp/fileper.log
você pode listar configurações personalizadas, proc, etc.O que eu sugeriria é inicializar um LiveCD com a versão Linux que você possui no disco, executar o comando, modificar o caminho para o local em que o disco local está montado e executar o segundo comando!
Eu testei que, quando inicializado a partir de um CD / USB do Ubuntu, posso optar por não formatar o disco, o que significa que ele substituirá tudo no
/
diretório, mas pule o/home/
diretório. Isso significa que seus usuários ainda terão a configuração de apps / DATA (música, vídeo, documentos) intacta. E, substituindo os arquivos do sistema, o valorchmod
é definido para o número adequado.fonte
chmod $(echo $LINE)
invés de apenaschmod $LINE
? Além disso, você pode usar apenasfind
semstat
:find … -printf "%#m %p\n"
. Melhor ainda, você pode criar o comando inteiro: efind … -printf "chmod %#m %p\n"
, em seguida, executar o arquivo como um script.michael@NEXUS-TWO:~$ sudo find / -name '*' -exec stat -c "%a %n" {} \; >> /tmp/fileper.log
executada,/proc
além de alguns outros lugares que você pode não querer na sua lista.(Eu sei que não devo comentar em uma resposta, mas não tenho reputação suficiente para comentar.)
A resposta do blade19899 funcionou para mim, exceto pelos links simbólicos. Por exemplo, aplicou 755 a / bin / bash, mas depois aplicou 777 ao link simbólico / bin / rbash, efetivamente 777-ing / bin / bash.
Como eu já tinha o arquivo fileper.log, apenas modifiquei o comando destination-end:
fonte
chmod
.... effectively 777-ing /bin/bash
- não; não é assim que funciona. Você está dizendo que eu posso substituir o/usr/bin/apt
meu próprio usuário não root , escrevendo nele através de um link simbólico 777? :) Exercite um pensamento crítico; links simbólicos não podem e não funcionam dessa maneira. As permissões 777 para links simbólicos são comuns e normais.Você pode tentar restaurar permissões com
apt-get
.Se você não pode executar esses comandos com o sudo, pode ser necessário inicializar no modo de recuperação e executá-los como root.
Para inicializar no modo de recuperação, consulte https://wiki.ubuntu.com/RecoveryMode .
De http://hyperlogos.org/page/Restoring-Permissions-Debian-System
Nota: Isso foi originalmente publicado nos Fóruns do Ubuntu, mas não consigo encontrar a postagem original.
Tente, em ordem,
Se isso falhar:
E, finalmente, como último recurso,
Usando o apt-get
Aqui está o trecho relevante, EDITADO PARA A CORREÇÃO e reformatado:
fonte
Eu tive um mesmo problema, posso corrigi-lo. No meu caso Ubuntu 19.10
Abra seu terminal e digite abaixo o código simples
abra outro terminal e verifique o comando abaixo.
fonte