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

34

Eu instalei o Ubuntu usando a GUI, me dando uma senha e tudo. Não me lembro intricadamente do processo. No entanto, o que me preocupa é que não conheço 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. Não estou com problemas, mas só quero saber o que está acontecendo aqui. Também posso me bloquear nos 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 principal aqui. Mas estou tornando o foobsarquivo o mais aberto possível chmod, por que ele me bloqueia?

Starkers
fonte
6
Você quase nunca deve fazer isso chmod -R 777 whatever, a menos que queira causar um enorme risco à segurança.
11
@BroSlow Obrigado pelo topo. Fora dessa questão, mas como um conjunto de privilégios de gravação e leitura seria um diretório com segurança? 666?
Starkers
11
Definitivamente melhor, mas depende do que você está tentando fazer. por exemplo, você realmente precisa que todos os usuários tenham acesso r / w a tudo. Caso contrário, você poderia fazer algo como 644 (somente leitura para todos, exceto você). E, em geral, eu seria muito cuidadoso ao fazer recursivas, chmodpois está apenas alterando os arquivos que você pretendia.
11
@broslow Você está chapado? 666 é 1) ainda gravável em todo o mundo e, portanto, o mesmo grau de risco à segurança e 2) remove o bit executável, o que significa que ele não seria mais capaz de chdir nesse diretório.
Shadur
@ Starkers O verdadeiro problema de segurança que estou vendo aqui é que, por algum motivo insano, /var/lib/sudoestá definido como gravável no mundo. Isso não deveria estar acontecendo e você deve tentar descobrir por que isso aconteceu.
Shadur

Respostas:

49

Por padrão, a rootconta superuser ( ) está desabilitada e não possui senha. Você pode criar um executando:

$ sudo passwd root

Você poderá fazer login como root executando suesta senha.

Quanto chmodao comando correto, seria:

$ chmod 777 -R foobs

Você também pode usar:

$ sudo -i

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

Oli
fonte
4
@ Oli Talvez você possa editar sua pergunta para adicionar sudo su. Isso também concede direitos permanentes ao terminal.
despertar
13
não use sudo su, pois ele vai estragar o ambiente e as coisas vão quebrar. em vez disso, use sudo -i.
strugee
20
Não defina uma senha root. Você não definir uma senha de root.
wchargin
4
O chmod 777 é quase sempre ruim (o bit pegajoso é isento; conforme usado com / tmp). Esta resposta é um risco de segurança. Além disso, definir uma senha root não é a maneira como o Ubuntu deve ser usado; novamente convidando um risco de segurança. Por favor, siga a resposta de neon_overload.
Rinzwind
4
@WChargin, por que você sugere não ter uma conta / senha root? Estou genuinamente curioso como usuário do archlinux.
7894 Rob
67

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

Embora você possa criar uma senha para a conta de superusuário que permita efetuar login como root su, vale ressaltar que essa não é a maneira usual de fazer as coisas com o Ubuntu (ou cada vez mais outras distribuições também). O Ubuntu optou por não fornecer um login e senha root por padrão por um motivo. Em vez disso, uma instalação padrão do Ubuntu será usada sudopara fornecer privilégios 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 pessoa com permissão "sudo" completa pode executar algo "como superusuário", aguardando sudoseu comando. Por exemplo, para executar apt-get dist-upgradecomo superusuário, você pode usar:

sudo apt-get dist-upgrade

Você verá esse uso do sudo praticamente em qualquer lugar em que ler 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 root, pois eles usam sua própria senha. Se você tiver vários usuários, poderá revogar o acesso de superusuário apenas removendo sua permissão sudo, sem precisar alterar a senha root e notificar a todos sobre uma nova senha. Você pode até escolher quais comandos um usuário pode executar usando o 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ê fica permanentemente em um shell de superusuário que deve ser encerrado usando exitou logout. Isso pode levar as pessoas a permanecer no shell do superusuário por mais tempo do que o necessário, apenas porque é mais conveniente do que fazer logoff e logon 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 nenhuma senha root, porque sudoconcede privilégios de superusuário ao sucomando.

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

No entanto, ao fazer isso, você só precisa estar ciente de que está agindo como um superusuário para cada comando. É um bom princípio de segurança não permanecer 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 o usuário possui).

Apenas 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ê desejar especificamente fazer as coisas dessa maneira. Eu só queria que você soubesse sobre a convenção do Ubuntu de preferir sudoe 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.

Primeiro, o seguinte aviso indica um problema de segurança potencialmente sério na sua máquina:

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

Isso significa que, em algum momento, você decidiu /var/lib/sudoser gravável no mundo. Eu imagino que você tenha feito isso em algum momento 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 este seja o único arquivo importante do sistema cujas permissões foram alteradas para serem graváveis ​​no mundo. Essencialmente, agora você tem um sistema facilmente hackável 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 dentro do diretório inicial, nesse caso ~/Desktop, não é necessário usá-lo sudo. Todos os arquivos que você cria no diretório inicial devem ser modificáveis ​​por você de qualquer maneira (e, caso contrário, 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 fazê-lo recursivamente ou em um grande número de arquivos. Nesse caso, você está alterando cuidadosamente as permissões de arquivo para poderem ser gravadas no mundo. Qualquer outro usuário, ou qualquer software de servidor com erros na máquina, pode ter acesso fácil para substituir todos esses arquivos e diretórios.

É quase certo que chmod 777 -R [dir]ele é não uma solução adequada para qualquer problema que você estava tentando resolver (e como eu mencionei acima, há evidências de que você tenha feito isso para arquivos de sistema em / var / lib também, e eu assumo a muitas outras lugares).

Algumas regras básicas básicas:

  • Se você estiver apenas mexendo com seus próprios arquivos no diretório pessoal, na área de trabalho, etc, nunca precisará usar sudonem direitos de superusuário. Se o fizer, é 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, como modificando sua configuração /etc. Isso se aplica também à alteração das permissões de arquivo. Se um tutorial ou uma tentativa de corrigir o problema exigir sudodireitos de superusuário, e não for simplesmente uma alteração na configuração do / etc /, é um sinal de aviso de que você está fazendo algo errado.

thomasrutter
fonte
Impressionante explicação .. Polegares para cima .. :)
Saurav Kumar
7
Eu acho que "sudo -i" é a maneira "oficial" para obter uma shell de root, ao invés de "sudo su"
Max
3
Sim, você deve usar sudo -imais sudo su.
Seth
sudo -i(ou sudo su -) não são universalmente melhores, mas apenas diferentes - iniciam um shell de login que simula um ambiente de login de usuário raiz, que executa, por exemplo, o .profilearquivo ou .loginarquivo do usuário raiz. Isso é melhor se você quiser que o ambiente no shell seja mais como um shell de login raiz do que um shell interativo que ocorre com privilégios de superusuário. Provavelmente é melhor usar os shells baseados em login se estiver usando um shell, mas isso é discutível: o ponto da resposta é que o Ubuntu foi projetado principalmente sudopara executar comandos com privilégios de superusuário.
thomasrutter