Como o sudo é mais seguro do que usar diretamente o su se o usuário tiver acesso a todos os comandos?

40

Estou lendo as diferenças entre usar su e sudo , e todos parecem concordar que a abordagem sudo é mais segura do que permitir o acesso à própria conta raiz. Eles dizem que com a conta root você pode quebrar todo o seu sistema com apenas um único comando. Isso eu entendo. MAS o usuário inicial criado no sistema também tem acesso a todos os comandos usando o sudo. Isso eu posso descobrir executando su -l . Se este for o caso, então eu posso simplesmente executar sudo <game-ending command> para arruinar meu sistema. Então, como essa abordagem é melhor ou mais segura, permitindo-me acesso direto à conta de superusuário? Eu posso executar todos os mesmos comandos ...

É porque usando sudo na linha de comando estou explicitamente informando ao computador que eu acho que sei o que estou fazendo? Eles acham que as pessoas esquecerão que estão sob a conta de superusuário, a menos que eles digam explicitamente isso?

As pessoas também afirmam que, se o sistema fosse comprometido e inserido por alguém estrangeiro, estar sob a conta root permitiria que fizessem coisas terríveis no meu sistema. Mas parece-me que se eles já têm acesso à minha conta e sabem minha senha, eles podem fazer essas mesmas coisas terríveis usando o sudo e inserindo minha senha, pois eles nem precisam saber a senha do superusuário. O que eu não estou conseguindo aqui?

    
por bmcentee148 21.02.2018 / 03:14

6 respostas

40
Pessoalmente, não considero necessariamente mais seguro e a maioria dos benefícios (do sudo) está em um sistema multiusuário. Em um sistema de usuário único, provavelmente é uma lavagem.

Os benefícios são (em nenhuma ordem particular):

  • o sudo possui logging superior. sudo registra cada comando.
  • o sudo permite um controle mais refinado dos grãos. Pode-se configurar o sudo para dar acesso root a alguns, mas não a todos os comandos.
  • sudo usa a senha de login. Isso protege a necessidade de fornecer a senha de root (como você faria com o su) e está relacionado ao ponto acima com relação ao controle / acesso mais refinado ao root.
  • No Ubuntu, por padrão, a conta root está bloqueada. Isso impede que os crackers façam login (remotamente por meio de ssh) e precisam adivinhar um nome de usuário e uma senha. Se a conta root não estiver bloqueada, como é o caso do su, eles só precisarão quebrar a senha do root.
  • sudo -i é provavelmente o melhor método para isolar as variáveis ambientais do root do seu usuário. Isso surge de tempos em tempos, mas é moderadamente esotérico. Veja link
  • algumas pessoas acham que ter que digitar sudo antes de cada comando que desejam executar como root ou ter tempo de sudo permite que eles parem e pensem mais claramente e reduzam seus erros ou executem comandos errados. Se isso ajudar você, isso também seria um benefício.

Provavelmente há mais benefícios, mas esses são os principais, IMHO.

Veja também - link

Para tentar responder a alguns dos seus outros pensamentos:

  • Não há nada sobre su ou sudo que impeça a execução de códigos maliciosos, desde que você saiba a senha. Nem é mais seguro ou melhor.
  • Crackers podem obter acesso ao shell por meio de vários métodos. Quando você vê "executar código arbitrário" em um aviso de segurança - link - isso significa que um cracker pode executar / bin / bash ou qualquer outro código. Assim, um cracker, através de várias explorações, pode obter acesso ao shell sem saber seu nome de login ou senha. Nem o sudo nem o su ajudam com isso.
  • Se um cracker tiver acesso ao shell, poderá causar muitos danos sem acesso root. Por exemplo, o ransomware que criptografa todos os seus dados pessoais.
  • Se um cracker tiver acesso shell a uma conta com acesso root, via su ou sudo, o cracker pode obter acesso root por meio de vários métodos além do escopo desta discussão. Nem o sudo nem o su são superiores a este respeito.

Então, enquanto você observou problemas ou falhas com o sudo, o su tem exatamente as mesmas vulnerabilidades e o su não é superior ao sudo nesses aspectos, IMHO

    
por Panther 21.02.2018 / 03:38
9

Imagine que você tem 20 minutos para fazer algo complexo. Você está um pouco de ressaca e tem que se apressar. "Vamos usar su" você diz. "Vai economizar algum tempo" é o seu raciocínio.

Por acidente você digita

