J'écris un script bash pour effectuer une sauvegarde quotidienne. Ce script s'exécutera automatiquement chaque matin (cron ou systemd).
Ce que j'aimerais accomplir, c'est
Le script bash que j'ai créé ressemble à ceci:
# Stop myservice
systemctl stop myservice.service
# Do all the backing up here...
# Start myservice
systemctl start myservice.service
Le problème que je rencontre est que lorsque je lance ce script, il requiert mon mot de passe lors des appels stop/start de systemctl. Si cela doit fonctionner automatiquement, il ne peut évidemment pas exiger un mot de passe à chaque fois. Comment exécuter ce script automatiquement sans avoir besoin de ce mot de passe?
Ubuntu 18.04
Merci!
Vous avez plusieurs possibilités, selon vos besoins et vos préférences.
… Serait d'exécuter le script entier en tant qu'utilisateur root
en l'ajoutant à root
name __ 's crontab
(en utilisant Sudo crontab -e
). Il n'aura pas besoin de mot de passe lors de l'exécution de systemctl stop/start myservice.service
. L'inconvénient est que vous devrez peut-être exécuter les tâches de sauvegarde en tant qu'un autre utilisateur (par exemple, noslenkwah
name__) et devoir basculer vers cet autre utilisateur pour la sauvegarde. Exemple:
# Stop myservice
systemctl stop myservice.service
# Do all the backing up here...
# ... and run the backup_command as user "otheruser":
Sudo -u noslenkwah /path/to/backup_command --with --some --options
# Start myservice
systemctl start myservice.service
… Serait d'ajouter les commandes systemctl
à un fichier du répertoire /etc/sudoers.d
afin qu'un utilisateur spécifique puisse les exécuter sans fournir de mot de passe.
issue Sudo visudo -f /etc/sudoers.d/noslenkwah
(Le nom de fichier, noslenkwah
n'a pas d'importance, il m'est simplement coutume de nommer les fichiers d'après l'utilisateur "principal" affecté par les paramètres de ce fichier. Il suffit que ce soit un fichier situé sous le répertoire /etc/sudoers.d
. )
Ajoutez les lignes suivantes et enregistrez le fichier.
Cmnd_Alias MYSERVICE = \
/bin/systemctl stop myservice.service, \
/bin/systemctl start myservice.service
noslenkwah ALL = (root) NOPASSWD: MYSERVICE
Cela permet à l'utilisateur noslenkwah
d'exécuter Sudo systemctl stop myservice.service
et Sudo systemctl start myservice.service
sans mot de passe. Il définit un socalled alias de commande (collection de commandes) nommé MYSERVICE
et autorise ensuite
noslenkwah
name__ALL
noms__root
name__MYSERVICE
name__Remplacez noslenkwah
et myservice
par le nom d'utilisateur et le nom de service réels. Notez que vous devez vraiment émettre Sudo systemctl start myservice.service
pour que cela fonctionne (et non pas Sudo systemctl start myservice
(sans .service
, par exemple).
Ne vous souciez pas de la partie "sur ALL
name__". Cela n’est pertinent que si vous avez l’intention de distribuer le même fichier sudoers
à plusieurs ordinateurs.
Vous devez alors changer votre script de sauvegarde pour
# Stop myservice
Sudo systemctl stop myservice.service
# Do all the backing up here...
/path/to/backup_command --with --some --options
# Start myservice
Sudo systemctl start myservice.service
et le faire fonctionner en tant qu'utilisateur noslenkwah
name__.
Exécutez ce script de shell en tant que root.
Par exemple, placez-le dans le répertoire racine: Sudo crontab -e