Por que eu tenho que usar o sudo para quase tudo?

64

Se eu entendo a filosofia do Linux corretamente, sudodeve ser usado com moderação e a maioria das operações deve ser executada como um usuário subprivilegiado. Mas isso não parece fazer sentido, pois estou sempre precisando digitar sudo, se estou gerenciando pacotes, editando arquivos de configuração, instalando um programa a partir da fonte ou o que você tem. Essas nem são coisas técnicas, apenas qualquer coisa que um usuário comum faça.

Isso me lembra muito o UAC do Windows, que as pessoas desativam ou configuram para não exigir uma senha (apenas um clique). Além disso, muitos usuários do Windows também são contas de administrador.

Além disso, já vi algumas pessoas exibirem comandos que exigem sudoprivilégios sem sudo. Eles têm o sistema configurado de tal forma que sudonão é necessário?

user139248
fonte
25
Você precisa sudofazer alguma coisa que envolva mudar o sistema; se você estiver apenas operando em seus próprios arquivos / área de trabalho, não estará afetando ninguém; portanto, não precisará de privilégios elevados. Se você está executando comandos privilegiados sem sudo, você provavelmente já está um super usuário (ou seja, a raiz) e é geralmente menos aconselhável do que usando sudo para as tarefas específicas em todo o sistema
Eric Renouf
75
"instalando um programa a partir da fonte ... qualquer coisa que um usuário comum faça" --- Eu acho que você superestimou as habilidades técnicas dos usuários regulares.
Jonathan Cast
7
Você está usando sudoquando não deveria? Os comandos normais de um usuário Unix devem consistir principalmente em cd, lsmover, copiar, remover e editar arquivos aos quais eles têm acesso. Se seus comandos habituais não consistem nisso, você provavelmente não é um usuário comum do Unix.
user530873
20
Dica pequena: se você fizer algo que requer o sudo, mas se esqueceu de colocar o sudo em seu comando, poderá sudo !!executar novamente o último comando digitado com o sudo na frente.
asfallows
6
Você não passa a maior parte do tempo usando o software que instalou? Isso não deve envolver sudo. Caso contrário, por que você está instalando?
parar de prejudicar Monica

Respostas:

75

Você mencionou essas funções de administração do sistema

gerenciando pacotes, editando arquivos de configuração, instalando um programa a partir da fonte

como coisas que

qualquer coisa que um usuário comum faça

Em um sistema multiusuário típico, essas não são ações comuns do usuário; um administrador de sistemas se preocuparia com isso. Usuários comuns (não "com privilégios") podem usar o sistema sem se preocupar com a manutenção.

Em um sistema doméstico, sim, você acaba tendo que administrar o sistema e usá-lo.

É realmente tão difícil de usar sudo? Lembre-se de que, se for apenas o seu sistema, não há razão para que você não possa entrar no rootshell ( sudo -s- veja esta postagem para uma visão geral dos vários meios de obter um shell raiz) e / ou configure sudopara não solicitar uma senha.

roaima
fonte
47
não há razão para que você não [...] possa configurar o sudo para não solicitar uma senha. Eu não recomendaria que, se você lançar um script mal-intencionado, ele poderá atuar como root no seu sistema.
AL
5
Se inserir a senha do sudo o incomoda tanto que você basicamente pilota automaticamente a entrada da senha, também não ajuda. Você precisa equilibrar a sanidade com a segurança. O sudo do piloto automático excluiu grandes partes do sistema operacional pelo menos uma vez.
Nelson
33
Pessoalmente, eu amo sudo- é como uma verificação de sanidade.
Max Williams
6
@ MaxWilliams, sim, exatamente, é aquela pequena tampa de plástico transparente sobre o grande botão vermelho que pergunta, você tem certeza de que sabe o que está fazendo?
KlaymenDK
15
@AL: Se eu vou executar um script desconhecido, é melhor não ser malicioso ou estou ferrado se executa ou não o sudo. Na área de trabalho pessoal, são os meus próprios dados (não raiz) que são importantes, não a configuração (raiz) da máquina em si.
jrw32982
31

Sudo / Root é usado sempre que você está fazendo algo que um usuário padrão não deve ter a capacidade de fazer por risco de danificar / alterar a configuração do sistema de uma maneira que o Administrador do sistema normalmente não permitiria.

esteja gerenciando pacotes, editando arquivos de configuração, instalando um programa da fonte ou o que você tem.

Todas essas são funções tecnicamente administrativas e podem danificar drasticamente o sistema se algo incorreto for feito. Em um ambiente corporativo, como Sysadmin, são coisas que eu NÃO deixaria que meu usuário fizesse sem meu conhecimento expresso e, portanto, sudo.

