Diferença entre usuário sudo e usuário root [fechado]

21

O /etc/sudoersarquivo lista quais usuários podem fazer o que com o sudocomando

O usuário root cria e modifica o /etc/sudoersarquivo.

Este conceito é difícil para mim entender.

Se todos os usuários com privilégio sudo pertencerem ao sudoersgrupo, todos eles poderão se tornar root, executando o sudo sucomando

Então, quem é o usuário root real e como ele controla os poderes dos usuários no grupo de sudoers?

Por favor, explique para mim.

rancho
fonte
4
Eu acho que você precisa expandir qual parte é difícil de entender.
garethTheRed
quem é usuário root? Esta pergunta é difícil para mim entender. Como os usuários humn só pode belng ao grupo sudoers
Rancho
@rancho atualizar a questão, por favor
peterph
Resposta simples à sua pergunta subjacente (com base nos comentários da resposta): É verdade que a diferença entre rootacesso e sudodireitos se torna irrelevante SE você permitir sudo suque seja executado. No entanto, você não precisa permitir isso. Você pode permitir apenas um conjunto específico de comandos, por exemplo, conceder sudoacesso ao sysadmin junior apenas para comandos de backup específicos.
Curinga

Respostas:

29

Resumo executivo: "raiz" é o nome real da conta do administrador. "sudo" é um comando que permite que usuários comuns executem tarefas administrativas. "Sudo" não é um usuário.


Resposta longa:

"root" (também conhecido como "superusuário") é o nome da conta de administrador do sistema. As origens do nome são um pouco arcaicas, mas isso não importa.

O usuário root tem o ID de usuário 0 e nominalmente possui privilégios ilimitados. O Root pode acessar qualquer arquivo, executar qualquer programa, executar qualquer chamada do sistema e modificar qualquer configuração. (Mas veja abaixo¹).

Antes da invenção do comando "sudo", se você desejava executar tarefas administrativas, era necessário efetuar login como root, obtendo um prompt de login² de alguma forma ou com o sucomando ("su" sendo a abreviação de usuário substituto.) ³

Isso é um pouco complicado, e também não permite que você conceda aos usuários poderes administrativos parciais. Portanto, o comando "sudo" (abreviação de "substitute user do") foi inventado.

O comando "sudo" permite executar comandos com privilégios de superusuário, desde que o seu ID de usuário esteja no arquivo sudoers, fornecendo a autorização necessária.

Portanto, por exemplo sudo vi /etc/hosts, você poderá editar o arquivo hosts como se estivesse executando como root. Você nem precisa da senha de root, apenas sua própria senha de login.

E, é claro, sudo supermitiria que você simplesmente se tornasse raiz. O resultado é o mesmo que se você tivesse feito login como root ou executado o sucomando, exceto que você não precisa saber a senha root, mas precisa estar no arquivo sudoers.

O arquivo sudoers determina quem pode usar o comando sudo e o que eles podem fazer com ele.

O arquivo sudoers é o que oferece vários administradores⁴. Efetivamente, seus administradores são root, além de todos os que estão listados no arquivo sudoers. Sem o arquivo sudoers, o único administrador é root.

De fato, nas organizações em que outra pessoa administra seu computador, é bastante comum não saber a senha raiz do seu próprio computador - desde que você esteja no arquivo sudoers, isso não importa.

Em uma empresa em que trabalhei, com um farm de servidores gigantesco, apenas um número muito, muito pequeno de pessoas conhecia as senhas raiz. Em vez disso, havia um banco de dados de quem tinha permissão para trabalhar em quais servidores. Um processo automatizado adiciona você aos arquivos sudoers dos servidores aos quais você está autorizado a acessar e o remove quando sua autorização expira.


¹ Mais uma coisa: as versões modernas do Unix agora podem restringir até o que o usuário root pode fazer.

No SELinux (Security Enhanced Linux), existe efetivamente uma lista de controle de acesso que determina qual programa pode fazer o que e até o root não consegue ultrapassar essas restrições.

