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.


Publiez votre script d'init?
quanta

Avez-vous des journaux?
Dom

Pourquoi ne l'utilisez-vous pas simplement sudans le script rc?
mat

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.


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


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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.