Quando instalamos / removemos / atualizamos pacotes ou fazemos alterações que exijam privilégios administrativos, é solicitada a senha do usuário administrador que possui os sudo
privilégios - isso ocorre via GUI e no terminal.
No entanto, se tentarmos desligar e reiniciar via terminal, ele reclama que precisamos ser root
:
$ reboot
reboot: Need to be root
$ shutdown now
shutdown: Need to be root
Mas nunca nos pedem uma senha quando executamos essas ações por meio da roda dentada no canto superior direito.
Por que existe essa discrepância?
sudo
shutdown
restart
privileges
Aditya
fonte
fonte
sudo shutdown -h now
mas o problema é que, sem a permissão de acessoshutdown
, nunca funciona. Porque onde / como solicitará a senha para entrar depois de pressionar a tecla de atalho .. Espero que você entenda minha situação .. :)Respostas:
O desligamento na roda dentada verifica se você tem permissão para desligar a máquina. Isso é feito via PolicyKit. Em caso de desligamento, esta instrução no arquivo
/usr/share/polkit-1/actions/org.freedesktop.consolekit.policy
é verificada:O PolicyKit aciona um
dbus-send
comando. Em caso de desligamento, seria:Há um daemon em execução em segundo plano com privilégios de root que chama o comando shutdown para você.
Quando você quiser desligar a máquina "da maneira antiga" via linha de comando (
shutdown, reboot, halt, ...
), precisará adicionar o suid-Bit a esses comandos. Mas esteja ciente de que todos no seu sistema que tenham acesso ao shell poderão desligar sua máquina.fonte
sudo visudo
, adicione%sudo ALL = NOPASSWD: /sbin/shutdown, /sbin/poweroff, /sbin/halt, /sbin/reboot
, salve e saia. Dessa forma, uma reinicialização da linha de comando ainda exigirásudo reboot
, mas você não precisará digitar sua senha.O Ubuntu é uma distribuição do GNU / Linux Operationg System, que por sua vez pertence à família de sistemas Unix - uma arquitetura comum para vários sistemas operacionais modernos.
Tradicionalmente, o Unix costumava ser executado em computadores mainframe. Instalações de computação central que atendem a dúzias ou centenas de usuários por meio de terminais remotos. Como todos os usuários confiaram na disponibilidade do mainframe, nenhum usuário foi autorizado a emitir um comando de desligamento. Uma idéia que é fundamental para a arquitetura Unix - o kernel do sistema nunca inicializará um desligamento, a menos que a função correspondente seja chamada por um processo de superusuário.
Nos sistemas de desktop contemporâneos, os desenvolvedores passaram por algumas dificuldades para disponibilizar o desligamento para o mero usuário de desktop. Uma técnica comum é permitir que o gerenciador de login, que geralmente é executado no contexto de segurança do usuário root, lide com o desligamento e a reinicialização. Nesse caso, o shell gráfico emite uma solicitação ao gerenciador de login para desligar o computador. Isso envolve o uso de comunicação entre processos (IPC), geralmente através do serviço dbus.
O kit de políticas mencionado acima estende esse processo, fornecendo uma estrutura padronizada através da qual o gerenciador de login (ou qualquer programa que fornece o serviço de desligamento) pode verificar quais usuários têm permissão para causar um desligamento e através do qual um administrador pode configurar essas permissões, respectivamente.
Alguns ambientes de área de trabalho não usam serviços baseados em IPC, mas um conjunto de programas auxiliares para fornecer as mesmas funções ou funções semelhantes. Esses programas auxiliares seriam chamados por meio de mecanismos, permitindo mudar para o contexto do superusuário, como sudo, suid ou um mecanismo do kit de políticas semelhante ao sudo.
De qualquer forma, o programa de desligamento tradicional burro no shell não funciona dessa maneira. É necessário que você veja que ele é executado em um contexto de superusuário.
fonte
Como o Linux é comumente usado como servidor ou similar, e o SSHing em uma caixa Linux, mesmo um laptop Ubuntu normal, é bastante comum.
O problema é que você pode não querer que as pessoas com acesso SSH possam desligá-lo, principalmente quando houver outros usuários conectados remotamente usando-o. Alguém com acesso à GUI - bem, ele pode desligá-la por conta própria com o botão de energia físico.
Além disso, um usuário conectado remotamente não poderá ativá-lo novamente.
fonte
Somente se você for o único logon. Se houver outros usuários (incluindo usuários do console), talvez seja necessário digitar uma senha root. É o mesmo no OS X e nas versões mais recentes do Windows.
O seguinte comando:
Por que o
shutdown
comando não apenas verifica se alguém está logado? Parece uma característica pouco mercantil para ser honesto. Eu posso imaginar que às vezes economizaria tempo, mas geralmente é preferível um console consistente. Não quero que os comandos às vezes exijam uma senha após executá-la, e às vezes não.Meus pronomes são He / Him
fonte
sudo
senha do usuário / root nem com outro usuário conectado via GDM nem com outro usuário conectado via tty.O motivo pelo qual você não precisa ser root para iniciar um desligamento a partir da GUI é uma questão de conveniência para o usuário típico da área de trabalho. O sistema sabe que você é o usuário conectado ao console; portanto, se você desligar o computador por engano, presumivelmente poderá ativá-lo novamente.
Para um usuário no shell, é bem possível que você esteja conectado remotamente, portanto o sistema exige que você esteja conectado como root para emitir um comando de desligamento. Isso impede que um usuário comum conectado a um servidor o desligue enquanto outras pessoas o estão usando, e enquanto não há necessariamente alguém fisicamente lá para iniciar o backup do computador.
O motivo pelo qual o desligamento não fornece um prompt da GUI para a senha de superusuário provavelmente é simplesmente o fato de não haver utilidade real a ser adquirida - se você estiver no console, onde o prompt apareceria, você pode simplesmente usar o comando cog- em vez disso. Se você deseja ter um prompt de linha de comando para a senha de superusuário para desligamento, isso já está disponível com "sudo shutdown".
fonte
Em um sistema multiusuário, a última coisa que você deseja é que seus usuários efetuem login e possam reinicializar aleatoriamente o servidor a qualquer momento. Portanto, a versão da linha de comando de Reinicialização é um comando apenas de superusuário, portanto, você precisa ser root ou tem direitos de sudo.
O mesmo vale para os comandos Halt e PowerOff.
fonte