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

40

Então, eu estive lendo as diferenças entre usar sue sudo, e todos parecem concordar que a sudoabordagem é mais segura do que permitir o acesso à própria conta raiz. Dizem que, com a conta root, você pode quebrar todo o 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 for esse o caso, eu posso simplesmente correr sudo <game-ending command>para arruinar meu sistema. Então, como essa abordagem é melhor ou mais segura do que permitir acesso direto à conta do superusuário? Eu posso executar todos os mesmos comandos ...

É porque usando sudona linha de comando eu digo explicitamente ao computador que 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 o digam explicitamente?

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

bmcentee148
fonte
2
Obrigado por criar esta pergunta, agora há algo para mostrar às pessoas que continuam dizendo que o sudo é mais seguro, mas não pode justificá-lo.
user253751

Respostas:

40

Pessoalmente, não 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 específica):

  • O sudo possui registro superior. sudo registra cada comando.
  • O sudo permite o controle de grãos mais finos. Pode-se configurar o sudo para dar acesso root a alguns comandos, mas não a todos.
  • O sudo usa a senha de login. Isso protege a necessidade de fornecer a senha de root (como você faria com su) e está relacionado ao ponto acima em 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 (remoto via say ssh), eles 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ó precisam quebrar a senha do root.
  • sudo -ié provavelmente o melhor método para isolar as variáveis ​​ambientais da raiz do seu usuário. Ocorre de tempos em tempos, mas é moderadamente esotérico. Consulte https://help.ubuntu.com/community/RootSudo#Special_notes_on_sudo_and_shells
  • algumas pessoas acham que ter que digitar sudo antes de cada comando que desejam executar como root ou ter o tempo limite do sudo lhes permite parar e pensar com mais clareza e reduzir seus erros ou executar comandos errados. Se isso o ajudar, isso também seria um benefício.

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

Veja também - https://help.ubuntu.com/community/RootSudo

Para tentar responder a alguns de seus outros pensamentos:

  • Não há nada no su ou sudo que o impeça de executar códigos maliciosos enquanto você souber a senha. Nem é mais seguro ou melhor.
  • Os crackers podem obter acesso ao shell por vários métodos. Quando você vê "executar código arbitrário" em um aviso de segurança - https://usn.ubuntu.com/usn/ - 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 usuário ou senha. Nem sudo ou su ajuda com isso.
  • Se um cracker tiver acesso ao shell, ele poderá causar muitos danos sem o 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 poderá obter acesso root através de vários métodos além do escopo desta discussão. Nem sudo ou su também são superiores nesse aspecto.

Portanto, embora você tenha observado problemas ou falhas no sudo, o su tem exatamente as mesmas vulnerabilidades e o su não é superior ao sudo nesses aspectos, IMHO

Pantera
fonte
Seria bom optar por permitir a todos os usuários o controle de energia (desligamento e reinicialização) após a desalocação da instalação, em vez de entradas de sudoers ou com um nome de grupo.
Mckenzm
8
Acredito que a maior vantagem é justificar cada comando como necessitando de permissões de superusuário. Na minha experiência inicial com o Linux, descobri que sempre acabava rodando como root em pelo menos um terminal ao mexer no sistema. Infelizmente, é muito fácil emitir um comando destrutivo no terminal por mal-entendido ou erro de digitação. Se isso estivesse no 'terminal raiz', isso poderia resultar em uma restauração do backup ou reinstalação. O sudo me protegeu disso muitas vezes!
Rolinger 21/02
14
Não comprometer a senha root é talvez a maior vantagem do sudo. Você pode dar permissão de root sem revelar segredos.
Thorbjørn Ravn Andersen
Não apenas você pode restringir comandos, mas também pode restringir os argumentos especificados. Mas eu discordo que o bloqueio da raiz tenha algo a ver com isso; porque você pode configurar o ssh para não permitir o login raiz. Há algo mais no su versus sudo: sudo você usa sua senha de usuário, que é menos uma senha a ser comprometida e isso normalmente não é uma coisa boa. Como tudo neste mundo, existem diferentes maneiras de fazer algo e isso não significa que um caminho seja mais correto do que os outros 100% do tempo, se é que alguma vez. Depois, há preferências.
Pryftan
Mas, se é mais do que um usuário que precisa de acesso root (o que não é algo que abordarei, porque isso é apenas - bem, é uma discussão acalorada, na melhor das hipóteses), então o sudo tem uma vantagem lá.
Pryftan
10

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

