Estou usando o Linux há algum tempo e, sempre que digitava sudo
, pensava em mudar para o usuário root para obter um comando.
Aparentemente, isso não é verdade porque tudo o que preciso é da senha da minha conta de usuário. Acho que, como não trabalhei com vários usuários, não percebi isso no mundo real.
Não tenho certeza de como o Ubuntu configura minha primeira conta. Existe um usuário root? Eu sou raiz? Acho que acabei de criar um novo usuário na instalação, mas ele me deu privilégios de root? Só um pouco confuso aqui ...
Então, por que tenho permissão para executar comandos root com a senha do meu usuário?
sudo
tem o bit "setuid" definido. Portanto, ele é executado como o usuário que o possui (que é raiz em todos os sistemas padrão, se não me engano), não como o usuário que o inicia.sudo
depois carrega o/etc/sudoers
arquivo e verifica o que é permitido com base em quem o lançou.sudo
privilégios, talvez trabalhando em locais geograficamente distribuídos e em turnos 24 × 7, você deseja revogar o acesso privilegiado de uma pessoa imediatamente (por exemplo, se você suspeita da integridade dele). Se todo mundo estiver usando a senha de root única, e você a alterar sem coordenação prévia, poderá ocorrer o caos. …Respostas:
Em detalhes, funciona da seguinte maneira:
/usr/bin/sudo
O arquivo executável possui o conjunto de bits setuid ; portanto, mesmo quando executado por outro usuário, ele é executado com o ID do proprietário do arquivo (raiz nesse caso).sudo
verifica no/etc/sudoers
arquivo quais privilégios você possui e se tem permissão para executar o comando que está chamando. Simplesmente,/etc/sudoers
é um arquivo que define quais usuários podem executar quais comandos usando osudo
mecanismo.É assim que esse arquivo fica no meu Ubuntu:
A terceira linha é o que presumivelmente lhe interessa. Permite que qualquer pessoa no grupo "sudo" execute qualquer comando como qualquer usuário.
Quando o Ubuntu configura a primeira conta durante a instalação, ele é adicionado ao grupo "sudo". Você pode verificar a quais grupos os usuários pertencem com o
group
comandosudo
solicita uma senha. Quanto ao fato de precisar da senha do usuário, e não da raiz, isso é um trecho do manual do sudoers :No entanto, de fato,
sudo
não precisa da sua senha de usuário para nada. Ele pede apenas para garantir que você é realmente você e fornecer a você algum tipo de aviso (ou chance de parar) antes de invocar algum comando potencialmente perigoso. Se você deseja desativar a solicitação de senha, altere a entrada sudoers para:Após a autenticação,
sudo
ocorre o processo filho que executa o comando invocado. O filho herda o ID do usuário raiz de seu pai - osudo
processo.Então, respondendo suas perguntas com precisão:
Você estava certa. Cada comando precedido por
sudo
é executado com o ID do usuário raiz.Sim, existe uma conta de usuário raiz, separada da sua conta de usuário criada durante a instalação do sistema. No entanto, por padrão no Ubuntu, você não tem permissão para fazer login no terminal interativo como usuário root.
Não, você não é uma raiz. Você só tem privilégio de executar comandos individuais como raiz , usando o
sudo
mecanismo descrito acima.Você precisa inserir a senha do usuário apenas devido ao
sudo
mecanismo de segurança interno. Pode ser facilmente desligado. Você ganha seus poderes de raiz por causa do bit setuid/usr/bin/sudo
, não por causa de nenhuma senha digitada.fonte
sudo
poderia ser executado sem inserir minha senha. Ótima resposta!rootpw
bandeira nosudoers
.sudo su - root
fará exatamente isso e fornecerá um terminal raiz. No entanto, você não pode acessar facilmente uma sessão da área de trabalho como raiz.sudo
possui privilégios de root por si só e decide se deve conceder isso a você com base em um arquivo de configuração.O objetivo principal
sudo
é conceder a você os privilégios de outra pessoa (geralmente root) sem solicitar a senha dessa outra conta (ao contráriosu
).sudo
está pedindo aqui sua senha apenas para garantir que um transeunte não use mal o terminal desbloqueado.O Ubuntu e muitos outros sistemas operacionais Linux e Unix estão concedendo uma conta inicial criada no momento da instalação o direito de executar qualquer comando como
root
.Embora
root
ainda seja uma conta no Linux, osroot
logins diretos são desativados por padrão para uma melhor segurança e rastreabilidade.fonte
Piotr deu uma explicação muito boa de como
sudo
funciona. No entanto, ele realmente não motivou por que funciona dessa maneira, então tentarei adicionar isso aqui.Antes do
sudo
comando ser criado, tínhamos osu
comando. Este comando permite que um usuário execute comandos como outro usuário, normalmenteroot
(como emsudo
, este é o usuário de destino padrão). Foi totalmente indiscriminado, você pode executar qualquer comando. Como poderia ser usado por qualquer usuário, era efetivamente equivalente a efetuar login como usuário, exigia que você soubesse a senha do usuário de destino.Em algum momento, um pouco mais de controle de acesso foi adicionado: para usar
su
, você tinha que ser um membro dowheel
grupo. Mas como você ainda pode executar qualquer comando, ainda fazia sentido exigir que você soubesse a senha deles.Porém, exigir que os usuários soubessem a senha um do outro ou do superusuário não era muito seguro. Freqüentemente, você apenas deseja conceder a certos usuários acesso limitado a alguma outra conta (isso faz parte de um conceito de segurança chamado princípio do menor privilégio ). Isso também dificulta a prestação de contas: se várias pessoas souberem a senha de uma conta e essa conta estiver envolvida em um erro ou abuso, não será possível dizer qual delas realmente fez isso.
Então
sudo
foi criado. Em vez de permitir que os usuários executem qualquer comando, ele possui um elaborado arquivo de configuração, abordado brevemente na resposta de Piotr, que especifica precisamente quem pode usá-lo, para quais usuários eles podem alternar e quais comandos eles podem executar. Com esse controle refinado sobre quem pode fazer o que com quem, não precisamos mais fornecer aos usuários a senha da conta de destino; se o fizéssemos, eles poderiam facilmente ignorar todos os controles no arquivo de configuração efetuando login como esse usuário. Em vez disso, normalmente exigimos que eles provem que são quem fizeram o login, digitando sua própria senha - para impedir que alguém tire vantagem de uma conta se o terminal for deixado sem vigilância.Esse requisito é dispensado para o superusuário - essa conta pode fazer quase qualquer coisa com o sistema sem usar
sudo
, portanto foi considerada supérflua. Também é possível especificar no arquivo de configuração que os usuários não precisam digitar uma senha - algumas organizações usam isso quando acreditam que a segurança física do ambiente da estação de trabalho é suficiente para evitar abusos.fonte
su
também registra, mas, como apenas inicia um novo shell, registra o fato de que alguém o executou.sudo
, permite que os privilégios sejam revogados, sem a necessidade de reemitir a senha root para todos que precisarem.sudo
permite restringir quais comandos um usuário pode executar, tente garantir que você não conceda a eles acesso aos comandos que sobrescreveriam o log.A resposta para sua pergunta é:
Quando você executa um comando com sudo , executa o comando com privilégios elevados , ou seja, privilégios de root . Você só precisa digitar sua senha de usuário normal porque você (o usuário) foi adicionado ao arquivo sudoers, o que fornece privilégios de root .
fonte
sudo
nem sempre concede privilégios elevados, mas é executado com privilégios elevados, depois de fazer o seu trabalho (checando a autenticação, ele pode perder privilégios). Ele precisa desses privilégios elevados para poder mudar de usuário.sudo
faz uso de privilégios elevados (mas isso não é exclusivo para o sudo, por exemplo, montar faz também), mas o comando que você chama isto é,command
nasudo command
não pode (dependendo do que está definido no/etc/sudoers
).Primeiro, a desabilitação de uma conta geralmente é feita configurando a senha criptografada como *, que não é o valor criptografado de nenhuma sequência. Não posso verificar agora, mas acredito que é isso que o Ubuntu faz também como root. Portanto, tecnicamente, não há senha de root no Ubuntu.
Mas o sudo precede o Ubuntu; foi projetado para sistemas onde certamente havia senhas raiz. Então, por que não requer a senha root? Basicamente, o sudo é projetado para dar permissão para executar comandos específicos para determinados usuários - por exemplo, permitir que o desenvolvedor root inicie novamente o aplicativo Web, mas não inicie servidores arbitrários. Conhecer a senha root, por outro lado, fornece acesso ilimitado; você pode usar login ou su para abrir um shell raiz e executar comandos arbitrários. Como o sudo precisa trabalhar para pessoas sem esse nível de acesso, não pode ser necessário executar a senha root.
fonte