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?

Brendon Dugan
la source

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)

johnshen64
la source
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

futbolsalas15
la source
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.
MikeyB
la source
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)

Iceman
la source