Script BASH, sous www-data pour une seule commande


26

Je travaille sur l'automatisation de la création de référentiels de subversion et de sites Web associés comme décrit dans ce billet de blog que j'ai écrit . Je rencontre des problèmes tout autour de la partie où je demande à l'utilisateur www-data d'exécuter la commande suivante:

svnadmin create /svn/repository

Il y a une vérification au début du script qui s'assure qu'il s'exécute en tant que root ou sudo, et tout après cette commande doit être exécuté en tant que root. Existe-t-il un bon moyen d'exécuter cette commande en tant que www-data, puis de revenir à la racine pour terminer?

Réponses:


24

Utilisez simplement su - www-data -c 'svnadmin create /svn/repository'dans votre script exécuté par root. Pour que seule cette commande soit exécutée par l'utilisateur www-data.


Mise à jour pour les futurs téléspectateurs :

Si vous recevez une "This account is currently not available"erreur, pensez à utiliser:

su - www-data -s /bin/bash -c 'svnadmin create /svn/repository'

(La précieuse mention de @Petr sur le -sdrapeau pour s'adapter à www-datala politique de non-connexion de l'utilisateur)


1
Oui, il semble que j'ai oublié une règle de base de script ... RTFM. Merci!
Brendon Dugan

15
En essayant cela, j'obtiens l'erreurThis account is currently not available.
rubo77

J'ai également cette erreur, mais la réponse de futbolsalas15 ci-dessous fonctionne très bien.
Andrew

18
Utilisez su - www-data -s /bin/bash -c 'your_command'pour faire ce travail. L'utilisateur www-data a un shell /usr/sbin/nologindonc sans le -sparamètre il conduit au message d'erreur.
Petr

63

Avec 'su' est probablement cette demande de mot de passe, et www-data n'a pas de mot de passe. Je recommande la commande sudo:

 sudo -u www-data command

La condition est que votre utilisateur doit être root ou configuré dans le fichier sudoers


4
Wow, pourquoi n'est-ce pas la réponse choisie? Ça m'a pris trop de temps pour trouver ça.
Captain Hypertext

3

Utilisation su:

   su [options] [username]

   The options which apply to the su command are:

   -c, --command COMMAND
       Specify a command that will be invoked by the shell using its -c.

2
Il convient de noter que les commandes su ne fonctionnent pas avec les comptes dont les connexions sont désactivées (telles que www-data). Vous devrez utiliser sudo.
Frantumn

2

2 Approches possibles :


1) sudocommande:

Dans la plupart des cas, vous aurez accès à la sudocommande et la solution est donc simplement:

sudo -u target_user target_command


2) sucommande (si sudo n'est pas installé Ex. alpine-linux images):

su - target_user -c 'target_command'

Dans le cas où vous recevez une erreur «Ce compte n'est actuellement pas disponible» , l'utilisateur a une politique de non-connexion (accès shell) en vigueur. Si oui, envisagez d'utiliser:

su - target_user -s /bin/bash -c 'target_command'

(Basé sur le précieux commentaire de @Petr sur l' -sindicateur pour s'adapter à www-datala politique de non-connexion de l'utilisateur)

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.