Outils pour utilisateurs

Outils du site


tech:scriptinitsysvroot

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
tech:scriptinitsysvroot [2025/04/26 11:24] Jean-Baptistetech:scriptinitsysvroot [2026/07/16 15:22] (Version actuelle) Jean-Baptiste
Ligne 1: Ligne 1:
 +<!DOCTYPE markdown>
 +{{tag>Bash Script Service}}
 +
 +
 +
 +
 +# Script initV
 +
 +FIXME : Doublon avec [[script_init_wrapper]] 
 +
 +
 +Aujourd'hui au boulot : install d'un logiciel privateur sur une Debian.
 +Cette solution install un script dans /etc/init.d/ Je vais l'appeler ici **MACHINAgent**
 +
 +J'ai donc mon beau script /etc/init.d/MACHINAgent
 +
 +Le pb c'est qu'il démarre le processus avec les privilèges root
 +
 +Une solution serait d'utiliser crontab sous un compte utilisateur.
 +~~~
 +@reboot /etc/init.d/MACHINAgent start
 +~~~
 +
 +Je crée un utilisateur système. Mais la crontab, ce n'est pas une bonne idée :
 +* Il ne ferme pas l'appli correctement
 +* Logiquement tous les scripts /etc/init.d/ doivent pouvoir être lancer en root et lancer les process avec un compte dedié.
 +
 +Lancement du serveur MACHIN sous un compte utilisateur (non-root) sous Debian.
 +
 + 
 +
 +## 1) Création d’un nouvel utilisateur dédie au serveur MACHIN.
 +
 +Dans notre exemple il s’agit de « machin »
 +
 + 
 +
 +## 2) Création du script 
 +
 +
 +`/etc/init.d/MACHINWrapper`
 +~~~bash
 +#! /bin/bash
 +# chkconfig: 35 85 15
 +# description: Startup script for MACHIN Agent Wrapper
 +### BEGIN INIT INFO
 +# Provides:          MACHINWrapper
 +# Required-Start:    $network $local_fs $remote_fs $time $syslog
 +# Required-Stop:     $network $local_fs $remote_fs $time $syslog
 +# Default-Start:     2 3 4 5
 +# Default-Stop:      0 1 6
 +# Short-Description: Wrapper pour lancer les scripts sysVinit avec un compte utilisateur (non root)
 +# Description:       Wrapper pour lancer les scripts sysVinit avec un compte utilisateur (non root)
 +### END INIT INFO
 +MACHIN_USER=machin
 +MACHIN_INITSCRIPT=/etc/init.d/MACHINAgent
 +su - $MACHIN_USER -c "$MACHIN_INITSCRIPT $*"
 +~~~
 +
 +
 +### Explications
 +
 +Les commentaires servent !
 +
 +* Ligne 1 : c'est le [Shebang](https://fr.wikipedia.org/wiki/Shebang)
 +* Ligne 2 : **chkconfig** sert pour Redhat/CentOS
 +* Ligne 3 : **description** sert aussi pour chkconfig !?
 +* Ligne 4 à 12 : C'est la même chose que chkconfig, mais pour la plupart des distros. C'est une norme [LSB](https://fr.wikipedia.org/wiki/Linux_Standard_Base) Voir <https://wiki.debian.org/LSBInitScripts>
 +* Ligne 13 à FIN : C'est le code.
 +* Ligne 13 : Variable **MACHIN_USER** qui contient le nom du compte dédié au service.
 +* Ligne 14 : Variable **MACHIN_INITSCRIPT** qui contient le chemin complet de l'ancien script que nous avons déplacé
 +* Ligne 15 FIN: On utilise la commande **su** pour changer de compte. Puis $* représente tous les arguments. Dans le cas d'un script init : start, stop, status, restart et éventuellement d'autres.
 +
 +Voir http://www.vincentliefooghe.net/content/chkconfig-activer-les-services-au-d%C3%A9marrage-sous-redhat-centos
 +
 +Note :  Les commentaires du scripts sont nécessaire. Voir https://wiki.debian.org/LSBInitScripts http://linux.die.net/man/8/chkconfig
 +
 +
 +## 3) Gestion des services
 +
 +Placer les droits d’exec :
 +
 +~~~bash
 +chmod +x /etc/init.d/MACHINWrapper
 +~~~
 +
 +
 +Désactivation du démarrage de l’ancien script.
 +
 +~~~bash
 +update-rc.d MACHINAgent remove
 +~~~
 +
 + 
 +
 +Activation du nouveau script
 +
 +~~~bash
 +update-rc.d MACHINWrapper defaults
 +~~~
 +
 + 
 +
 +On vérifie :
 +~~~bash
 +find /etc/rc* -iname "*MACHIN*"
 +~~~
 +
 + 
 +
 +## 4) Fin
 +
 +Arrêt process lancé en root
 +
 +~~~bash
 +/etc/init.d/MACHINAgent stop
 +~~~
 +
 + 
 +
 +Ici l’utilisateur **machin** devient le nouveau propriétaires des fichiers
 +
 +~~~bash
 +chown machin: /opt/machin/ -R
 +~~~
 +
 + 
 +
 +On démarre MACHINWrapper
 +
 +~~~bash
 +/etc/init.d/MACHINWrapper start
 +~~~
 +
 + 
 +
 +## En cas de Pb :
 +
 +Refaire point 3 et 4.
 +Idem si application patch.
 +
 + 
 +## Notes
 +NB : il convient dans la supervision de s’assurer que le process tourne sous le bon compte.
 +
 +Exemple :
 +
 +~~~bash
 +pgrep -u machin nomDuProcess && echo OK || echo NOK
 +~~~
  

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki