Por que não tenho uma senha para "su"? Problemas com o “sudo”

29

Eu instalei o Ubuntu usando a GUI, dando uma senha e tudo mais. Eu não me lembro intricadamente do processo. No entanto, o que me preocupa é que não sei a seguinte senha:

$ su
Password: <the only password I've ever created on this machine>
su: Authentication failure

Eu simplesmente não sei o que fazer. Eu não estou em apuros, mas eu só quero saber o que está acontecendo aqui. Eu também posso me bloquear de diretórios:

starkers@ubuntu:~/Desktop$ mkdir foobs
starkers@ubuntu:~/Desktop$ sudo chmod 777 -R foobs
sudo: /var/lib/sudo writable by non-owner (040777), should be mode 0700
[sudo] password for starkers: <the only password I've ever created on this machine> 
starkers@ubuntu:~/Desktop$ cd foobs
bash: cd: foobs: Permission denied

Estou um pouco confuso. Como posso me trancar assim? Eu acho que sudo é o comando chave aqui. Mas estou tornando o arquivo foobs tão aberto quanto possível por meio do chmod , então por que ele me bloqueia?

    
por Starkers 07.04.2014 / 01:05

2 respostas

41

Por padrão, a conta de superusuário ( root ) está desabilitada e não possui nenhuma senha. Você pode criar um executando:

$ sudo passwd root

Você poderá então fazer login como root executando su usando essa senha.

Quanto ao chmod , o comando correto seria:

$ chmod 777 -R foobs

Você também pode usar:

$ sudo -i

para logar como root usando sua senha (sem criar uma senha root como descrito acima).

    
por Oli 07.04.2014 / 01:08
66

1. Por que você não tem uma senha de root

Enquanto você pode criar uma senha para a conta de superusuário, permitindo que você efetue login como root com su , vale a pena mencionar que essa não é a maneira "Ubuntu" de fazer as coisas. O Ubuntu escolheu especificamente não para fornecer um login e senha root por padrão por um motivo. Em vez disso, uma instalação padrão do Ubuntu usará sudo .

O Sudo é uma alternativa para dar às pessoas uma senha de root para executar tarefas de superusuário. Em uma instalação padrão do Ubuntu, a pessoa que instalou o sistema operacional recebe permissão "sudo" por padrão.

Qualquer um com permissão "sudo" pode executar algo "como um superusuário" com sudo pré-pendente em seu comando. Por exemplo, para executar apt-get dist-upgrade como um superusuário, você poderia usar:

sudo apt-get dist-upgrade

Você verá esse uso do sudo praticamente em qualquer lugar em que você lê um tutorial sobre o Ubuntu na web. É uma alternativa para fazer isso.

su
apt-get dist-upgrade
exit

Com o sudo, você escolhe antecipadamente quais usuários têm acesso ao sudo. Não é necessário que eles se lembrem de uma senha de root, pois usam sua própria senha. Se você tiver vários usuários, poderá revogar o acesso do superusuário apenas removendo a permissão do sudo, sem precisar alterar a senha do root e notificar a todos sobre uma nova senha. Você pode até escolher quais comandos um usuário pode executar usando sudo e quais comandos são proibidos para esse usuário. E, por último, se houver uma violação de segurança, em alguns casos, poderá deixar uma trilha de auditoria melhor mostrando qual conta de usuário foi comprometida.

O Sudo facilita a execução de um único comando com privilégios de superusuário. Com su , você cai permanentemente para um shell de superusuário que deve ser encerrado usando exit ou logout . Isso pode levar as pessoas a permanecerem no shell do superusuário por mais tempo do que o necessário, apenas porque é mais conveniente do que sair e entrar novamente mais tarde.

Com o sudo, você ainda tem a opção de abrir um shell de superusuário permanente (interativo) com o comando:

sudo su

... e isso ainda pode ser feito sem qualquer senha de root, porque sudo dá privilégios de superusuário ao comando su .

E, da mesma forma, em vez de su - para um shell de login, você pode usar sudo su - ou mesmo sudo -i .

No entanto, ao fazer isso, você só precisa estar ciente de que está atuando como um superusuário para cada comando. É um bom princípio de segurança não ficar como superusuário por mais tempo do que o necessário, apenas para diminuir a possibilidade de causar acidentalmente algum dano ao sistema (sem ele, você só pode danificar os arquivos que seu usuário possui).

Só para esclarecer, você pode , se preferir, fornecer ao usuário root uma senha que permita logins como root, conforme descrito na resposta do @ Oli, se você quiser especificamente fazer as coisas dessa maneira. Eu só queria que você soubesse sobre a convenção do Ubuntu de preferir sudo e que você saiba que existe uma alternativa.

2. Os problemas com o seu comando chmod 777 -R

Sua pergunta também tem uma segunda parte: seus problemas com o comando sudo chmod 777 -R foobs .

Em primeiro lugar, o seguinte aviso indica um problema de segurança potencialmente sério em sua máquina:

sudo: /var/lib/sudo writable by non-owner (040777), should be mode 0700

Isso significa que, em algum momento, você definiu /var/lib/sudo como mundialmente gravável. Eu imagino que você tenha feito isso em algum estágio usando um comando como sudo chmod 777 -R / . Infelizmente, ao fazer isso, você provavelmente quebrou todas as permissões de arquivo em todo o sistema. É improvável que esse seja o único arquivo de sistema importante cujas permissões foram alteradas para serem graváveis pelo mundo. Essencialmente, você tem um sistema que pode ser facilmente hackeado agora, e a única maneira fácil de recuperá-lo seria reinstalar.

Em segundo lugar, o comando que você estava usando:

sudo chmod 777 -R foobs

Ao manipular arquivos em seu diretório inicial, nesse caso em ~/Desktop , você não precisará usar sudo . Todos os arquivos que você cria em seu diretório home devem ser modificáveis por você de qualquer maneira (e se não, algo engraçado está acontecendo).

Além disso, você precisa estar totalmente ciente das conseqüências de alterar as permissões de arquivo em massa, como fazer recursivamente ou em um grande número de arquivos. Nesse caso, você está alterando cuidadosamente as permissões de arquivo para serem graváveis por todos. Qualquer outro usuário, ou qualquer software de servidor defeituoso na máquina, pode ter acesso fácil para sobrescrever todos esses arquivos e diretórios.

É quase certo que chmod 777 -R [dir] não é uma solução apropriada para qualquer problema que você estivesse tentando resolver (e como mencionei acima, há evidências de que você fez isso em arquivos de sistema / var / lib também, e eu assumo muitos outros lugares).

Algumas regras básicas:

  • Se você estiver apenas mexendo com seus próprios arquivos em seu diretório pessoal, área de trabalho, etc., nunca precisará usar sudo ou direitos de superusuário. Se você fizer isso, é um sinal de aviso de que você está fazendo algo errado.

  • Você nunca deve modificar manualmente os arquivos do sistema pertencentes aos pacotes. Exceção: a menos que você esteja fazendo isso especificamente de maneiras documentadas por esses pacotes, modificando sua configuração em /etc . Isso se aplica também à alteração de permissões de arquivo. Se um tutorial ou tentativa de corrigir o problema exigir sudo ou direitos de superusuário, e não for simplesmente uma alteração em uma configuração em / etc /, é um sinal de aviso de que você está fazendo algo errado.

por thomasrutter 07.04.2014 / 02:17

Tags