Lancer un script au démarrage, en root

Bonsoir,

J’ai un script à lancer au démarrage de mon PC Debian. Il se trouve dans /etc/init.d/.
Le problème, c’est qu’il n’est utile que s’il est lancé en root. Je sais que c’est déconseillé, mais j’ai des raisons bien à moi de faire cela. Comment le lancer automatiquement en root?

Merci.

C’est déconseillé sauf si vraiment tu en as besoin.
Il y a quelques regles théoriques a appliquer en sécurité. Une est le “principe du moindre privilege”. En gros, il ne faut donner que les droits minimum à l’execution d’une tache. Si cette tache dévie et que les droits donnés à la tache sont sans limite, alors les dégats sont sans limite.
Pour lancer des scripts, soit ce sont des scripts “rc” et il faut les appeler par “script start” alors c’est dans init.d. Si c’est un script général, tu peux les appeler en les mettant dans
/etc/rc.local. Ce dernier doit se terminer par “exit 0”

C’est déconseillé sauf si vraiment tu en as besoin.
Il y a quelques regles théoriques a appliquer en sécurité. Une est le “principe du moindre privilege”. En gros, il ne faut donner que les droits minimum à l’execution d’une tache. Si cette tache dévie et que les droits donnés à la tache sont sans limite, alors les dégats sont sans limite.[/quote]
J’en suis bien conscient.

[quote=“ignatioza”][quote]
Pour lancer des scripts, soit ce sont des scripts “rc” et il faut les appeler par “script start” alors c’est dans init.d. Si c’est un script général, tu peux les appeler en les mettant dans
/etc/rc.local. Ce dernier doit se terminer par “exit 0”[/quote][/quote]
Seront-ils lancés en root?

Merci.

J’espere que tu l’as pas pris mal, j’ai juste répeté un principe essentiel en sécurité histoire de comprendre le pourquoi du comment :slightly_smiling:

Oui il seront bien lancés en root.

Pas de souci. :slightly_smiling: J’ai essayé, mais ça ne fonctionne pas (la deuxième solution). Mon script, que j’appelle script, est dans /etc/init.d/. Je souhaite le lancer en root, au démarrage. Pour ce faire, j’édite /etc/rc.local, en ajoutant, à la ligne avant “exit 0”, la ligne

cd init.d && ./script

, où ./script lance le script script lorsque je suis dans le répertoire init.d en root.

Pourquoi cela ne fonctionne-t-il pas?

Merci.

Tu VEUX ou tu DOIS le mettre dans init.d?
init.d heberge les “scripts rc” qui se lance par
./script start
./script stop
etc…
Ils sont un peu spéciaux. Dans rc2.d tu as des liens Sscript ou Kscript pour démarrer (Start script) ou arreter (Kill script). Les liens pointent vers init.d

Non, ca marchera pas si le repertoire courant n’est pas /etc quand ton script sera executé. Et je ne vois pas pourquoi ce serait le cas.
Il faut mettre le chemin complet ou se trouve le script
/root/script &
exit 0

ou
/etc/init.d/script &
exit 0

[quote=“ignatioza”]Tu VEUX ou tu DOIS le mettre dans init.d?
init.d heberge les “scripts rc” qui se lance par
./script start
./script stop
etc…
Ils sont un peu spéciaux. Dans rc2.d tu as des liens Sscript ou Kscript pour démarrer (Start script) ou arreter (Kill script). Les liens pointent vers init.d
[/quote]
Ce n’est finalement pas nécessaire. Bien vu, j’avais oublié! Du coup, j’ai mis le script dans /root/.

[quote]cd init.d && ./script
Non, ca marchera pas si le repertoire courant n’est pas /etc quand ton script sera executé. Et je ne vois pas pourquoi ce serait le cas.
Il faut mettre le chemin complet ou se trouve le script
/root/script &
exit 0

ou
/etc/init.d/script &
exit 0[/quote]

J’ai donc maintenant écrit

/root/script & exit 0 , mais ça ne fonctionne toujours pas. Pourtant, quand je me mets en root, et que je tape /root/script &, ça lance mon script comme il faut. :frowning:

Normal?

Ca depend de ce dont ton script a besoin. C’est un script simple ou une application graphique?
Sans nous dire ce que c’est comme script, on peut pas trop aider…

En réalité, c’est un script lançant une application de calcul en grille (ça ne vous avance pas, je suppose), nommée BOINC. Que le GUI n’apparaisse pas n’est pas grave, mais je pense que le GUI lance également la version console de BOINC.

Je pourrais l’avoir installé autrement, BOINC, mais c’est la dernière version que je veux, et elle n’est pas encore disponible autrement qu’installable de la sorte. :frowning:

Merci.

Ah oui boinc j’en ai entendu parler.
On dirait qu’il y a quelquechose de fournit dans /etc/init.d
boinc.berkeley.edu/wiki/Stop_or_ … after_boot

Il n’enregistre pas un fichier de log? Peut-etre il y a des infos supplementaires, parceque là… :slightly_smiling:

Merci. Justement, je n’ai pas procédé à une vraie'' installation de boinc: il n'y a rien de vraiment installé, et j'exécute tout à partir d'un dossier. Le fichier script que je souhaite lancer au démarrage a comme rôle de lancer le daemon boinc, nomméboinc,’’ qui se situe dans ce dossier.

Et si tu ferme ton xwindow et que tu passe en console, le script marche toujours?

Oui.

Peut-etre une histoire de descripteurs alors, stdin, stdout, etc…

Je ne connais pas boinc, ca devient specifique à ce script. Il faudrait activer le logging
–verbose . As tu regardé le manpage? Dans le repertoire “man”?

Ou peut-etre t’inspirer de la methode de lancement pour la version debian?

Sinon tu peux aussi le faire lancer par ton xwindow… mais c’est sale :slightly_smiling:
Xwindow execute de la meme maniere ce fichier:
/home/user/.xinitrc

Mais lui va etre executé en tant qu’user. Donc il faut faire un sudo si tu le veux en root (ainsi que declarer ca dans sudoers). Ou mettre le bit Set-Uid sur le binaire.

C’est un peu compliqué tout ca… :mrgreen:

[quote=“ignatioza”]
Sinon tu peux aussi le faire lancer par ton xwindow… mais c’est sale :slightly_smiling:
Xwindow execute de la meme maniere ce fichier:
/home/user/.xinitrc

[…] Ou mettre le bit Set-Uid sur le binaire.[/quote]
Pourquoi pas. Mettre le bit set-uid sur le binaire? Huh? De toute façon, il faut qu’il soit lancé en root, sinon ça ne fonctionne pas (ce qui m’étonne d’ailleurs).

Sinon, c’est pas grave, c’est juste que c’est le deuxième PC sur lequel je dois, le matin, lorsque je l’allume, lancer une console, taper mon mot de passe, faire un cd (en me souvenant du répertoire où se trouve le script), vérifier si le script est bien lancé, puis enfin déjeuner!
Heureusement que je n’en ai pas >10!

Bonjour,
tu trouveras dans le répertoire des rc.d un fichier appelé squeleton. C’est en fait un modèle à utiliser pour ce genre de script.

Ensuite il ne faut pas oublier de faire un rc.update (de mémoire).

[quote=“piratebab”]Bonjour,
tu trouveras dans le répertoire des rc.d un fichier appelé squeleton. C’est en fait un modèle à utiliser pour ce genre de script.

Ensuite il ne faut pas oublier de faire un rc.update (de mémoire).[/quote]

Ok. Merci! :slightly_smiling: