Aller au contenu

Planificateur / Crontab En Root Uniquement ?


Messages recommandés

Bonjour,

Je suis tombé sur un problème assez gênant sur un DS713 avec le dernier DSM en date, ipkg fonctionnel.

Je cherche à programmer une tâche (script bash établissant une connexion ssh vers serveur distant via echange de clef, pour effectuer certaines taches sur ce serveur distant ) via le planificateur en précisant bien le USER concerné (qui est dans le groupe administrateur) .

Je me suis rendu compte que ma connexion était refusée suite à un problème de clef (alors que si je teste le contenu en ssh via le compte USER concerné depuis le SYNO, tout fonctionne parfaitement) ...

J'ai ajouté la commande "id" dans mon script pour vérifier quel était le USER qui était utilisé pour le lancement de la tâche... et au lieu de voir mon USER, je vois la mention "root"

J'ai édité le crontab, et effectivement, ce n'était pas le USER spécifié dans le planificateur mais le root. J'ai remplacé "root" par le USER en question, stoppé et relancé le cron avec les commandes dédiées... mais le problème subsiste.

Donc, dans mon cas, spécifier un USER spécifique dans le planificateur ou dans le crontab ne sert à rien : le root prend toujours la main.

Une solution rapide serait de créer des clefs SSH pour le root et d'apairer mon serveur distant, mais cela me plait moins que de comprendre l'origine du problème, et de le corriger :)

Si quelqu'un a une solution, une piste, je suis preneur :)

Lien vers le commentaire
Partager sur d’autres sites

Les scripts définis par le planificateur de tache pour un autre utilisateur que "root" sont exécutés en mode suid/sgid (je viens de le découvrir moi aussi)

Tu n'a pas fait gaffe mais dans le résultat de ta commande "id", alors que uid vaut bien "root", la présence de "euid" correspondant au compte utilisateur effectif (et egid pour le groupe principal)

Un petit test me montre en outre que la variable HOME n'est pas présente dans l'environnement du job

Peut être que l'erreur vient en partie de là.

Tu peux essayer d'indiquer explicitement le chemin de ta clé privé en argument de la commande ssh (ssh -i <chemin de la clé)

Mais surtout, je préconise de mettre en début de ton script un truc du genre de:

if [ "$HOME" = "" ] ; then
    HOME=~<mettre_le_user_ici>
    export HOME
fi

Car l'absence de HOME ne peut que provoquer d'autre effets biens velus à débugger.

Lien vers le commentaire
Partager sur d’autres sites

de retour :)

voici la sortie de la commande id que j'avais mise dans mon script :

uid=0(root) gid=0(root) groups=100(users),101(administrators)

C'est tres surprenant

Voici ce que ca donne pour moi:

uid=0(root) gid=0(root) euid=1032(clampin) egid=100(users) groups=100(users),65540(localusers),65541(people),65553(photo_r)

Vu que tu utilises bash, peut-être qu'il intègre une commande "id" en builtin avec un comportement différent.

Essaie de forcer la commade "id" externe (en mettant explicitement le path complet: /usr/bin/id)

Autre piste (me semble plus probable): j'ai mis ma commande "id" directement dans le champ "script défini par l'utilisateur" de déclaration de tache. Fort possible que l'appel d'un script externe (et donc un sous-shell) fasse perdre le contexte suid.

Modifié par CoolRaoul
Lien vers le commentaire
Partager sur d’autres sites

En revanche, dans mon script,

/usr/bin/id >> $FICHIER
echo "*******" >> $FICHIER
id >> $FICHIER
donne la même chose quand je "force" l'exécution du script via le DSM loggé avec le user en question et le script prévu pour être lancé avec cet utilisateur ...

sortie :

uid=0(root) gid=0(root) groups=100(users),101(administrators)
*******
uid=0(root) gid=0(root) groups=100(users),101(administrators)

​Je vais donc tester la spécification du chemin de la clef dès que je pourrai (le syno n'est pas très waf :) )

Lien vers le commentaire
Partager sur d’autres sites

Il faut donc retenir de tes expériences que, dans le cas d'une tache pour un compte "non root", seule les commandes saisies dans le formulaire vont effectivement s'exécuter pour le compte utilisateur donné en mode "suid".
Tout script externe sera exécuté en tant que root.

Dans ce contexte, peut-être vaut-il-mieux finalement affecter la tache au compte root et invoquer le script ainsi:

/bin/su -s /bin/ash -c "<chemin_complet_du_script>" - <compte_cible>

Ca sera plus propre. (attention a ce que le script soit lisible et exécutable par le compte cible)

Lien vers le commentaire
Partager sur d’autres sites

Merci pour ces précisions... je me rends compte que je suis un peu léger sur certaines commandes / notions de droits ...

Oh tu sais, on en apprend tout le temps!

Par exemple, la façon "shadok" dont le planificateur de tache lance des jobs non root je l'ai découvert grâce à toi.

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.