Por exemplo, se um arquivo package / config pudesse ser modificado sem privilégios elevados, seria extremamente simples para uma fonte externa simplesmente executar código remoto que poderia interromper / comprometer o sistema. Ao forçar essas ações a exigir acesso root, obriga você, como usuário, a decidir se essas ações devem ou não ocorrer.

É muito parecido UACcom o Windows, na verdade é para onde o Windows teve a ideia UAC.

A cotação que você recebe na primeira vez em que usa o sudo é muito adequada e muito importante:

Confiamos que você recebeu a palestra habitual do Administrador do Sistema local. Geralmente, tudo se resume a essas três coisas:

#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.

Especialmente o número 2, pense antes de digitar. Essa é uma razão importante pela qual o sudo existe, quando você digita um comando e retrocede "deve ser raiz para executar esta ação", obriga você a parar e PENSAR no que está realmente fazendo.

Molho
fonte
19

Além disso, já vi algumas pessoas exibirem comandos que exigem sudoprivilégios sem sudo. Eles têm o sistema configurado de tal forma que sudonão é necessário?

Você precisa executar esses comandos como superusuário, mas não precisa executá-los usando sudo. Você poderia, por exemplo, usar suor doas(substituto do OpenBSDs para sudo) ou simplesmente fazer login como root.

Portanto, se eles exibirem seus comandos aqui sem sudoassumir que o leitor apenas usará sua maneira favorita de executar esses comandos como superusuário.
Certamente não significa que eles possam executar esses comandos como um usuário normal.

Thomas Weinbrenner
fonte
4
você também pode usar sudo -iou similar para obter um shell raiz e, em seguida, começar a executar seus comandos raiz sem precisar preceder cada um deles comsudo
cas
2
Geralmente os passos que precisam ser executado como root é mostrado com um prompt de raiz por exemplo, # vi /etc/hostsem vez de um prompt sem privilégios $ vi /etc/hosts(Bash vai seguir a convenção se você usar \$em PS1)
Gert van den Berg
16

Um recurso de segurança oferecido por sudoé que você pode ter um sistema sem rootsenha , para que o rootusuário não possa fazer login diretamente. Isso oferece proteção adicional aos usuários que escolhem senhas fracas - o invasor que tenta forçar a senha com força bruta (via SSH ou de outra forma) terá que descobrir um nome de usuário válido primeiro.

Outro aspecto é um gerenciamento de privilégios mais refinado. Pense em make; sudo make installfazer vs make; make installcomo root. Muitas coisas podem dar errado durante make. Uma ferramenta mal configurada pode tentar sobrescrever um arquivo importante do sistema, "limpar" o /libdiretório em vez do atual, consumir toda a RAM disponível e travar o sistema, etc. make installé uma ação simples e pequena, com muito menos probabilidade de erro fatal.

Dmitry Grigoryev
fonte
11
E mesmo que uma senha root esteja configurada, ela permite que o usuário acesse os comandos que requerem privilégios de root sem fornecer a senha root, o que significa que, se for um servidor da empresa e eles forem demitidos, você só precisará desativar o usuário , sem precisar alterar a senha root.
Gert van den Berg,
13

O ponto é que, historicamente, um sistema é realmente planejado para ser compartilhado por vários usuários que apenas efetuam logon, fazem algumas coisas e depois desconectam. Assim, a distinção entre administrador e usuário normal. Esses sistemas ainda existem nos laboratórios da universidade e você pode sentir a diferença acentuada se usar esses computadores. PC doméstico onde você é o único usuário e também tem que agir, pois o administrador é realmente um desenvolvimento muito posterior.

xji
fonte
6
"Ainda existem em laboratórios universitários" ... sim, e todas as empresas centradas em tecnologia do planeta, e a maioria das não técnicas também. Ainda assim, +1 por fornecer a distinção exata de que o OP está obviamente ausente e que a maioria dos respondentes não conseguiu enfatizar.
Curinga
@Wildcard Lol certeza. Basta colocar o exemplo que imediatamente pulou na minha cabeça, eu acho.
Xj #
10

Um computador é uma ferramenta. Vamos tentar uma analogia com outra ferramenta, digamos uma frigideira. Às vezes, você precisa cuidar da sua frigideira. Por exemplo, você deve limpá-lo com sabão. Você diria que o sabão é um ingrediente necessário em qualquer receita para a qual você usa a frigideira? Você nunca verá o "saboneteira" listado como ingrediente nos livros de culinária. É necessário, mas a preparação da ferramenta é outra questão, portanto os livros de culinária não mencionam isso. A frigideira deve ser limpa, mas não é para isso que é feita.

É o mesmo para o seu computador. Ele precisa ser configurado e resolvido, mas não é para isso que ele é feito. Você cuida disso, você o configura, para que ele funcione corretamente. Feito isso, você pode usá-lo, não como administrador do sistema, mas como usuário. É para isso que é feito. Quando você é usuário, não precisa mais do sudo . Basta usar a ferramenta que você preparou com antecedência. É claro que, de tempos em tempos, você precisará usar privilégios de root, assim como precisa limpar sua frigideira sempre que usá-la para cozinhar.

Portanto, sem exagerar, poderíamos dizer que você nunca precisa do sudo (ou da senha root) para usar o seu computador. Apenas para preparar seu computador.

user2718996
fonte
2
Ótima analogia, mas às vezes você precisa desse sabão para retirar alguns restos carbonizados da sua panela antes de fritar seus ovos mexidos, ou seja, as duas coisas se conectam com bastante facilidade. Com um computador que você possui, você pode "lavá-lo" / "fritá-lo" quase imediatamente com ele sudoou simplesmente ir para o master chef e fazer um su.
Armfoot
Parece que você precisa de acesso root para cozinhar, pois é mais perigoso.
Deltaray 12/08/16
6

Aposto que é porque você usa o software GUI para tudo, exceto tarefas administrativas do sistema, ou está falando de servidores Linux; nesse caso, a maioria dos acessos será naturalmente a administração do sistema. Portanto, pode parecer que qualquer coisa que o shell requer sudo.

Também é possível usar o shell para suas tarefas diárias. Gerenciar seus arquivos pessoais ~, editar arquivos, conversar no IRC, compilar código, navegar na Web, tudo isso é possível em um shell. Eu até uso bccomo minha calculadora preferencial. Algumas coisas são mais fáceis de fazer por meio de uma GUI, outras são mais fáceis de fazer por meio do shell - mesmo se você preferir usar a GUI, o shell geralmente se sobressai em operações e automação em lote (pense em scripts do shell). Pessoalmente, uso o que for melhor para a tarefa em questão.

Em alguns casos, é uma boa idéia configurar o sistema para que você não precise usá sudo-lo sempre em operações que, por padrão, exigem raiz, mas que dificilmente causam problemas. Um exemplo é que eu trabalho com hardware que envolve o uso de portas seriais e configurei regras do udev para dar acesso aos dispositivos como meu usuário comum sem precisar ser root.

Não acho que seja uma boa ideia configurar sudopara não exigir uma senha. Isso facilita demais para atrapalhar todo o sistema com um comando digitado incorretamente ou um script mal-intencionado.

Se você precisar executar tarefas que exijam absolutamente raiz o tempo todo, por que não deixar um sudo -sshell raiz persistente em execução em uma janela de terminal? Em seguida, ele estará disponível sem precisar digitar a senha e não é tão fácil de usar acidentalmente. Eu até configurei meu prompt de shell para ficar vermelho brilhante quando em um shell raiz.

Matti Virkkunen
fonte
5

[...] Mas isso não parece fazer sentido, pois estou sempre tendo que inserir o sudo, seja gerenciando pacotes, editando arquivos de configuração, instalando um programa a partir da fonte ou o que você tem. [...]

O adjetivo implícito relacionado a tudo isso é que são mudanças globais ou em todo o sistema . Você deve considerar as origens do Unix como um sistema multiusuário 1 em que vários usuários usariam a mesma instalação remotamente. Não faria sentido para um usuário leigo permitir alterar as configurações globais para todos os usuários. Era do administrador de sistemas, da raiz, do privilégio e da responsabilidade.

Em uma configuração multiusuário, você tem o software pré-instalado e sua configuração em todo o sistema em /usre /etcrespectivamente. Tocar nesses locais exigiria permissões de root. Mas como o software Unix é escrito com vários usuários em mente, você pode compilar e instalar o software no $HOME diretório 2 e ter seus próprios arquivos de configuração em sua casa, onde é possível editar os arquivos livremente sem ser um superusuário.

Além de instalar seu próprio software em casa, a maioria dos softwares de todo o sistema lê a configuração específica do usuário $HOMElogo após a primeira configuração /etc. Isso permite que você personalize quase tudo sem precisar ir root.

