Quais são os privilégios padrão do Polkit no Arch Linux para shutdown, halt, etc., e por que eles são assim?

4

No Arch Linux, com o systemd, os seguintes comandos são todos links simbólicos para systemctl :

/usr/bin/telinit
/usr/bin/poweroff
/usr/bin/runlevel
/usr/bin/reboot
/usr/bin/halt
/usr/bin/shutdown

Acho confuso o comportamento deles em relação à autorização:

$ shutdown
Must be root.
$ halt
Must be root.
$ telinit 3
# Asks for Polkit authorization

Nem poweroff nem reboot pede autorização. poweroff na verdade não desliga o meu sistema, o laptop permanece ligado com texto na tela informando que está sendo desligado - indefinidamente.

Eu não mexi nas regras do Polkit, então me pergunto por que o comportamento delas é assim.

  • Todos os comandos foram tentados com meu usuário administrador não-root, que é membro de wheel .
  • /etc/polkit-1/rules.d parece apenas conter um conjunto de regras padrão:

    # tail /etc/polkit-1/rules.d/*
    // DO NOT EDIT THIS FILE, it will be overwritten on update
    //
    // Default rules for polkit
    //
    // See the polkit(8) man page for more information
    // about configuring polkit.
    
    polkit.addAdminRule(function(action, subject) {
        return ["unix-group:wheel"];
    });
    

Em uma inspeção mais detalhada, /usr/share/polkit-1/actions/org.freedesktop.login1.policy tem seções para poweroff , reboot , suspend e hibernate , com allow_active definido como sim. Mas não há seções para shutdown . Se esta é a causa, por que é assim?

    
por muru 15.06.2015 / 12:45

1 resposta

4

Isso é bem complicado. Vamos explicar os comandos para que você os tenha enumerado.

  1. telinit

    Vários argumentos para telinit traduzem diretamente para vários subcomandos (diferentes) de systemctl . Conforme telinit (8) (documentação do pacote systemd):

    2, 3, 4, 5

    Change the SysV runlevel. This is translated into an activation request for runlevel2.target, runlevel3.target, ... and is equivalent to systemctl isolate runlevel2.target, systemctl isolate runlevel3.target, ...

    Portanto, esses comandos são convertidos em systemctl isolate , que é governado pela ação polkit org.freedesktop.systemd1.manage-units . Privilégios para essa ação padrão para exigir autenticação de administrador - tanto para sessões ativas, sessões inativas e processos fora de qualquer sessão.

    (BTW, por padrão, o polkit é configurado de tal forma que trata qualquer usuário em wheel group como administrador. Assim, você é solicitado a autenticar por si mesmo.)

  2. halt , poweroff , reboot

    Os comandos poweroff e reboot funcionam em duas etapas:

    • se invocado em um usuário não-root e logind estiver disponível, logind será solicitado a executar a ação, usando as ações do polkit org.freedesktop.login1.* ;
    • caso contrário, o quase equivalente de systemctl poweroff ou systemctl reboot é executado, mas sem consultar o polkit .

    halt é semelhante, mas sempre é a segunda rota (quase equivalente a systemctl halt ). Não há nenhum método para parar via logind.

    Observe o "quase equivalente". Caso você faça

    • poweroff sob uma não-raiz sem logind,
    • reboot sob uma não-raiz sem logind,
    • halt em um não-raiz,

    você recebe um "deve ser root". em vez de autenticar para org.freedesktop.systemd1.manage-units via polkit. Ao mesmo tempo, com systemctl poweroff , systemctl reboot ou systemctl halt , você terá a chance de autenticar via polkit. Este é provavelmente um bug.

  3. shutdown

    Esta ferramenta pode ser usada para agendar um desligamento, parada ou reinicialização atrasada. Se invocado sem argumentos, um atraso de 1 minuto está implícito. A ação padrão é o desligamento. De desligamento (8) :

    The time string may either be in the format "hh:mm" for hour/minutes specifying the time to execute the shutdown at, specified in 24h clock format. Alternatively it may be in the syntax "+m" referring to the specified number of minutes m from now. "now" is an alias for "+0", i.e. for triggering an immediate shutdown. If no time argument is specified, "+1" is implied.

    Se o tempo limite e a mensagem de parede não forem especificados, shutdown será equivalente a% depoweroff, halt ou reboot (ver # 2).

    Se um tempo limite ou uma mensagem de parede for especificada, shutdown requer privilégios de root.

  4. poweroff não desliga

    Realmente deveria. Este é provavelmente um bug do kernel.

por 15.06.2015 / 18:48