Como corrigir sudo após o "chmod -R 777 / usr / bin"?

15

Entrei chmod -R 777 /usr/bine agora o sudo não está funcionando.

Diz sudo must be setuid root.

Alguns conselhos on-line disseram para executar chown root:root /usr/bin/sudo chmod 4755 /usr/bin/sudo.

Ao entrar chown root:root /usr/bin/sudomostra um opened in readonly modeerro.

Manojkumar
fonte
11
Você deve ser root para executar os comandos
Manoj Kumar: Será que o pkexecmétodo na minha resposta (que você marcou como aceite) resolver esse problema para você? Fiquei convencido de que, como Damien Roche e Oli comentaram, esse método não funciona realmente depois que um sudo chmod -R 777 /usr/bincomando é concluído com êxito. Como sudo, pkexectem que ser setuid root para funcionar. (Não sei por que, pois ele usa o serviço polkit , mas usa.) No entanto, acho que ouvi outras pessoas dizerem que isso funcionou para elas, o que é curioso! Você pressionou Ctrl + C antes de o 777comando chmod terminar?
Eliah Kagan
Olá. Na verdade, esse método funcionou para mim após a execução acidental sudo chmod -R 777 /usr/bin, mas somente após o login na rootconta.
iHowell 14/03

Respostas:

10

Não obstante o status aceito, agora estou convencido de que esta resposta está errada . (Espero melhorá-lo em breve, depois de consultar o OP sobre a aceitação.) Acho que me lembro de outros dizendo que isso funcionou, mas acredito que os problemas deles eram pelo menos um pouco diferentes. O método descrito neste documento permanece valioso para algumas situações em que chmod -R 777 /usr/biné interrompido com Ctrl+ Cou não é concluído. Mas uma vez que isso acontece, também pkexecé inconstitucional e não funcionará melhor do quesudo , como Damien Roche e Oli comentaram com razão.

Em um sistema desktop Ubuntu, o PolicyKit está instalado, portanto pkexecpode ser usado para reparar um arquivo sudoou executável corrompidosudoers . Você não precisa inicializar no modo de recuperação e não precisa inicializar a partir de um CD ao vivo. Você nem precisa reiniciar.

Nesse caso, execute os seguintes comandos:

pkexec chown root:root /usr/bin/sudo
pkexec chmod 4755 /usr/bin/sudo

Veja esta pergunta para mais informações.

Eliah Kagan
fonte
9
pkexec must be setuid root! Que pesadelo!
Damien Roche
11
Como Damien aponta, o problema com essa abordagem está pkexecexatamente na mesma situação que sudo. É normalmente setuid e vive em /usr/bin. Eu testei e isso simplesmente não funciona depois chmod -R 777 /usr/bin.
Oli
@DamienRoche, Oli: Eu sinto muito por não fixação desta maneira , mais cedo! Vocês dois estão certos. Não sei por pkexecque o setuid root deve funcionar (ele não funciona no daemon polkit como em outros processos não setuid?), Mas precisa disso. Eu comentei a pergunta para ver se o OP (que aceitou isso) pode esclarecer o que é certo ou útil sobre esta resposta. E adicionei um banner temporário na parte superior desta postagem para não enganar ainda mais. Se essa resposta continuar a existir, seu formulário aprimorado provavelmente incorporará algumas informações atualmente nesse banner.
Eliah Kagan
Você pode simplesmente usar su, que está localizado em / bin
FliiFe
@FliiFe A correção das permissões (ou propriedade) dos arquivos /usr/binrequer privilégios de root, mas você não pode sufazer root na maioria dos sistemas Ubuntu porque os logins raiz estão desativados por padrão. Ao contrário de , sudoe pkexecquando você usa suum shell raiz ou executa um comando como root, é necessário fornecer a senha do root, não a sua. Mas o root não possui senha por padrão no Ubuntu (ou seja, a autenticação baseada em senha para o root sempre falha, não que a inserção de uma senha em branco funcione). Veja RootSudo para detalhes.
Eliah Kagan
4

Mesmo ao executar a partir do CD ao vivo / Pendrive, você deve prefixar seu chmodcomando com sudo. Portanto, suas etapas serão as seguintes:

  1. inicializar a partir de um CD / Pendrive ao vivo
  2. verifique se o seu disco já foi montado automaticamente (e para onde). Caso contrário, monte-o (veja abaixo)
  3. use sudo chmod 0755 <path>para ajustar as permissões

Como descobrir onde o seu disco está montado: a partir de uma janela do terminal, execute mount(sem argumentos). Isso listará todos os dispositivos montados. Verifique os typelistados - você pode pular tudo que não estiver usando um "sistema de arquivos real" (seu disco provavelmente usa ext3 ou ext4 - você pode pular itens como proc, sysfs e similares). Se algo parecer promissor (parecido /dev/sda1 on /media/sda1 type ext3), verifique seu conteúdo usando ls /media/sda1para ver se é isso.

Se não estiver montado, você pode verificar com as /deventradas em que o disco pode estar (usando ls /dev/ |grep '/dev/sdpara verificar se há dispositivos disponíveis, o seu disco deve ser semelhante /dev/sdaX, /dev/sdbXou algo semelhante - com X sendo um número). Compare isso com a lista de dispositivos montados. Se não estiver lá, tente montá-lo e verifique seu conteúdo (como mostrado acima). Para montá-lo, primeiro crie um ponto de montagem, por exemplo sudo mkdir /mnt/mydisk, tente montar o dispositivo usando mount /dev/sda1 /mnt/mydiske verifique seu conteúdo usando ls /mnt/mydisk.

Depois de conseguir o disco lá, você pode ir para alterar as permissões de volta em seus dir usr: sudo chmod 0755 /mnt/mydisk/usr.

Agora você ainda pode estar com problemas se originalmente executou o chmodcomando recursivamente, usando o -Rparâmetro Nesse caso, você pode tentar corrigir cada entrada manualmente - ou pode ir direto para uma nova instalação ...

Izzy
fonte
Eu tentei criar um ponto de montagem, mas eu tenho um erro que dizia montagem mnt / ponto de mydisk não existe é mydisk de ser substituído com alguma coisa e apenas para o registro i escreveu mount /dev/sda /mnt/mydiska partirroot@Ubuntu:/dev#
vin
Você a) criou esse ponto de montagem (diretório) antes de emitir o comando mount (como descrito) eb) também cuidou da barra principal ? Tente mkdir -p /mnt/mydisk && mount /dev/sda1 /mnt/mydisk(Eu não acho que você não tem partições /dev/sda, então você deve ter perdido o número da partição assim Certifique-se de especificar o dispositivo correto (ou montar falhará)..
Izzy
1

Eu acho que Mat está correto, você deve ser root para adicionar o bit a / usr / bin, mas é claro que o sudo está quebrado. Se você tiver uma senha root, poderá usá-la para fazer logon como root e, em seguida, corrigir as permissões com o comando acima. Se não, no entanto, (e eu também não), provavelmente seria melhor:

  • inicializar a partir de um CD ao vivo do Linux
  • tornar-se raiz lá
  • monte a partição com o sistema acima
  • em seguida, endireite as permissões nesse sistema de arquivos usando um terminal.

Raiz é sempre o número de usuário 0, portanto, a raiz de qualquer sistema pode fazer alterações permitidas na raiz de outros sistemas de arquivos.

John S Gruber
fonte
1

Eu não tenho muito conhecimento. Mas essas etapas resolveram meu problema mesmo sem reiniciar minha máquina. Siga esses passos:

su root
<enter root password>
cd /usr
chmod -R 755 *
Manu Mohan Thekkedath
fonte
11
Está faltando pelo menos um comando "cd". Se você fizer assim, estará executando o "chmod" no diretório inicial para obter o root. Isso vai piorar as coisas.
Rinzwind 27/03
thaks ... editou minha resposta ... eu estava na pasta / usr
Manu Mohan Thekkedath
2
Isso funciona apenas se uma senha for definida root, que não é a configuração padrão do Ubuntu.
precisa
1

Na tentativa de definir permissões para meus scripts locais, quebrei a permissão sudo e alterei a propriedade por engano. Consegui alterar novamente a propriedade do sudo para root, fazendo o seguinte:

Etapa 1: mude para o modo de recuperação do ubuntu . Se você não conhece o processo, pode consultar uma resposta aqui: /ubuntu//a/172346/223901

Etapa 2: uma vez no modo de recuperação, selecione raiz - prompt de shell Drop to root

Etapa 3: Execute os seguintes comandos

mount -o remount,rw /
chown root:root /usr/bin/sudo
chmod 4755 /usr/bin/sudo
reboot

Aguarde o seu sistema inicializar normalmente e você verá a propriedade do sudo de volta ao root.

ramsudharsan
fonte