Por que a reinicialização e o poweroff exigem privilégios de root? [duplicado]

63

Para reiniciar ou desligar o Linux do terminal, pode-se usar reboot e poweroff , respectivamente. No entanto, esses dois comandos exigem privilégios de root. Porque isto é assim? Qual risco de segurança é imposto ao não exigir que isso tenha privilégios de root? A GUI fornece uma maneira para qualquer usuário desligar ou reiniciar, então por que os comandos do terminal precisam ser executados como root?

Falando das opções da GUI, se o terminal exigir privilégios de root para desligar ou reiniciar o computador Linux, como a GUI pode apresentar uma opção que faz o mesmo sem exigir a inserção de uma senha?

    
por Rohan 07.01.2016 / 04:34

6 respostas

62

Aviso: até o final desta resposta, você provavelmente saberá mais sobre o Linux do que você queria

Por que reboot e poweroff exigem privilégios de root

Os sistemas operacionais GNU / Linux são multiusuário , assim como seus antecessores UNIX . O sistema é um recurso compartilhado e vários usuários podem usá-lo simultaneamente .

No passado, isso geralmente acontecia em terminais de computador conectados a um minicomputer ou um mainframe .

OpopularminicomputadorPDP-11.Umpoucogrande,pelospadrõesdehoje:)

Nosdiasdehoje,issopodeacontecerremotamentepelarede(geralmentevia SSH ), em mais clientes ou em uma configuração multiterminal , onde existem vários usuários locais com hardware conectado ao mesmo computador.

Umaconfiguraçãomulti-sede.FotodeTiagoVignatti

Naprática,podehavercentenasoumilharesdeusuáriosusandoomesmocomputadorsimultaneamente.Nãofariamuitosentidosealgumusuáriopudessedesligarocomputadoreimpedirquetodosousassem.

Qualéoriscodesegurançapornãoexigirqueissotenhaprivilégiosderoot?

Emumsistemamultiusuário,issoimpedeoqueéefetivamenteum ataque de negação de serviço

A GUI fornece uma maneira para qualquer usuário desligar ou reiniciar, então por que os comandos do terminal precisam ser executados como root?

Muitas distribuições do Linux não fornecem uma GUI. As distribuições Linux de desktop que normalmente são orientadas para um único padrão de usuário, portanto, faz sentido permitir isso a partir da GUI.

Possíveis razões pelas quais os comandos ainda exigem privilégios de root:

  • A maioria dos usuários de uma distro orientada a desktop usará a GUI, não a linha de comando, então não vale a pena
  • Consistência com convenções aceitas do UNIX
  • (indiscutivelmente equivocada) segurança, pois evita que programas ou scripts ingênuos desliguem o sistema

Como a GUI pode apresentar o desligamento sem privilégios de root?

O mecanismo real irá variar dependendo do gerenciador de área de trabalho (GUI) específico. De um modo geral, existem vários mecanismos disponíveis para este tipo de tarefa:

  • Executando a GUI em si como raiz (esperamos que isso não aconteça em nenhuma implementação apropriada ...)
  • setuid
  • sudo com NOPASSWD
  • Comunicando o comando para outro processo que tenha esses privilégios, geralmente feito com D-Bus . Em GUIs populares, isso geralmente é gerenciado pelo polkit .

Em resumo

O Linux é usado em contextos extremamente variados - de mainframes, servidores e desktops a supercomputadores, telefones celulares e

    
por 08.01.2016 / 01:08
45

O Linux tem suas origens no Unix e o Unix foi inicialmente desenvolvido como um sistema operacional multiusuário. Você pode fazer com que um usuário interrompa outros usuários, querendo reinicializar o sistema. Apenas o administrador com privilégios de root pode fazer isso.

    
por 07.01.2016 / 08:39
35

É bastante natural e uma questão de política e conveniência, ele tinha sido permitido a partir da interface gráfica porque você está fisicamente logado na máquina. (Algumas distribuições Linux ainda lhe pedirão uma senha se a GUI não estiver rodando como root, estou usando o Centos 6 e não há nem mesmo a opção de desligamento / reinicialização da GUI para meu usuário, existe apenas a opção de logout e bloqueio)