No sistema SIP ( System Integrity Protection ) da Apple (também conhecido como "sem raiz"), determinados arquivos e diretórios são bloqueados para que somente aplicativos na lista de desbloqueio apropriada possam acessá-los.

Esses sistemas existem para proteger um sistema do caso em que um usuário mal-intencionado consegue obter acesso root. (Ou, em alguns casos, para impedir que os usuários violem seus dispositivos incorporados.) Por razões óbvias, é extremamente difícil ignorar essas restrições, mesmo com acesso root.

² O prompt "login:" é outra parte arcaica da história do Unix, que remonta a quando todos usamos terminais ASCII em linhas seriais, em vez de sistemas de janelas. Você ainda pode obter um prompt de "login:" digitando loginqualquer janela do terminal ou abrindo uma conexão ssh (ou telnet ou rsh) com o computador de outro lugar. Você pode efetuar login como outro usuário a partir daí, se desejar. (E se o seu computador tiver portas seriais, você ainda poderá configurá-lo para permitir logins nelas.)

³ Também é possível que programas individuais tenham acesso root. Esses programas podem fazer qualquer coisa que um usuário com acesso root possa fazer, mesmo quando executados por um usuário comum. Normalmente, eles são limitados a tarefas específicas. Por exemplo, o programa crontab possui privilégios de root para poder editar as tabelas cron. Obviamente, "sudo" tem privilégios de root para que ele possa fazer o que faz.

Cover Vou abordar mais um ponto sobre o qual falei anteriormente. Eu tenho usado "administrador" e "raiz" de forma intercambiável, mas existem outros tipos de administradores. Elas são freqüentemente chamadas de "contas de função", ou seja, essas contas não pertencem a humanos reais, mas existem para desempenhar uma função específica no sistema. Se você der uma olhada no /etc/passwdarquivo em seu sistema, encontrará dezenas e dezenas dessas contas.

Por exemplo, se o mysql estivesse instalado no seu sistema, haveria um usuário "mysql" e todos os arquivos de banco de dados, arquivos de configuração etc. seriam de propriedade desse usuário. Somente esse usuário teria as permissões necessárias para acessar os arquivos e executar o servidor mysql. De certa forma, esse usuário seria uma conta de administrador, mas apenas para o mysql.

Se você precisasse executar tarefas administrativas do banco de dados, você se tornaria "mysql" com o su mysqlcomando ou usaria sudoonde o arquivo sudoers lhe daria privilégios de mysql para esses comandos específicos.

Edward Falk
fonte
11
O arquivo sudoers é o que oferece vários administradores. Efetivamente, seus administradores são root, além de todos os que estão listados no arquivo sudoers. Sem o arquivo sudoers, o único administrador é root.
Edward Falk
11
"No SELinux (Security Enhanced Linux), existe efetivamente uma lista de controle de acesso que determina quem pode fazer o que, e mesmo o root não consegue ultrapassar essas restrições". - se mesmo o root não consegue passar por essas restrições, quem as cria em primeiro lugar?
rancho
11
Para esclarecer isso: "Efetivamente, seus administradores são root, além de todos os que estão listados no arquivo sudoers". entradas do sudoers não precisam significar acesso root completo ou mesmo no nível raiz; Posso conceder ao Sven a capacidade de reiniciar um agente de monitoramento que é executado como moniser.
Jeff Schaller
11
The "sudo" command lets you execute commands with superuser privileges as long as your user id is in the sudoers file [..]. Na minha máquina (Solus OS 3), isso está errado. Meu nome de usuário não está no arquivo sudoers. e eu ainda posso fazer sudo.
Martin Andersson
2
Resposta antiga e isso é pedantaria, mas sué uma abreviação de "usuário substituto"; sudoé, portanto, "usuário substituto". Você pode usar supara fazer login como outro usuário, não apenas root. E você pode usar sudopara executar comandos como outro usuário.
josaphatv