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

62

Se eu entendi a filosofia do Linux corretamente, sudo deve ser usado com parcimônia, e a maioria das operações deve ser executada como um usuário com poucos privilégios. Mas isso não parece fazer sentido, já que estou sempre tendo que inserir sudo , seja gerenciando pacotes, editando arquivos de configuração, instalando um programa a partir do código-fonte ou o que você tem. Não 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 desabilitam ou configuram para não exigir uma senha (apenas um clique). Além disso, os usuários do Windows de muitas pessoas também são contas de administrador.

Além disso, vi algumas pessoas exibirem comandos que exigem sudo privileges sem sudo . Eles têm seu sistema configurado de tal forma que sudo não seja necessário?

    
por user139248 19.10.2015 / 21:09

12 respostas

75

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

managing packages, editing config files, installing a program from source

como coisas que

anything a regular user does

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 "privilegiados") podem usar o sistema sem se preocupar com sua manutenção.

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

É realmente tão difícil usar sudo ? Lembre-se de que, se é apenas o seu sistema, não há motivo para você não poder aparecer em um root shell ( sudo -s - consulte este post para obter uma visão geral dos vários meios de obter um shell de root) e / ou configurar sudo para não solicitar uma senha.

    
por 19.10.2015 / 21:37
30

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

whether I'm managing packages, editing config files, installing a program from source, or what have you.

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

Por exemplo, se um pacote / arquivo de configuração puder ser modificado sem privilégios elevados, seria extremamente simples para uma fonte externa simplesmente executar um código remoto que poderia quebrar / comprometer seu sistema. Ao forçar essas ações a exigirem acesso raiz, ele obriga você, como usuário, a decidir se essas ações ocorrerão ou não.

É muito semelhante a UAC com windows, na verdade é onde o Windows teve a ideia de UAC .

A citação que você recebe na primeira vez que usa o sudo é muito apropriada e muito importante:

We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things:

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

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

    
por 19.10.2015 / 21:27
19

Also, I've seen some people display commands that require sudo privileges without sudo. Do they have their system configured in such a way that sudo is not required?

Você precisa executar esses comandos como superusuário, mas não precisa executá-los usando sudo . Você poderia, por exemplo, usar su ou doas (substituição do OpenBSDs para sudo ), ou você poderia simplesmente logar como root.

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

    
por 19.10.2015 / 21:53
16

