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
5 réponses
su --shell=/bin/bash --session-command="/chemin/vers/commande -argument=quelque chose" nom d'utilisateur
Fonctionne pour moi (CentOS)
utiliser su
au lieu de sudo
:
su -c "rsync ..." apache
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
placez-le dans /etc/crontab et spécifiez apache au lieu de root dans le champ Utilisateur
si vous voulez vous permettre en permanence de jouer apache:
chsh apache
cela vous permet de changer le shell pour l'utilisateur