Outils pour utilisateurs

Outils du site


tech:scriptinitsysvroot

Ceci est une ancienne révision du document !


Doublon avec script_init_wrapper

Script initV

Description: Date: 2015/02/03 Tags: debian, gnu, script, service

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
#! /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
  • 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 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 :

chmod +x /etc/init.d/MACHINWrapper

Désactivation du démarrage de l’ancien script.

update-rc.d MACHINAgent remove

Activation du nouveau script

update-rc.d MACHINWrapper defaults

On vérifie :

find /etc/rc* -iname "*MACHIN*"

4) Fin

Arrêt process lancé en root

/etc/init.d/MACHINAgent stop

Ici l’utilisateur machin devient le nouveau propriétaires des fichiers

chown machin: /opt/machin/ -R

On démarre MACHINWrapper

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

pgrep -u machin nomDuProcess && echo OK || echo NOK
tech/scriptinitsysvroot.1742825205.txt.gz · Dernière modification : de 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki