Exécuter le script depuis rc.local en tant qu'utilisateur au lieu de root

26

Je veux exécuter un script à chaque démarrage de mon serveur. Le problème est que je dois être un certain utilisateur pour exécuter le script, si j'essaie de le faire en tant que root, il ne peut pas trouver certains packages (tels que ruby).

J'essaie de passer à xxx user01.

sudo su user01
/etc/init.d/script start

Cela ne fonctionne pas cependant.

Philippe
la source
Publiez votre script d'init?
quanta
Avez-vous des journaux?
Dom
Pourquoi ne l'utilisez-vous pas simplement sudans le script rc?
mat
Voir stackoverflow.com/questions/8940771/… .
Ferdinand Prantl

Réponses:

30

L'exécution sudo su user01dans un script ne signifie pas que les commandes suivantes sont envoyées au shell résultant. En fait, cela signifie probablement qu'un nouveau shell est généré en tant qu'utilisateur01, qui ne se ferme jamais!

Deux choses:

  • Vous pouvez exécuter une commande en tant qu'autre utilisateur en passant l' -c 'command...'argument à su, comme su user01 -c '/etc/init.d/script start'.
  • Démarrer un service qui utilise /etc/init.d à partir de rc.local n'est pas la bonne chose à faire. Vous souhaitez utiliser activer le service au démarrage à l'aide de vos outils de distribution, comme chkconfigou update-rc.d. Vous ne voulez pas non plus que les travaux dans /etc/init.d ne soient pas démarrés en tant que root. Les tâches elles-mêmes peuvent se sentir libres de se bifurquer vers un autre compte utilisateur, mais doivent être appelées par root.
Kyle Smith
la source
8

Vous pouvez mettre quelque chose /etc/crontabet le faire fonctionner@reboot

@reboot username /etc/init.d/script start
user9517 prend en charge GoFundMonica
la source
2
ou dans le propre fichier crontab de l'utilisateur.
Jake
4

Vous pouvez simplement exécuter la commande via sudo comme ceci:

sudo -H -u user01 /etc/init.d/script start

-H définit la variable d'environnement HOME sur celle de l'utilisateur

-u spécifie le nom d'utilisateur à exécuter en tant que

joetek
la source
0

Vous ne pouvez sûrement pas exécuter ce script avec sudo à cause de requireetty (impose que les utilisateurs doivent être connectés) dans sudoers. Vous voudrez peut-être désactiver, ce qui est quelque peu risqué

Il existe également un outil un peu ancien appelé runsuid: http://freecode.com/projects/runsuid

HTH

sebelk
la source