Diferença entre usuário sudo e usuário root

Diferença entre usuário sudo e usuário root

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 dando o sudo sucomando.

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

Por favor, explique-me.

Responder1

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


Resposta longa:

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

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

Antes da invenção do comando "sudo", se você quisesse realizar tarefas administrativas, você tinha que fazer 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 incômodo e também não permite conceder aos usuários poderes administrativos parciais. Assim, o comando “sudo” (abreviação de “substituir usuário do”) foi inventado.

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

Então, por exemplo, sudo vi /etc/hostspermitiria que você editasse o arquivo hosts como se estivesse executando como root. Você nem precisa da senha de root, apenas da sua própria senha de login.

E, claro, sudo supermitiria que você simplesmente se tornasse root. 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 do root, mas precisa estar no arquivo sudoers.

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

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

Na verdade, em organizações onde outra pessoa administra seu computador para você, é bastante comum não saber a senha root do seu próprio computador – contanto que você esteja no arquivo sudoers, não importa.

Em uma empresa para a qual trabalhei, com um enorme farm de servidores, apenas um número muito pequeno de pessoas conhecia as senhas de root. Em vez disso, havia um banco de dados de quem tinha permissão para trabalhar em quais servidores. Um processo automatizado adicionaria você aos arquivos sudoers dos servidores aos quais você estava autorizado a acessar e o removeria quando sua autorização expirasse.


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

SobSELinux(Security Enhanced Linux), existe efetivamente uma lista de controle de acesso que determina qual programa pode fazer o quê, e mesmo o root não consegue superar essas restrições.

Sob a AppleProteção da integridade do sistema(SIP) (também conhecido como "sem raiz"), determinados arquivos e diretórios são bloqueados para que apenas aplicativos na lista de permissões apropriada possam acessá-los.

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

² O prompt "login:" é outra peça arcaica da história do Unix, que remonta à época em que todos usávamos terminais ascii em linhas seriais, em vez de sistemas de janela. Você ainda pode obter um prompt “login:” simplesmente digitando loginem qualquer janela de terminal ou abrindo uma conexão ssh (ou telnet ou rsh) com seu computador de outro lugar. Você pode fazer 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 recebam acesso root. Esses programas podem fazer qualquer coisa que um usuário com acesso root pode fazer, mesmo quando executados por um usuário comum. Normalmente, eles são limitados a tarefas específicas. Por exemplo, ocrontabO programa tem privilégios de root para poder editar as tabelas cron. Obviamente, “sudo” tem privilégios de root para poder fazer o que faz.

⁴ Vou abordar mais um ponto que encobri anteriormente. Tenho usado "administrador" e "root" de forma intercambiável, mas existem outros tipos de administradores. Muitas vezes são chamadas de "contas de função", o que significa que essas contas não pertencem a humanos reais, mas existem para desempenhar alguma 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 em seu sistema, haveria um usuário "mysql" e todos os arquivos de banco de dados, arquivos de configuração e assim por diante seriam de propriedade desse usuário. Somente esse usuário (e root, é claro) 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 mysql.

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

informação relacionada