Um recurso de segurança oferecido por sudo é que você pode ter um system sem uma root password , para que root user não possa logar diretamente. Isso oferece proteção adicional aos usuários que escolhem senhas fracas - o invasor que tenta forçar a senha (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 install vs fazer make; make install como root. Muitas coisas podem dar errado durante make . Uma ferramenta mal configurada pode tentar sobrescrever um importante arquivo de sistema, "limpar" o /lib em vez do diretório atual, consumir toda a RAM disponível e travar o sistema, etc. make install é uma ação pequena e simples com muito menos probabilidade um erro fatal.

    
por 20.10.2015 / 13:43
14
O ponto é que, historicamente, um sistema é realmente destinado a ser compartilhado por vários usuários que apenas fazem logon, fazem alguns materiais e, em seguida, fazem logoff. Assim, a distinção entre admin e usuário normal. Tais sistemas ainda existem nos laboratórios das universidades e você pode sentir a diferença acentuadamente se usar esses computadores. Home PC onde você é o único usuário e também acontece de ter que agir como o administrador é realmente um desenvolvimento muito posterior.

    
por 21.10.2015 / 06:03
10

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

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

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

    
por 20.10.2015 / 19:06
6

Eu aposto que é porque você usa o software GUI para tudo, exceto tarefas administrativas do sistema, ou você está falando sobre servidores Linux, caso em que a maioria do acesso será naturalmente a administração do sistema. Portanto, pode parecer que fazer qualquer coisa no shell requer sudo .

Também é possível usar o shell para suas tarefas diárias. Gerenciando seus arquivos pessoais em ~ , editando arquivos, conversando no IRC, compilando código, navegando na web, tudo isso é factível em um shell. Eu até uso bc como minha calculadora. Algumas coisas são mais fáceis de fazer através de uma GUI, algumas coisas são mais fáceis de serem feitas através do shell - mesmo se você preferir usar a GUI, o shell irá se sobressair em operações em lote e automação (pense em shell scripts). Pessoalmente, eu uso o que for melhor para a tarefa em questão.

Em alguns casos, é uma boa idéia configurar seu sistema para que você não precise usar sudo todas as vezes para operações que, por padrão, exigem raiz, mas provavelmente não causarão problemas. Um exemplo é que eu trabalho com hardware que envolve o uso de portas seriais, e eu configurei as regras do udev para dar acesso aos dispositivos como meu usuário regular, sem precisar ser root.

Não acho que seja uma boa ideia configurar sudo para não exigir uma senha. Isso torna muito fácil confundir todo o sistema com um comando incorreto ou script mal-intencionado.

Se você precisa executar tarefas que exigem root o tempo todo, por que não deixar um shell de raiz sudo -s persistente em execução em uma janela de terminal? Então ele estará disponível sem ter que digitar a senha e não é tão fácil de usar acidentalmente. Eu até configurei meu prompt de shell para ficar vermelho vivo quando em um shell de root.

    
por 20.10.2015 / 15:33
5

[...] But that doesn't seem to make sense, since I'm always having to input sudo, whether I'm managing packages, editing config files, installing a program from source, or what have you. [...]

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

Em uma configuração multiusuário, você tem o software pré-instalado e seus configuração de todo o sistema em /usr e /etc , respectivamente. Tocando estes locais exigiriam permissões de root. Mas porque o software Unix está escrito com vários usuários em mente, você pode compilar e instalar o software em $HOME diretório 2 , e ter seus próprios arquivos de configuração em sua casa, onde você pode editar os arquivos livremente sem ser um super usuário.

Além de instalar seu próprio software em casa, a maioria dos sistemas o software lerá a configuração específica do usuário de $HOME logo após primeiro leia a configuração de /etc . Isso permite que você personalize mais qualquer coisa sem nunca ir root .

Com um PC doméstico, em uma única configuração de usuário principal, você pode usar sudo e fazer o root do seu caminho para as coisas que você gosta. Mas é costume não tocar na aplicação configuração em /etc , mas em vez disso, sempre fornecer configuração específica do usuário em casa. Dessa forma, você pode permitir que o gerenciador de pacotes redefina as configurações do sistema Atualizações. Instalar o novo software em todo o sistema é muito bom em um único usuário configuração; pacotes de distribuição não assumem as alternativas, então é uma saída fácil.

Vou deixar meu gerenciador de pacotes instalar coisas globalmente, mas qualquer fontes compiladas e coisas feitas por mim deixo em $HOME . E eu não tem que sudo por nada disso.

Se você tiver arquivos de dados, armazenamento fora de seu $HOME , sinta-se à vontade para chown ou chgrp dos diretórios para o seu nome para que você possa acessar os arquivos sem sudo .

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

[2] (se o sistema permitir isso, não montando partições iniciais como noexec)

    
por 21.10.2015 / 15:22
1

Nos tipos de sistemas multiusuários para os quais o UNIX (e, por descendência, Linux) foi projetado, estas não são ações ordinárias usuário . Um administrador do sistema pode executá-los, mas não usuários típicos, e assim o sistema pede para certificar-se de que o administrador do sistema realmente deseja fazer isso.

Mas, mesmo em sistemas domésticos de usuário único, essas não são ações de usuários comuns . Normalmente, pode ser necessário fazer isso ao configurar o sistema inicialmente, mas, quando isso for concluído, um usuário típico não precisará fazê-lo com frequência . A maioria dos usuários típicos apenas trabalha em arquivos dentro de seu diretório home (ou subdiretórios dele), usando programas / pacotes que já foram instalados, e você não precisa de sudo para isso. Ou eles podem funcionar em um diretório especial em outro lugar no sistema que tenha sido reservado para essa finalidade, e você precisa de sudo para configurá-lo, mas normalmente é necessário fazer isso apenas uma vez.

Por que isso importa? Porque "usuário único" é um nome impróprio: você não é o único usuário da sua máquina, mesmo que você seja o único usuário humano . Mesmo em uma típica instalação Linux doméstica, muitos programas são configurados para usar a máquina de várias maneiras, muitas vezes simulando algo que um ser humano faria se tivesse tempo e atenção de sobra: backups, atualizações, verificação de malware e gostar. Na maioria das vezes, esses usos são completamente benignos, mas mesmo para alguns deles, ainda é prudente ter certeza de que o usuário realmente quer fazer isso. E quando esses casos surgem, é para isso que serve sudo . O computador está apenas fazendo check-in para ter certeza de que você realmente quer fazer o que alguém (talvez você, talvez um programa) disse que você fez . E isso não é nem entrar na possibilidade de malware, o que você certamente não quer se passar por você.

    
por 22.10.2015 / 15:17
1

Isso provavelmente não é tão comum quanto representado, mas geralmente acontece quando algo casual requer 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 ( ifup , etc) é apenas para o superusuário.
  • Aplicativos de atualização automática que se recusam a ser executados se não forem atualizados. Update = install, e isso pode instalar muitas coisas, incluindo coisas que você não quer.

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

    
por 23.10.2015 / 08:59
0

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

Você só precisa ponderar o risco de apagar dados acidentalmente ou bloquear o sistema operacional com a facilidade de fazer as coisas sem digitar sudo todas as vezes.

Eu faço login e trabalho rotineiramente como root em meus servidores domésticos porque eu posso é mais fácil.

Você será informado que poderá lançar armas nucleares se não for embora o sacro-santo sudo , mas a realidade é que hoje em dia as pessoas têm root powers (*) em muitos dispositivos (sua TV, seu telefone, sua torradeira, seu Windows (como você mencionou)). O Linux não é diferente aqui, mesmo que muitos gostem de pensar o contrário.

BTW UAC não foi modelado depois de sudo , pois seu papel de homem é (além de tornar sua vida miserável) garantir que você verá quando o malware quiser fazer as coisas em seu nome.

(*) root powers são definidos como a capacidade de nuke dados importantes. O "com grande poder vem grandes problemas" (ou o que quer que seja) adágio se aplica.

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

    
por 20.10.2015 / 00:27
0

Em defesa da pessoa que escreveu a pergunta inicial, eu tive essa mesma pergunta nos anos anteriores, mas tomei uma abordagem diferente.

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

A maneira como eu aprendi Unix e Linux de dentro para fora foi usando um dos meus computadores como "cobaia". Eu instalaria o SCO Linux e, eventualmente, o Solaris e o Linux muito mais tarde, enquanto experimentava como root para poder ler e / ou explorar a hierarquia de diretórios e todos os arquivos com acesso irrestrito, criando contas de "usuário normal" em minha casa caixa multiusuário maior, mesmo sendo o único usuário. E estou feliz por ter feito isso. Aprendi muito sobre a "Filosofia Unix" e a maneira como o Unix foi planejado para ser usado em 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! IRÁ MANTER SEU SISTEMA !!) Eu fiz coisas como esta e muitos outros comandos, apenas para ver o que aconteceria em tempo real. Eu fiz esse tipo de coisa sabendo das conseqüências antes da mão, mas ainda aprendi muito fazendo isso. Eu estava usando o SCO Unix LONG antes mesmo que a web existisse (sim, eu sou tão velho!) E experimentar dessa maneira foi inestimável para meu aprendizado.

Então, o que estou dizendo é que, se você não se importar em fazer reinstalações quando algo der errado, use su ou faça o login como root, tudo o que você quer e configure / hack away! Você aprenderá muito ao fazer isso.

Basta lembrar que o conselho que foi repetido muito aqui foi reiterado por uma boa razão: os protocolos de melhores práticas evoluíram ao longo das décadas à medida que a compsec evoluiu, e você DEVE prestar atenção neles, mesmo como usuário doméstico / individual do seu sistema. Ao fazer isso, a higiene / hábitos do bom administrador de sistema se tornarão uma segunda natureza para você.

Apenas um pouco de comida para pensar sobre o su e o sudo. Hacker feliz!

    
por 15.11.2017 / 01:37

Tags