#1 Le 25/05/2008, à 20:30
- Sorbus
arrêter proprement l'ordi en ligne de commande sans mot de passe
Bonsoir,
Je cherche la meilleure solution pour arrêter proprement l'ordinateur en ligne de commande sans mot de passe.
Il s'agit d'améliorer la documentation Ubuntu pour la sauvegarde de /home avec rsync, en particulier sur ce point.
Double question :
--> est-ce qu'il existe une commande plus propre que shutdown pour l'arrêt de l'ordinateur ?
(j'ai repéré à ce sujet cette discussion... lire la discussion à partir du 11ème message)...
--> quelle est la meilleure méthode pour lancer en ligne de commande l'arrêt de l'ordinateur sans que le mot de passe soit demandé ? Pour l'instant, la doc Ubuntu propose de modifier /etc/sudoers pour que le mot de passe ne soit pas demandé pour shutdown. Peut-on éviter de modifier /etc/sudoers ?
--> on (pipou24) me propose
a) pour gnome :
gnome-power-cmd.sh shutdown
ça marche... il n'y a pas besoin du mot de passe... et je suppose que c'est équivalent à
sudo shutdown -P now
quelqu'un peut confirmer ?
b) pour kde (/!\NON TESTE /!\) :
dcop --all-sessions --all-users ksmserver ksmserver logout 0 2 0
certains ont-ils ou peuvent-ils tester ? (perso, je suis sous gnome)
c) pour xfce :
aucune proposition... quelqu'un aurait-il la solution pour Xubuntu ?
Hors ligne
#2 Le 26/05/2008, à 10:31
- PhenX
Re : arrêter proprement l'ordi en ligne de commande sans mot de passe
à quoi sert le -P ?
Hors ligne
#3 Le 26/05/2008, à 11:09
- gralizem
Re : arrêter proprement l'ordi en ligne de commande sans mot de passe
salut Sorbus!
au lieu d'utiliser shutdown tu peut aussi utiliser halt qui fonctionne bien.
Hors ligne
#4 Le 26/05/2008, à 12:56
- Fake
Re : arrêter proprement l'ordi en ligne de commande sans mot de passe
à quoi sert le -P ?
Le -P est pour Poweroff, shutdown permet aussi de redémarer et de faire d'autres trucs.
Sinon pour les questions j'ai pas trop la réponse.
Hors ligne
#5 Le 26/05/2008, à 13:10
- Strash
Re : arrêter proprement l'ordi en ligne de commande sans mot de passe
D'après le script de gnome-power-cmd.sh, la commande
gnome-power-cmd.sh shutdown
fait en fait appel à dbus :
execute_dbus_method "Shutdown"
Je pense donc que c'est différent de
sudo shutdown -P now
puisque ça utilise sudo et donc un mot de passe...
Après je sais pas vraiment ce que fait dbus... un appel à GDM ? J'en sais rien en fait, avis aux experts
Hors ligne
#6 Le 26/05/2008, à 13:16
- pipou24
Re : arrêter proprement l'ordi en ligne de commande sans mot de passe
Bon, pour faire un peu avancer le sujet :
Il s'agit d'arreter l'ordi SANS mot de passe
sous gnome :
gnome-session-save --kill appelle la petite fenetre qui permet de se deconnecter, changer d'utilisateur, hiberner ... et arreter.
la pluspart de ses actions est declenchée par gnome-power-cmd.sh
a retrouver avec which gnome-power-cmd.sh, ce script est lisible et se retrouve dans /usr/bin (a vérifier, en ce moment, je suis sous windaube)
on peut visualiser ce que fait ce script, il ne fait qu'appeler une fonction de dbus. donc celle-ci devrait fonctionner sous xubuntu.
en revanche, si j'ai bien compris http://en.wikipedia.org/wiki/DCOP , kde3 utilise dcop et non dbus.
c'est un peu complexe a mettre en oeuvre, mais dans le script, on devrait detecter si le processus (demon) dbus fonctionne => 1ere methode, si c'est dcop => 2 eme méthode. Sinon : on ne fait rien parce qu'on ne connait pas.
Pour le lien que Sorbus a indiqué, c'est effectivement très interessant :
Quand un fichier est exécutable par son propriétaire, il peut de plus être setuid. Cela signifie que lorsqu'il est exécuté, il l'est avec les droits de son propriétaire, et non avec ceux de l'utilisateur qui le lance.
ce qui signifie qu'il faudrait créer (en tant que root) un simple script :
shutdown -P now
puis on lui donne les permissions 4755 c'est-à-dire : setuid, rwxr-xr-x
/!\ surtout pas 4775 ! ! ! /!\ *
lancer le script en tant que simple utilisateur, ca devrait fonctionner. Pour ma part, je ne peut pas tester tout de suite.
* : si l'utilisateur peut modifier le fichier, il peut executer n'importe quelle instruction en tant que root sans mot de passe !
[edit] @ strash : dbus est un processus lancé en root, donc, il execute certaines instructions (lesquelles ?) puis execute shutdown en tant que root, donc sans mdp. D'ailleurs, shutdown ne fait au final qu'appeler un init 0 !
[re-edit : aurtograf ]
Dernière modification par pipou24 (Le 26/05/2008, à 13:23)
Non geek et fier de l'être. ㋡
Hors ligne
#7 Le 26/05/2008, à 13:17
- manatlan
Re : arrêter proprement l'ordi en ligne de commande sans mot de passe
Suis pas sure, et ne réponds pas à la question (car ça utilise sudo), mais je me demande si ça, ce n'est pas ce qu'il y aurait de mieux :
sudo init 0
avis des spécialistes ?
"Oui, oui."
-- Shakespeare (Richard III, Acte I, Scène IV)
Hors ligne
#8 Le 26/05/2008, à 16:27
- Dud
Re : arrêter proprement l'ordi en ligne de commande sans mot de passe
shutdown -P now
puis on lui donne les permissions 4755 c'est-à-dire : setuid, rwxr-xr-x
/!\ surtout pas 4775 ! ! ! /!\ *lancer le script en tant que simple utilisateur, ca devrait fonctionner. Pour ma part, je ne peut pas tester tout de suite.
* : si l'utilisateur peut modifier le fichier, il peut executer n'importe quelle instruction en tant que root sans mot de passe !
Oui ça marche très bien. Le droit setuid est manifesté par un "s" : rwsr-xr-x
Le fichier shutdown est un executable donc normalement ça n'amène pas de pb de sécurité si l'on laisse ou non les droits d'écriture pour les autres.
Hors ligne
#9 Le 26/05/2008, à 16:30
- Dud
Re : arrêter proprement l'ordi en ligne de commande sans mot de passe
Suis pas sure, et ne réponds pas à la question (car ça utilise sudo), mais je me demande si ça, ce n'est pas ce qu'il y aurait de mieux :
sudo init 0
avis des spécialistes ?
Je ne sais pas trop non plus... mon prof nous a aussi dit que shutdown et halt ce n'était pas bien et qu'il vallait mieux changer le runlevel en 0. Moi j'utilise tjrs halt (je lui ai mis le setuid à 1) et je n'ai jamais eu aucun problème.
Pour changer de runlevel la bonne commande à utiliser est telinit.
Hors ligne
#10 Le 26/05/2008, à 19:10
- Yannick_LM
Re : arrêter proprement l'ordi en ligne de commande sans mot de passe
Personnellement, j'ai ça dans mon /etc/sudoers
à éditer avec sudo visudo , et pas une autre commande !
(par défaut, ce sera avec nano, donc, pas d'affollement)
%users localhost=NOPASSWD: /sbin/halt
%users localhost=NOPASSWD: /sbin/reboot
Et une configuration dans fluxbox qui lance un script du genre :
xmessage -buttons yes,no -default yes "Really halt ?" ; [ $? -eq 101 ] && sudo /sbin/halt
Je n'utilise pas dbus.
Je donne ça :
1. Pour les gens qui n'aiment ni dbus ni dcop.
2. Pour montrer qu'on peut faire plein de choses bien avec sudo
3. Pour avoir l'avis d'un expert, s'il en passe un par là.
Trucs et astuces pour Vim
Ma web page avec des trucs dessus ...
Hors ligne
#11 Le 26/05/2008, à 19:23
- Sorbus
Re : arrêter proprement l'ordi en ligne de commande sans mot de passe
Salut à tous,
Je vois que la discussion avance, et qu'on devrait trouver plusieurs solutions... J'essaye de tester quelques trucs...
[Edit :
@PhenX
à quoi sert le -P ?
Je vois que sur le script de sauvegarde de mon fixe, j'ai utilisé la commande :
sudo shutdown -h now
et non pas
sudo shutdown -P now
A la première lecture du manuel de shutdown en français, l'option -h semble meilleure.
http://manpagesfr.free.fr/man/man8/shutdown.8.html
-h : Arrêter la machine après l'arrêt du système.
-P : Éteindre l'alimentation.
Mais le man en anglais, plus à jour, dit ceci :
-h Requests that the system be either halted or powered off after it has been brought down, with the choice as to which left up to the system.
-P Requests that the system be powered off after it has been brought down.
J'ai du mal à traduire :
-h Demande que le système soit stoppé (arrêté) ou mis hors tension après qu'il ait été "brought down", avec le choix (... ?)
-P Demande que le système soit mis hors tension après qu'il ait été "brought down"
Bref, je ne pige pas bien la différence entre les options -h et -P... mais elles commandent toutes les deux l'arrêt du système.
@gralizem
D'après ce que j'ai lu, notamment dans le lien donné dans mon premier message :
halt = shutdown -h now
halt serait juste un raccourci pour shutdown -h now
(et reboot doit être un raccourci pour shutdown -r now)
Et il faut faire
sudo halt
C'est donc la même question que pour shutdown.
@Yannick_LM
Ta proposition semble donc équivalente à celle donnée dans la doc :
modification du fichier /etc/sudoers via sudo visudo
pour halt et reboot.
Petit avantage peut-être : ça réduit à deux les options de shutdown accessibles sans mot de passe : -h et -r.
Restent à creuser les pistes init 0, dbus et dcop... et celle du script "shutdown -P now" lancé en tant que simple utilisateur... j'ai pas trop compris
Merci pipou pour la précision concernant Xubuntu].
@+
Dernière modification par Sorbus (Le 26/05/2008, à 20:17)
Hors ligne
#12 Le 26/05/2008, à 21:32
- pipou24
Re : arrêter proprement l'ordi en ligne de commande sans mot de passe
@ Dud :
bon, j'ai fait le test suivant pour comprendre le setuid .... et j'y comprend rien :
sudo mkdir /rep_test
cd /rep_test
sudo nano test.sh
sudo chmod 4755 test.sh
le script en question ne contient que :
touch /rep_test/test_reussi
ls -l donne :
-rwsr-xr-x 1 root root 44 May 27 02:24 test.sh
donc le setuid est bon et le fichier appartient bien a root mais :
./test.sh
touch: cannot touch `/rep_test/test_reussi': Permission denied
Non geek et fier de l'être. ㋡
Hors ligne
#13 Le 26/05/2008, à 21:59
- Dud
Re : arrêter proprement l'ordi en ligne de commande sans mot de passe
Oui en effet...:D
Dans les noyaux Linux récents, le système n'honore plus le setuid pour les scripts. En effet, d'après ce que j'ai entendu cela posait trop de problèmes de sécurité. Mais par contre ce bit est tjrs pris en compte pour les executables.
Essaies voir de compiler un programme C avec le setuid activé et qui contient :
system("touch toto");
Hors ligne
#14 Le 27/05/2008, à 07:36
- manatlan
Re : arrêter proprement l'ordi en ligne de commande sans mot de passe
en tous les cas : "sudo telinit 0" coupe bel et bien la machine
"Oui, oui."
-- Shakespeare (Richard III, Acte I, Scène IV)
Hors ligne
#15 Le 27/05/2008, à 18:37
- Sorbus
Re : arrêter proprement l'ordi en ligne de commande sans mot de passe
"sudo telinit 0" coupe bel et bien la machine.
Exact... Et si on comprends bien, c'est une méthode d'arrêt de la machine au moins aussi bonne, sinon meilleure, que shutdown -h now (ou halt).
Mais il faut aussi sudo, et donc le mot de passe.
pipou24 et Dud, merci pour les essais et l'explication. J'avais fait hier soir un test similaire au tien pipou, avec le même résultat... et je croyais avoir fait les choses de travers. Tout devient maintenant plus clair.
En tenant compte de l'apport de manatlan, quitte à compiler un programme en C, ne vaudrait-il pas mieux le faire pour exécuter "telinit 0" (plutôt que pour halt ou shutdown) ?
L'un de vous saurait-il faire ça, ou bien faut-il demander de l'aide sur le forum "Développement-Programmation" ?
Dernière modification par Sorbus (Le 27/05/2008, à 18:41)
Hors ligne
#16 Le 27/05/2008, à 20:36
- Yannick_LM
Re : arrêter proprement l'ordi en ligne de commande sans mot de passe
Mais il faut aussi sudo, et donc le mot de passe.
Ben non, justement.
Tu peux configurer sudo pour qu'il ne demande pas le mot de passe.
(il faudra toujours faire sudo <laCommande>, mais le mot de passe ne sera pas demandé)
http://doc.ubuntu-fr.org/sudo#options
Sinon :
If halt or reboot is called when the system is not in runlevel 0 or 6,
in other words when it's running normally, shutdown will be invoked
instead (with the -h or -r flag). For more info see the shutdown(8)
manpage.
shutdown does its job by signalling the init process, asking it to change the runlevel.
/sbin/telinit is linked to /sbin/init. It takes a one-character argument and signals init to perform the appropriate action. The following arguments serve as directives to telinit:
0,1,2,3,4,5 or 6
tell init to switch to the specified run level.
Donc, AMHA, ça doit grosso modo revenir au même
Dernière modification par Yannick_LM (Le 27/05/2008, à 20:38)
Trucs et astuces pour Vim
Ma web page avec des trucs dessus ...
Hors ligne
#17 Le 27/05/2008, à 22:30
- Sorbus
Re : arrêter proprement l'ordi en ligne de commande sans mot de passe
Ben non, justement.
Tu peux configurer sudo pour qu'il ne demande pas le mot de passe.
Ben ça, je le sais Yannick_LM. Relis le message par lequel j'ai ouvert ce fil
Pour donner quelques explications supplémentaires sur ce qui motive mes questions : certains pensent qu'il est prudent, pour des raisons de sécurité, de ne pas trop modifier /etc/sudoers, et surtout de ne pas multiplier le nombre de commandes dispensées du mot de passe. On pourrait craindre aussi que des débutants fassent quelques erreurs lors de la modification de /etc/sudoers. Enfin, il y a actuellement un bug sous Hardy qui pose problème à certains.
On peut contourner le bug en éditant /etc/sudoers par "nano"... Mais ça complique aussi les choses pour des débutants.
Je cherche donc une solution alternative à la modification de /etc/sudoers pour permettre l'arrêt du PC sans mot de passe.
J'en profitais pour vérifier à cette occasion s'il n'y avait pas une méthode encore meilleure que "sudo shutdown -h now" pour arrêter proprement le PC. Sur ce point, merci pour le comparatif "man" que tu proposes... Les trois méthodes "halt", "shutdown" et "telinit" seraient donc équivalentes... et bonnes
En est-il de même pour :
a) pour gnome et xfce
gnome-power-cmd.sh shutdown
b) pour kde (/!\NON TESTE /!\) :
dcop --all-sessions --all-users ksmserver ksmserver logout 0 2 0
???
De fait, j'ai testé :
gnome-power-cmd.sh shutdown
sous gnome.
Cela arrête bien le PC sans mot de passe. C'est donc bien une alternative à la modification de /etc/sudoers.
Mais est-ce une aussi bonne méthode d'arrêt que "halt/shutdown/telinit" ?
Hors ligne
#18 Le 28/05/2008, à 11:01
- stephaneguedon
Re : arrêter proprement l'ordi en ligne de commande sans mot de passe
Moi, je veux faire le contraire : Qu'il me demande toujours le mot de passe.
Quand on se loggue en ligne de commande, il nous demande le mot de passe une première fois (pour le login), puis une autre fois (prise des droits d'administration), puis, plus rien pendant x temps (je ne sais pas ce temps, mais là n'est pas la question).
mon site web :
http://www.22decembre.eu/
Hors ligne
#19 Le 28/05/2008, à 11:35
- pipou24
Re : arrêter proprement l'ordi en ligne de commande sans mot de passe
a ta derniere question, je repondrait sans hésiter oui !
c'est meme la méthode la plus "propre" puisqu'elle correspond a l'action du clic sur le bouton.
cette action appelle la methode dbus qui doit certainement effectuer certaines actions du gestionnaires de bureau avant de lancer 'telinit 0' qui lui arrete (G,K, X,Slim)DM.
En contrepartie, la seconde méthode (chmod 4755 /sbin/shutdown) est plus universelle, elle fonctionnera quelquesoit l'environnement de bureau, et meme certainement sur *BSD, OpenSolaris ...
pour KDE : http://forum.ubuntu-fr.org/viewtopic.php?id=160174 et http://wiki.kde.org/tiki-index.php?page=Tips%20and%20Tricks&pagenum=9
j'aurais vraiment souhaité que quelqu'un utilisant KDE nous confirme ca ... le terme logout me fait penser que ca termine juste la session, et non que cela eteind le PC.
[edit 1] le post de misaine ici semble le confirmer : http://forum.ubuntu-fr.org/viewtopic.php?pid=862143#p862143
de plus, a partir de KDE 4, cela fonctionnera avec dbus : http://forum.ubuntu-fr.org/viewtopic.php?id=180705
[edit 2 @ stepahneguedon] : s'il ne te redemande pas le mot de passe, c'est parceque sudo "dure" 15 min : http://doc.ubuntu-fr.org/sudo#sudo
si tu veut modifier ce comportement :
timestamp_timeout
Number of minutes that can elapse before sudo will ask for a passwd again. The default is 5. Set this to 0 to always prompt for a password. If set to a value less than 0 the user's timestamp will never expire. This can be used to allow users to create or delete their own timestamps via sudo -v and sudo -k respectively.
voir ici : http://www.courtesan.com/sudo/man/sudoers.html
Dernière modification par pipou24 (Le 28/05/2008, à 14:22)
Non geek et fier de l'être. ㋡
Hors ligne
#20 Le 28/05/2008, à 15:20
- Sorbus
Re : arrêter proprement l'ordi en ligne de commande sans mot de passe
c'est meme la méthode la plus "propre" puisqu'elle correspond a l'action du clic sur le bouton.
De fait, tu as raison... c'est une très bonne méthode. Et elle répond bien à ma question initiale. Je me souviens avoir vainement cherché la commande correspondant à l'action du clic sur le bouton, à l'époque où j'avais travaillé sur les méthodes de sauvegarde avec rsync. Je ne sais pas comment as trouvé cette commande... Mais c'est super . J'ai vérifié sous Xubuntu, et c'est bon, comme tu l'avais indiqué.
Il ne manque donc plus que le test de la méthode équivalente pour Kubuntu. Dès qu'elle est trouvée, je modifie la doc rsync avec ces éléments nouveaux.
Hors ligne
#21 Le 28/05/2008, à 15:22
- environ314
Re : arrêter proprement l'ordi en ligne de commande sans mot de passe
De fait, j'ai testé :
gnome-power-cmd.sh shutdown
sous gnome.
Cela arrête bien le PC sans mot de passe. C'est donc bien une alternative à la modification de /etc/sudoers.
Mais est-ce une aussi bonne méthode d'arrêt que "halt/shutdown/telinit" ?
ca marche aussi chez moi, mais pas lorsque la commande est lancée dans un script par un cron quand je ne suis pas connecté.
Sauriez-vous éteindre l'ordinateur par une commande dans un script même si je ne suis pas loggé ?
Hors ligne
#22 Le 28/05/2008, à 16:48
- pipou24
Re : arrêter proprement l'ordi en ligne de commande sans mot de passe
pour E17, la commande :
dbus-send --session --dest=org.freedesktop.PowerManagement --type=method_call --print-reply --reply-timeout=2000 /org/freedesktop/PowerManagement org.freedesktop.PowerManagement.Shutdown
fonctionne aussi si gnome-power-manager est lancé
sinon enlightenment_remote -shutdow doit fonctionner sans gnome-power-manager
mais ... ca me donne la fenetre de confirmation...
par contre, je ne sais pas comment identifier le type de bureau actif. il semble que cela correspond aux tests du script etc/acpi/powerbtn.sh mais je ne les comprend pas tres bien...
a suivre
Non geek et fier de l'être. ㋡
Hors ligne
#23 Le 28/05/2008, à 17:08
- stephaneguedon
Re : arrêter proprement l'ordi en ligne de commande sans mot de passe
[edit 2 @ stepahneguedon] : s'il ne te redemande pas le mot de passe, c'est parceque sudo "dure" 15 min : http://doc.ubuntu-fr.org/sudo#sudo
si tu veut modifier ce comportement :
timestamp_timeoutNumber of minutes that can elapse before sudo will ask for a passwd again. The default is 5. Set this to 0 to always prompt for a password. If set to a value less than 0 the user's timestamp will never expire. This can be used to allow users to create or delete their own timestamps via sudo -v and sudo -k respectively.
voir ici : http://www.courtesan.com/sudo/man/sudoers.html
Pas d'autre moyen que de modifier le timstamp de sudo ?
mon site web :
http://www.22decembre.eu/
Hors ligne
#24 Le 28/05/2008, à 21:29
- pipou24
Re : arrêter proprement l'ordi en ligne de commande sans mot de passe
@environ314 : ca me parait normal, la commande se lance depuis un compte connecté a GDM.
@stephaneguedon : ben, non, je ne pense pas qu'il y a un autre moyen de modifier le timestamp qu'en modifiant le timestamp
Non geek et fier de l'être. ㋡
Hors ligne
#25 Le 28/05/2008, à 21:35
- environ314
Re : arrêter proprement l'ordi en ligne de commande sans mot de passe
@environ314 : ca me parait normal, la commande se lance depuis un compte connecté a GDM.
Content de savoir que c'est normal. On ne peut pas l'éteindre, alors, si personne n'est loggé ?? parce que mon script, bien qu'il soit attaché à mon utilisateur, lui, il se lance quand même. Mais s'il ne fait pas ce que je lui demande, ca ne me sert pas à grand chose
D.
Hors ligne