Adicionar o bit setuid ao processo de desligamento permitirá que qualquer processo pertencente a qualquer ID de usuário encerre ou reinicie o sistema com atrasos arbitrários.
Embora seja improvável, também pode expor overflows de buffer que permitem que usuários sem privilégios façam mais do que isso. Com o setuid bit set, existe a possibilidade de que o comando possa ser invocado com uma entrada que faz com que o comando funcione mal de uma maneira útil para um invasor.
Mesmo se você tiver um sistema de usuário único, isso pode ser uma preocupação: se um invasor usa uma exploração que permite executar código sem privilégios no sistema, os programas setuid podem fornecer uma maneira de obter privilégios de superusuário.
Por outro lado, a API usada pela área de trabalho fornece ações muito mais limitadas (reiniciar agora, desligar agora, etc.) e permite que usuários sem privilégios as ativem em circunstâncias limitadas (o usuário é um usuário local ativo e não há outros logados no sistema). Se o aplicativo que você está usando tiver uma opção para usar essas APIs em vez de chamar diretamente o comando shutdown
, isso seria preferível.