Comment faire / sbin / shutdown, / sbin / reboot etc. nécessitent de nouveau sudo en 16.04?

18

Pour une raison quelconque, nous n'avons plus besoin d'être root (ou d'utiliser sudo) pour exécuter /sbin/shutdown, /sbin/rebootetc.

Cela semble être dû au fait que ces exécutables sont maintenant des liens symboliques vers /bin/systemctllesquels gère tout en tant qu'utilisateur normal.

Cependant, que se passe-t-il si je veux shutdownet que je demande rebootà nouveau l'authentification racine? Comment puis-je atteindre cet objectif?

Byte Commander
la source
3
Je suppose que les règles du polkit. Modifier askubuntu.com/a/570969/158442 selon les besoins (utiliser pkaction | grep login1pour d'autres règles d'intérêt)
muru
3
(un exemple de règles pour exiger des privilèges d'administrateur: askubuntu.com/a/744094/158442 )
muru
1
N'est-ce pas uniquement si vous êtes la seule personne connectée. S'il y a quelqu'un d'autre connecté au système, il vous sera demandé de saisir le mot de passe root.
ognjen
Ce n'est peut-être pas la réponse que vous attendez, mais un comportement similaire peut être provoqué par un autre utilisateur administrateur ayant modifié votre '/ etc / sudoers'. Si c'est ce qui cause votre problème, vous pouvez le modifier en tapant sudo visudoet en vérifiant s'il existe une ligne avec le chemin d'accès à ces exécutables.
Damien

Réponses:

5

Systemd gère en effet les commandes shutdown, rebootet autres, et les privilèges par défaut attribués sont permissifs. Pour changer cela, vous devez créer une règle Polkit. Créez un .pklafichier /etc/polkit-1/localauthority/50-local.d(disons confirm-shutdown.pkla) contenant:

[Confirm shutdown]
Identity=unix-user:*
Action=org.freedesktop.login1.*
ResultActive=auth_admin_keep

Les différents arrêt, redémarrage, etc. Les commandes sont, en termes de polkit, actions org.freedesktop.login1, par exemple, org.freedesktop.login1.power-off, org.freedesktop.login1.reboot, etc. Le problème spécifique est ici la configuration par défaut, qui est /usr/share/polkit-1/actions/org.freedesktop.login1.policy:

<action id="org.freedesktop.login1.power-off">
        <description>Power off the system</description>
        ...
        <defaults>
                <allow_any>auth_admin_keep</allow_any>
                <allow_inactive>auth_admin_keep</allow_inactive>
                <allow_active>yes</allow_active>
        </defaults>

Notez qu'il permet à l'utilisateur actif de s'éteindre, de redémarrer, etc.

muru
la source
0

Vous pouvez utiliser la chmodcommande.

  • Si vous souhaitez donner uniquement accès à root, vous pouvez écrire:

    chmod 700 directory/to/the/file
    
  • Si vous voulez donner du permisson à la racine et au groupe sudo alors vous pouvez écrire:

    chmod 770 directory/to/the/file
    
  • Si vous souhaitez changer le groupe du fichier de sudo en un autre (comme un utilisateur ou des administrateurs), vous devez taper:

    chown owner:group directory/to/the/file
    
  • Si vous souhaitez revenir en arrière, exécutez:

    chown root:sudo filedirectory 
    

Remarque : vous devrez peut-être utiliser sudoces commandes ou vous être connecté au compte root

Yakusho
la source
Notez que toute tentative de modification des autorisations du lien modifiera les autorisations de la cible (dans ce cas /bin/systemctl), donc l'exécution de chmod / sbin / shutdown aura un impact sur tous les liens pointant vers /bin/systemctlcar les autorisations à bin/systemctlseront modifiées comme confirmé par la commande $ ll /bin/systemctl -rwx ------ 1 racine root 659848 18 janvier 16:04 / bin / systemctl *
Elder Geek
Si vous devez le modifier à nouveau, les autorisations par défaut sont-rwxr-xr-x 1 root root 659848 Jan 18 16:04 /bin/systemctl
Elder Geek
-1

Vous pouvez créer un script qui vérifie si l'utilisateur l'exécute avec les autorisations root ou non.
Ensuite, il exécutera la commande systemctl ou retournera une erreur.

#! / bin / bash
if ["$ (whoami)"! = "root"]; ensuite
    echo "Désolé, vous n'êtes pas root."
    sortie 1
autre
    (commande d'arrêt systemctl)
Fi

La source

Ven3k
la source
4
Qu'est-ce qui empêche un utilisateur non root de contourner simplement ce script?
Robie Basak
-1

Essayez de modifier ses autorisations dans le terminal. Vous pouvez le rendre exécutable uniquement par un certain groupe, tel que wheel ou admin. Malheureusement (ou peut-être heureusement), un fichier ne peut avoir qu'une propriété de groupe, donc chown ne fonctionnerait tout simplement pas seul. Essayez "sudo chown root: wheel / sbin / shutdown" puis "sudo chmod g + x / sbin / shutdown". Cela rendra le fichier exécutable uniquement par root et les administrateurs (shudders) et sudoers seront tenus d'entrer leurs mots de passe.

chevydog
la source
2
Le groupe "wheel" est une chose d'Arch Linux et peut-être d'autres distributions, mais certainement pas sur Ubuntu btw.
Byte Commander
2
Ce n'est pas efficace. Un utilisateur peut simplement télécharger un binaire systemctl ailleurs et l'exécuter à la place.
Robie Basak
@Robie, vous pouvez le faire avec n'importe quelle solution. Vous pouvez maintenir enfoncé le bouton d'alimentation. Ma solution fonctionne pour ce qu'il demande.
chevydog