Com um PC doméstico, em uma única configuração principal de usuário, você pode usar sudoe fazer o root do jeito que você gosta. Mas é habitual não tocar na configuração do aplicativo, /etcmas sempre fornecer configurações específicas do usuário em casa. Dessa forma, você pode permitir que o gerenciador de pacotes redefina as configurações de todo o sistema nas atualizações. Instalar um novo software em todo o sistema é bastante bom na configuração de usuário único; Os pacotes distro não assumem as alternativas, portanto é uma saída fácil.

Vou deixar meu gerenciador de pacotes instalar coisas globalmente, mas todas as coisas compiladas a partir de fontes e feitas por mim que eu deixo de lado $HOME. E eu não preciso sudo por nada disso.

Se você tiver arquivos de dados, armazenamento externo $HOME, sinta-se à vontade chownou chgrpos diretórios com o seu nome para poder acessar os arquivos sem sudo.

[1] (levemente irônico, já que o Unix era para ser uma versão de 'usuário único' do sistema operacional Multics)

[2] (se o sistema permitir isso não montando partições domésticas como noexec)

unperson325680
fonte
2

Nos tipos de sistemas multiusuário para os quais o UNIX (e, por descendência, o Linux) foi projetado, essas não são ações comuns do usuário . Um administrador do sistema pode executá-los, mas não usuários comuns, e assim o sistema solicita que o sysadmin realmente queira fazer isso.

Mas mesmo em sistemas domésticos de usuário único, essas não são ações comuns do usuário . Normalmente, é necessário fazer isso ao configurar o sistema inicialmente, mas, uma vez concluído, um usuário típico não precisará fazê-lo com muita frequência . A maioria dos usuários típicos trabalha apenas com arquivos dentro do diretório inicial (ou subdiretórios), usando programas / pacotes que já foram instalados, e você não precisa sudodisso. Ou eles podem funcionar em um diretório especial em algum outro local do sistema que foi reservado para esse fim, e você precisa sudoconfigurá-lo, mas normalmente é necessário fazê-lo apenas uma vez.

Por que isso importa? Como "usuário único" é um nome impróprio: você não é o único usuário da sua máquina, mesmo sendo o único usuário humano . Mesmo em uma instalação típica do Linux em casa, muitos programas são configurados para usar a máquina de várias maneiras, simulando algo que um ser humano pode fazer se tiver tempo e atenção de sobra: backups, atualizações, verificação de malware e o gostar. Na maioria das vezes, esses usos são completamente benignos, mas mesmo para alguns deles, ainda é prudente garantir que o usuário realmente queira fazer isso. E quando esses casos surgirem, é para isso que sudoserve. O computador está apenas fazendo check-in para garantir que é realmente você quem quer fazer o que alguém (talvez você, talvez um programa) disse que fez. E isso nem é entrar na possibilidade de malware, que você certamente não quer mascarar como você.

The Spooniest
fonte
1

Provavelmente, isso não é tão comum como representado, mas geralmente acontece quando algo casual exige internamente uma chamada de sistema privilegiada muito mais genérica para alcançar seu resultado, por exemplo:

  • Desmonte e leve um pendrive. umounté um comando sério, pois você pode desmontar muitas coisas com ele.
  • Conecte-se à rede sem fio local. Nada de extraordinário, mas a configuração de rede ( ifupetc) é apenas para superusuário.
  • Aplicativos de atualização automática que se recusam a executar se não forem atualizados. Update = install, e isso pode instalar muitas coisas, incluindo coisas que você não deseja.

Os sistemas geralmente evoluem para reduzir o número de casos. Os pendrives USB podem ser montados pelo usuário agora e as redes podem ser conectadas pelo usuário. Mas nem sempre foi assim.

h22
fonte
0

Suposição: este é seu sistema e seus dados.

Você só precisa ponderar o risco de apagar dados acidentalmente ou bloquear o sistema operacional em comparação com a facilidade de fazer coisas sem digitar sudotodas as vezes.

Eu costumo fazer login e trabalhar como root nos meus servidores domésticos porque eu posso é mais fácil.

Ser-lhe-á dito que você poderá lançar armas nucleares se não for através do sacro-santo, sudomas a realidade é que hoje as pessoas têm rootpoderes (*) em diversos dispositivos (sua TV, seu telefone, sua torradeira, seu Windows (como você mencionou)). O Linux não é diferente aqui, embora muitos gostem de pensar o contrário.

O BTW UACnão foi modelado sudocomo seu papel principal (além de tornar sua vida miserável) para garantir que você veja quando o malware deseja fazer as coisas em seu nome.

(*) rootpoderes são definidos como a capacidade de armazenar dados importantes. O ditado "com grande poder vem de grandes questões" (ou o que quer que seja) se aplica.

