Comment exécuter une commande en tant qu'utilisateur différent d'un cronjob root?

il semble que je sois coincé entre une limitation NFS et une limitation Cron.

J'ai donc root cron (sur RHEL5) qui exécute un script shell qui, entre autres choses, a besoin de rsync quelques fichiers sur un montage NFS. Et les fichiers sur le Mont NFS sont la propriété de l'utilisateur apache avec le mode 700, donc seul l'utilisateur apache peut exécuter la commande rsync -- exécuter sous root génère une erreur de permission (NFS étant un cas rare, apparemment, où l'utilisateur root n'est pas tout-puissant?)

quand je veux juste exécuter le rsync à la main, je peux utiliser "sudo-u apache rsync ..."Mais sudo no workie in cron -- il est dit" sudo: Désolé, vous devez avoir un ATS pour exécuter sudo".

Je ne veux pas exécuter le script entier comme apache (i.e. à partir de la crontab d'apache) parce que d'autres parties du script nécessitent root -- c'est juste cette commande qui doit être exécutée comme apache. Et je préférerais vraiment ne pas changer le mode sur les fichiers, car cela impliquera des changements importants à d'autres applications.

il doit bien y avoir un moyen d'accomplir "sudo-u apache" de cron??

merci! rob

21
demandé sur rob 2009-08-25 20:57:04

5 réponses

su --shell=/bin/bash --session-command="/chemin/vers/commande -argument=quelque chose" nom d'utilisateur

Fonctionne pour moi (CentOS)

17
répondu Kitty 2011-02-18 03:42:18

utiliser su au lieu de sudo :

su -c "rsync ..." apache
7
répondu Jukka Matilainen 2009-08-25 17:00:53

par défaut sur RHEL, sudo n'est pas autorisé pour les processus sans terminal (tty). C'est écrit /etc/sudoers .

vous pouvez autoriser sans ATS sudo pour les utilisateurs particuliers avec ces instructions:

https://serverfault.com/questions/111064/sudoers-how-to-disable-requiretty-per-user

3
répondu Chris 2017-04-13 12:13:35

placez-le dans /etc/crontab et spécifiez apache au lieu de root dans le champ Utilisateur

1
répondu Robert Foreman 2010-03-27 00:36:43

si vous voulez vous permettre en permanence de jouer apache:

chsh apache

cela vous permet de changer le shell pour l'utilisateur

1
répondu Jaap 2012-10-26 13:54:53