De um pseudo-terminal, você precisa ser root ou ter o privilégio sudo, porque você pode não querer que nenhum usuário faça ssh em seu servidor ou máquina e desligue-o ou reinicie-o.

    
por 07.01.2016 / 08:15
10

O desligamento (de qualquer tipo) afeta todos os usuários, incluindo até mesmo a eliminação de seus processos. Isso não é algo que você normalmente desejaria que o J. Random User pudesse fazer, simplesmente porque eles estavam logados.

Normalmente, somente operadores autorizados devem ter permissão para reinicializar e, em alguns casos, aqueles com acesso físico - muitos sistemas Linux podem ser desligados de um botão liga / desliga no gabinete. Eu sei disso, porque eu fiz isso acidentalmente! Hoje em dia, normalmente deixo o botão desconectado ao montar um sistema ...

    
por 07.01.2016 / 17:53
5

Para a pergunta 1 st :

What security risk is posed by not requiring this to have root privileges? The GUI provides a way for any user to shut off or restart, so why do the terminal commands need to be run as root?

Sim, como dito em esta resposta, o Linux é inerentemente projetado como sistema multiusuário. Se mais de um usuário estiver trabalhando em um sistema, seria ruim se algum usuário normal tivesse permissão para desligar o sistema enquanto outros estivessem trabalhando. Imagine o que acontece se o seu servidor web for removido por um usuário à distância! Portanto, somente o administrador do sistema, também conhecido como usuário root, tem permissão para poweroff ou reboot do sistema.

Você também pode descobrir:

$ which poweroff reboot
/sbin/poweroff
/sbin/reboot

Portanto, poweroff e reboot estão localizados no diretório /sbin que contém os utilitários e comandos somente raiz, binários essenciais para inicializar, restaurar, recuperar e / ou reparar sistema.

Portanto, espera-se que esses comandos sejam executados pelo administrador do sistema / usuário root, visite a página do manual:

DESCRIPTION
       These programs allow a system administrator to reboot, halt or poweroff the system.

Visite também a questão relacionada: Por que precisamos ser root no terminal para desligamento e reinicialização?

Para a questão 2 nd :

Speaking of the options from the GUI, if the terminal requires root privileges to shut off or restart the Linux computer, how is the GUI able to present an option that does the same without requiring the entering of a password?

A GUI é uma questão de conveniência e, obviamente, o usuário está logado na GUI, sabe o que está acontecendo e o que está fazendo. Portanto, ele não espera a solicitação / solicitação de senha do usuário, ou seja, pode ser encerrado ou reinicializado por meio de algum mecanismo como policy-kit . Mas no caso de linha de comando as coisas saem diferentes ...

Claro, você pode usar o comando equivalente fornecido pelo Desktop-Environment. Por exemplo, para gnome , você pode usar: gnome-session-quit com a opção apropriada que não requer privilégios de root.

Acesse também a questão relacionada: Como o botão liga / desliga desliga o computador sem permissão de root?

    
por 07.01.2016 / 10:08
3

como os outros já escreveram, um usuário "normal" não deve ser capaz de encerrar processos de outros usuários ou encerrar um serviço (servidor web, servidor de email, etc.) e é por isso que são necessários direitos de superusuário.

A GUI pode desligar ou reinicializar através do mecanismo link . Em palavras simples: o próprio comando reboot tem privilégios de root e você, como usuário normal, tem permissão para executar a reinicialização. Como você não tem permissão para manipular o executável de reinicialização (você tem direitos de execução, mas nenhuma permissão de gravação), isso não fornece uma maneira de obter direitos de root sobre a máquina.

E (como os outros já escreveram) supõe-se que a GUI seja executada fisicamente na máquina, por isso é um computador de usuário e não um servidor, e você pode (desligando a energia) de qualquer forma desligar o computador, então por que se preocupar com direitos de root;) Também vi GUIs, que verificam se outros usuários estão conectados (por exemplo, um shell raiz em algum lugar) e não permitem o desligamento se outros usuários estiverem conectados.

EDIT: Como corrigido pelo Pandya, é policy-kit permitindo que você como usuário normal para reiniciar / desligar

    
por 07.01.2016 / 08:59