Se minha suposição estiver errada , você ainda precisará ponderar o risco acima, mas há mais variáveis ​​(seu trabalho, fotos tiradas pelo seu cônjuge e armazenadas no mesmo laptop, ...)

WoJ
fonte
11
os poderes de raiz não são capazes de armazenar dados importantes. Você sempre pode rm -rf ~/sem permissões especiais. Por outro lado, você não pode bloquear seu telefone celular ou TV sem fazer o root.
Dmitry Grigoryev
Um dispositivo é tão útil quanto os dados que armazena e os serviços que fornece. O hardware e o sistema operacional abaixo são uma mera mercadoria. Portanto, o poder é onde você pode impactar serviços ou dados. Em uma TV, você pode apagar todas as suas configurações - a TV não pode ser usada (antes de restaurar os dados). Você pode apagar todos os seus dados em um telefone celular, que depois se torna uma peça de hardware sem qualquer uso. Isto é o que eu quis dizer com "poder de raiz"
WoJ
11
De fato, chamar isso de "poder raiz" é mau uso. A palavra "raiz" já está sobrecarregada para significar pelo menos três coisas diferentes (o usuário raiz, o diretório / e o diretório / root) e adicionar outra ajuda é inútil. Em uma máquina de usuário único, mesmo que o usuário não privilegiado já possa excluir seus próprios arquivos, sua incapacidade de executar determinadas tarefas administrativas sem usar o sudo ainda o protege de várias coisas ruins.
Monty Mais difícil
11
A analogia da sua TV não é boa. Apagar as configurações da sua TV é como apagar os arquivos de configuração do usuário no Linux - normalmente, isso faz com que o sistema opere de acordo com algum conjunto de padrões desse usuário, e geralmente não causa danos ao sistema. O Root permite que você modifique o próprio sistema - na TV, isso seria como modificar o firmware; nesse caso, você pode interromper sua capacidade de operar.
JBentley
11
É por isso que existe avaliação de risco. Você avalia os riscos de fazer algo (que tem seus prós e contras) e aceita, mitiga ou segura. A recuperação pode ser simples (janela de encaixe, instantâneos de VM) ou difícil (instalar o rascunho do formulário) - é uma questão de planejamento e, novamente, avaliação. Mas, como você mencionou, não entendo o que significa acesso root, que assim seja.
21415 WoJ
0

Em defesa da pessoa que escreveu a pergunta inicial, eu tinha essa mesma pergunta nos últimos anos, mas adotei uma abordagem diferente.

A maioria das respostas aqui pode ser reproduzida em loop, porque todas elas enfatizam o mesmo ponto sobre o sudo e o root. Deixe-me adicionar uma perspectiva diferente a este tópico:

A maneira como aprendi o Unix e o Linux de dentro para fora foi usando um dos meus computadores como uma "cobaia". Eu instalava o SCO Linux e, eventualmente, o Solaris e o Linux muito mais tarde, experimentando alegremente como root para poder ler e / ou explorar a hierarquia de diretórios e todos os arquivos com acesso irrestrito, criando também contas de "usuário normal" em minha casa multiusuário crescida, mesmo sendo o único usuário. E estou feliz por ter feito dessa maneira. Eu aprendi muito sobre a "Filosofia Unix" e a maneira como o Unix deveria ser usado pelas minhas experiências.

Eu me diverti muito aprendendo sobre segurança e também executando comandos perigosos digitando rm -rf / * em um terminal como root. (NÃO FAÇA ISSO! MANGUARÁ O SEU SISTEMA !!) Fiz coisas como esta e muitos outros comandos, apenas para ver o que aconteceria em tempo real. Eu fiz esse tipo de coisa conhecendo as consequências antes da mão, mas ainda assim aprendi muito fazendo isso. Eu estava usando o SCO Unix LONG antes que a web existisse (sim, eu sou tão velha assim!) E experimentar dessa maneira foi inestimável para o meu aprendizado.

Então, o que estou dizendo é que se você não se importa em reinstalar quando algo der errado, use su ou faça login como root tudo o que você quiser e configure / corra! Você aprenderá muito fazendo isso.

Lembre-se de que os conselhos que foram repetidos muitas vezes aqui foram reiterados por uma boa razão: Os protocolos de melhores práticas evoluíram ao longo das décadas à medida que o compsec evoluiu e você DEVE prestar atenção a eles, mesmo como usuário doméstico / único do seu sistema . Ao fazer isso, uma boa higiene / hábitos do administrador de sistema se tornará uma segunda natureza para você.

Apenas um pouco de reflexão sobre o assunto su e sudo. Feliz hacking!

mem
fonte