rm -rf /*

em vez de

rm -rf ./*

Seu sistema agora está se preparando e você tem 10 minutos até o prazo final.

Se você escolher explicitamente quando precisa de root, poderá minimizar as chances de isso acontecer. Raiz pode não ser necessária para rm -r ./* , então por que usá-lo? Por que correr o risco?

Isso é o que "segurança" significa aqui. Minimizando o risco de usuários (todos os usuários, não apenas iniciantes) cometerem um erro fatal.

É claro que este é um exemplo extremo que não deve ser permitido em um ambiente de produção (eu garanto que isso aconteceu em um ambiente prod).

Segurança, há algumas coisas que o sudo é melhor também. Como @Panther diz - registro, restrições, senha de root é SPOF, etc.)

    
por dijksterhuis 21.02.2018 / 13:03
9

Eu quero adicionar um pouco de perspectiva histórica às outras respostas. Infelizmente, eu não tenho nenhuma fonte pronta, exceto por minhas próprias memórias das discussões da Usenet e artigos de revistas.

Algum tempo atrás, na década de 1990, as distribuições estavam facilitando a instalação do Linux em seu próprio hardware, mesmo sem muito conhecimento de informática.¹ Assim, o Linux começou a atrair mais e mais pessoas que surpreendentemente não haviam sido perfuradas anteriormente. administradores do sistema em algum dialeto UN * X. Em vez disso, muitos estavam acostumados a sistemas (de usuário único) como o Windows 95/98. E eles aprenderam que a maioria das tarefas de administração do sistema Linux tornava necessário trabalhar sob essa estranha conta "raiz".

Assim, alguns usuários fizeram login como root e usaram essa conta para todo o seu trabalho diário. Por que eles devem digitar su e a senha root várias vezes ou fazer login em um novo tty apenas para alguns comandos admin? Mas usar o root para tudo não é uma boa idéia, já que você pode fazer muito mais mal ao seu sistema com algum comando desatento no lugar errado. Isso até levou alguma distro (foi o SuSE?) A modificar o plano de fundo da área de trabalho para o usuário root exibir um grande aviso de que você deve usar essa conta apenas para tarefas administrativas.

Assim, o modo Ubuntu com sudo tem algumas vantagens (além daquelas já listadas pela Panther ).

  • Você não pode fazer login diretamente na conta raiz
  • O processo de instalação não solicitará uma senha raiz (adicional), você precisa apenas de uma senha (do usuário).
  • sudo armazena em cache suas credenciais, portanto, para vários comandos do administrador em sequência, você só precisa digitar sua senha uma vez (em contraste com su ). Isso reduz o desejo de apenas abrir um shell ou um novo terminal com privilégios root .
  • E torna mais fácil informar aos usuários on-line e na documentação quais comandos eles devem inserir como admin e quais não.³

¹ E para aqueles que não ousam fazer isso sozinhos, houve festas de instalação.
² Mas você pode usar um comando como sudo -i ou sudo su - root para obter um shell de root depois de efetuar login como um usuário normal.
³ Mas você sabe, é claro, que não deve simplesmente copiar e colar comandos da Internet , certo?

    
por Dubu 21.02.2018 / 16:00
2

Foi possível desativar o login root por meio do ssh por décadas. O jeito do Ubuntu de desabilitar a conta root e fazer as pessoas suarem tudo não passa de um truque. Apenas "sudo -s" e você tem um shell de root. Desabilite o login root através do ssh e deixe-o lá.

    
por P. Goetterup 21.02.2018 / 08:22
0

Dependendo da configuração, sudo <game ending command> não funcionará necessariamente. Obviamente, se a configuração sudoers mostrar "user ALL = (ALL) ALL", sudo não oferecerá proteção adicional. No entanto, você pode especificar uma lista de comandos privilegiados que precisa executar com frequência, como instalar novos pacotes e deixar comandos perigosos como rm .

Dessa forma, você pode executar todos os comandos se fizer o login como root , mas como você precisará disso ocasionalmente, o risco de executar <game ending command> será substancialmente reduzido.

    
por Dmitry Grigoryev 21.02.2018 / 15:57
0

Esse sudo permite que você permita que apenas certos comandos não sejam o único benefício do sudo sobre o su.

Na maioria das lojas, esse não é o benefício mais importante.

Com o sudo, você sabe quem executou um comando específico.

Agora, talvez isso não seja importante para você. Por exemplo, você pode ser o único usuário do seu computador. Se sim, então o sudo possivelmente não é melhor que o su.

Mas muitos hosts têm mais de um administrador.

o sudo se torna muito útil porque se alguém fizer a coisa errada, o sudo permite que você saiba quem fez isso.

Isso permite que você entenda por que os erros aconteceram e instrua as pessoas a evitar erros recorrentes ou, se necessário, remover as ferramentas de alguém.

Como um bônus, quando as pessoas sabem que suas ações são registradas, elas geralmente são um pouco mais cuidadosas.

Sudo não é perfeito.

Se duas pessoas fizerem "sudo sh" ao mesmo tempo, pode ser difícil atribuir comandos a um ou outro.

E um administrador mal-intencionado sempre pode remover ou editar registros - embora isso não seja sempre tão fácil quanto as pessoas pensam, especialmente se você tiver um registro centralizado.

O

sudo não impede necessariamente uma ação estúpida ou maliciosa, por todas as razões identificadas na pergunta original.

Mas isso lhe dá uma chance muito melhor de prevenir uma recorrência.

    
por Ben Aveling 22.02.2018 / 05:13