Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 big_smile]

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

pipou24 a écrit :
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

manatlan a écrit :

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 hmm

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 big_smile :

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 :

man halt a écrit :

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.

man shutdown a écrit :

shutdown  does  its  job  by signalling the init process, asking it to change the runlevel.

man telinit a écrit :

/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 roll

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 smile

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 sad 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 smile. 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

Sorbus a écrit :

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é big_smile


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

pipou24 a écrit :

[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

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 tongue


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

pipou24 a écrit :

@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 sad


D.

Hors ligne