Por acidente, você digita

rm -rf /*

ao invés de

rm -rf ./*

Seu sistema agora está em quarentena e você tem 10 minutos até o prazo.

Se você escolher explicitamente quando precisa de root, poderá minimizar a chance de isso acontecer. A raiz pode não ser necessária, rm -r ./*então por que usá-la? Por que correr o risco?

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

Obviamente, este é um exemplo extremo que não deve acontecer em um ambiente de produção (garanto que aconteceu em um ambiente de produção).

Em termos de segurança, há algumas coisas para as quais o sudo também é melhor. Como o @Panther diz - log, restrições, senha root é SPOF, etc.)

dijksterhuis
fonte
4
Inferno, você não precisa esperar tanto tempo se fizer isso ... chown -R nobody:nobody /ou mesmo chown -R nobody ../como raiz. chmodé claro que também tem problemas semelhantes no modo recursivo. Mas o melhor ponto que você defende é que você só deve ser raiz quando precisar; quanto menos privilégio seu login for, melhor para o uso normal.
Pryftan
2
+1 para programação quando você estiver de ressaca.
abhicantdraw
4
Então, como isso é diferente sudo? Você escreve em sudo rm -rf /*vez de sudo rm -rf ./*e lança novamente.
22618 ilkkachu
2
@ilkkachu em termos do comando real, faz uma diferença mínima com o que acontece. Mas você teve que declarar explicitamente que deseja fazer isso como root. Essa é a questão. Segurança é sobre gerenciamento de riscos. Claro que você ainda pode bloquear o sistema. Mas quanto menos tempo você tiver privilégios de root, menor será a chance de cometer um erro fatal. Segurança é minimizar as probabilidades.
22318 dijksterhuis
2
@ilkkachu Porque você não digite sudo rm -rf ./*. Você provavelmente tem acesso de gravação ao material no diretório atual, portanto não precisa do sudo para esse comando. Assim, as extremidades comando typoed sendo rm -rf /*, que rende uma longa seqüência de "Permissão negada" mensagens, permitindo que você saiba que você precisa ctrl-cantes que fique com o que você realmente pode excluir, em vez de apenas apagar tudo /bin, /boot, /dev, e metade /etcantes você até percebe que algo está errado.
Raio
9

Quero acrescentar um pouco de perspectiva histórica às outras respostas. Infelizmente, não tenho nenhuma fonte pronta, exceto minhas próprias lembranças de 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 com pouco conhecimento em informática. algum dialeto UN * X. Em vez disso, muitos estavam acostumados a sistemas (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 trabalho diário. Por que eles devem digitar sua senha root e outra vez ou fazer login em um novo tty apenas para alguns comandos de administrador? Mas usar o root para tudo não é, obviamente, uma boa ideia, pois você pode causar muito mais dano ao seu sistema com algum comando desatento no lugar errado. Isso até levou alguma distro (foi SuSE?) A modificar o plano de fundo da área de trabalho para o usuário root exibir um grande aviso de que você deveria usar essa conta apenas para tarefas administrativas.

Portanto, a maneira como o Ubuntu sudotem algumas vantagens (além das já listadas pela Panther ).

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

¹ E para aqueles que não se atrevem a fazê-lo, houve festas de instalação.
² Mas você pode usar um comando como sudo -iou sudo su - rootpara obter um shell raiz depois de fazer o login como um usuário normal.
³ Mas você sabe, é claro, que não deve simplesmente copiar e colar comandos da Internet , certo?

Dubu
fonte
Você está dizendo no Ubuntu que não pode fazer: sudo su -ou sudo su - root? Porque eu já vi alegações semelhantes, por exemplo, de que o MacOS X não possui raiz, mas isso é completamente errado quando é preciso apenas executar o primeiro comando ... #
21818
2
Claro que existe uma conta root . Eu disse que você não podia "efetuar login diretamente", o que significa que não é possível inserir o usuário roote uma senha no prompt de login ou na caixa de diálogo de login do X e iniciar sua sessão como root. Mas você pode usar um de seus comandos (eu prefiro sudo -ique seja mais curto e com preguiça) para obter um shell raiz.
Dubu
11
Por favor, leia meu comentário novamente :) Eu disse que alguns dizem que o MacOS X não tem uma conta root, mas na verdade ele possui e isso me lembrou disso (eu não o igualei a não haver conta root no Ubuntu). Mas, pelo que sei, os desenvolvedores do Ubuntu eram loucos o suficiente para corrigir o sudo e não permitir isso, portanto, a minha pergunta.
Pryftan
11
@Ryftan Como eu disse no meu comentário acima, ambos os seus comandos funcionam e você recebe um shell raiz. Vou acrescentar isso à minha resposta.
Dubu
Sim. Eu sei disso :) Eu não estava dizendo que era falso ou não. Eu estava dizendo que isso me lembrou algo que algumas pessoas dizem, mas estão incorretas em dizer. Daí tornar ousada essa parte.
Pryftan
2

Foi possível desativar o login root através do ssh por décadas. A maneira como o Ubuntu desabilita a conta root e faz as pessoas sudo tudo não passa de um truque. Apenas "sudo -s" e você terá um shell raiz. Desative o login root através do ssh e deixe lá.

P. Goetterup
fonte
8
... nessa observação, usar apenas a chave para QUALQUER logon ssh, não apenas a conta raiz, é uma boa prática.
rackandboneman
Sim. Eu notei isso em um comentário apenas alguns minutos atrás. Otoh ser o menos privilegiado é o melhor de todos, apenas eleve quando você precisar e isso vale para se você estiver conectado pelo ssh ou localmente. E o que @rackandboneman diz também é absolutamente correto, embora para mim desative o ponto final de raiz remota, mesmo com as teclas ssh, independentemente do sistema.
Pryftan
0

Dependendo da configuração, sudo <game ending command>não funcionará necessariamente. Obviamente, se a sudoersconfiguração exibir "usuário ALL = (ALL) ALL"), sudonão oferecerá proteção adicional. No entanto, você pode especificar uma lista de comandos privilegiados que precisa executar frequentemente, como instalar novos pacotes, e deixar de fora comandos perigosos rm.

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

Dmitry Grigoryev
fonte
11
E argumentos específicos para os comandos também.
Pryftan
11
E por grupo e não por usuário. o uso de grupos é inestimável em ambientes multiusuário, onde a equipe pode ir e vir e onde você pode precisar de funções específicas.
Pantera
0

Esse sudo permite que você permita apenas determinados comandos não é 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 importe para você. Por exemplo, você pode ser o único usuário do seu computador. Nesse caso, sudo possivelmente não é melhor que su.

Mas muitos hosts têm mais de um administrador.

O sudo se torna muito útil porque, se alguém faz a coisa errada, o sudo informa quem o fez.

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

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

Sudo não é perfeito.

Se duas pessoas fazem "sudo sh" ao mesmo tempo, pode ser difícil atribuir comandos a uma ou a outra.

E um administrador mal-intencionado sempre pode remover ou editar logs - embora fazer isso de forma limpa nem sempre seja tão fácil quanto as pessoas pensam, especialmente se você tiver um log centralizado.

O sudo não necessariamente interrompe uma ação estúpida ou maliciosa, por todos os motivos identificados na pergunta original.

Mas isso oferece uma chance muito maior de impedir a recorrência.

Ben Aveling
fonte
1. Somente se você reservar um tempo para configurá-lo corretamente. O qual o sistema Ubuntu padrão não funciona (e não pode funcionar). 2. Somente se o usuário não tiver como editar os logs após o fato, o que pode, a menos que os comandos que eles possam executar sejam limitados. (Que não é no caso de uso Ubuntu padrão)
ilkkachu
@ilkkachu, embora você tenha alguns pontos positivos, seu argumento aqui não faz sentido aqui. O ponto não são as configurações padrão, o ponto é que é possível configurar e ajustar o sudo. Você não pode configurar o su para agir dessa maneira. su é tudo ou nenhum, não há como limitar comandos e é fato que o sudo fornece registro superior. Nenhum su ou sudo oferece nenhuma segurança contra o que um cracker pode ou não fazer em um sistema comprometido, e ninguém manteve o sudo dessa maneira. Os logs do sudo têm grande valor nas operações normais do dia a dia.
Pantera
@ Panther, bem, o título da pergunta diz "... se o usuário tiver acesso a todos os comandos?" então eu assumi que eles significavam a configuração padrão usual do Ubuntu, onde sudopermite tudo. Claro, você pode configurá-lo para limitar os comandos que um usuário pode executar, mas acho que não é o caso da pergunta, conforme solicitado.
22418 ilkkachu
Resposta expandida.
Ben Aveling
@ilkkachu - releia minha resposta "Pessoalmente, não o considero 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". Depois, expliquei as outras vantagens do sudo, uma das quais é configurável.
Pantera