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?


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.


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


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


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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.