Mise hors tension ou redémarrage en tant qu'utilisateur normal

17

Pour exécuter la commande poweroffou rebootil faut être super - utilisateur. Existe-t-il de toute façon que je peux l'exécuter en tant qu'utilisateur normal? Je ne veux tout simplement pas sudosaisir mon mot de passe à chaque redémarrage ou mise hors tension.

Stormvirux
la source
2
La réponse dépend du système d'initialisation utilisé par votre distribution ... Par exemple, avec systemdune logindsession active , vous pouvez redémarrer ou éteindre sans privilèges élevés à condition qu'aucun autre utilisateur ne soit toujours connecté ...
jasonwryan
@jasonwryan J'utilise actuellement Ubuntu qui ne l'utilise pas systemdpar défaut. Vous voulez donc dire que d'autres Distros comme Arch peuvent redémarrer sans privilèges?
Stormvirux
Oui: selon les conditions de mon premier commentaire.
jasonwryan

Réponses:

22

J'ai changé /etc/sudoerspour que chaque utilisateur du groupe admin puisse exécuter les commandes suivantes sans avoir à demander de mot de passe.

sudo halt
sudo reboot
sudo poweroff

Il vous suffit d'ajouter les lignes suivantes à /etc/sudoers

## Admin user group is allowed to execute halt and reboot 
%admin ALL=NOPASSWD: /sbin/halt, /sbin/reboot, /sbin/poweroff

et ajoutez-vous au groupe admin.

Si vous voulez qu'un seul utilisateur soit en mesure de le faire, supprimez simplement le %adminet remplacez-le par usernamecomme ceci

## user is allowed to execute halt and reboot 
stormvirux ALL=NOPASSWD: /sbin/halt, /sbin/reboot, /sbin/poweroff

Vous pouvez en savoir plus sur /etc/sudoersavec man sudoersou sur la page de manuel en ligne

Raphael Ahrens
la source
4

Vous pouvez également créer un nouveau fichier sous le /etc/sudoers.dnommer comme vous le souhaitez (je l'ai nommé 'shutdown'), et mettre les lignes suivantes à l'intérieur:

# Allows me to shutdown the system without a password

yourUserName ALL = NOPASSWD: /sbin/halt, /sbin/reboot, /sbin/poweroff

Il suffit de changer "yourUserName" pour VOTRE nom d'utilisateur, et d'ajouter ou de supprimer des commandes à utiliser, personnellement je ne l'utilise que pour shutdown. L'une des principales différences de création d'un fichier particulier sous sudoers.dest que ce fichier survivra aux mises à niveau du système

Racu
la source
1
Si vous choisissez cette approche, assurez-vous qu'elle /etc/sudoersdispose d'une #includedirective appropriée pour lire les fichiers /etc/sudoers.d/.
patricktokeeffe
2

Vous pouvez également y parvenir par astuce avec setuid. Je ne sais pas si cela fonctionnera sur tous les systèmes, car ils ignorent parfois le bit setuid / setgid.

Vous pouvez spécifier un groupe d'utilisateurs qui peuvent effectuer un changement d'état du système dans mon cas adm. Ajoutez ensuite les utilisateurs appropriés à ce groupe.

gpasswd -a $USER adm

Spécifiez les autorisations:

chmod 4550 /usr/bin/reboot

ls -l outpus devrait ressembler à ceci:

-r-sr-x--- 1 root adm 18928 Mar 13  2015 /usr/bin/reboot

Ensuite, vous pouvez simplement taper:

reboot
hurufu
la source
1

Solution la plus simple:

sudo echo $USER >> /etc/shutdown.allow

Ensuite, vous pouvez utiliser l'une de ces commandes:

shutdown -ah now   // halt
shutdown -ar now   // reboot

Selon l' arrêt de l'homme, il existe une option pour une utilisation non root:

Si shutdownest appelé avec l' argument -a (ajoutez ceci à l'invocation de l'arrêt dans / etc / inittab ), il vérifie si le fichier /etc/shutdown.allow est présent. Il compare ensuite les noms de connexion de ce fichier avec la liste des personnes connectées sur une console virtuelle ...

Cela fonctionne sous Debian Linux. Et il y a une limite pour 32 noms d'utilisateur /etc/shutdown.allow.

Alexander Yancharuk
la source
4
Aucune option de ce type sur Fedora, CentOS ou RHEL.
fpmurphy
1
Cela ne fonctionne pas non plus pour Ubuntu, du moins c'est ce que j'obtiens de la documentation. Il serait utile de voir s'il s'agit d'une fonctionnalité Debian uniquement.
Raphael Ahrens
Toujours pas sous Ubuntu (18.04) en 2020 =}
tink