web-dev-qa-db-fra.com

Impossible d'exécuter la commande en tant que www-data à l'aide de su

# su -l www-data ./http-app.py
This account is currently not available.
# su -l www-data -c ./http-app.py
This account is currently not available.
# su -c ./http-app.py www-data 
This account is currently not available.
# su -lc ./http-app.py www-data 
This account is currently not available.
# getent passwd www-data 
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
# getent shadow www-data 
www-data:*:16842:0:99999:7:::
# lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 8.6 (jessie)
Release:        8.6
Codename:       jessie

Quel est le problème avec mon su ou www-data? Ça fonctionnait ...

Vraisemblablement, c'est à cause du /usr/sbin/nologin, mais comment puis-je supprimer root pour ce seul script, sans compromettre les autres services du système (nologin a été choisi par l'équipe de Debian pour une bonne raison, je envie de croire)?

15
NarūnasK

Sans débattre de su contre Sudo, vous pouvez essayer d'ajouter -s /bin/sh à votre ligne de commande. (Je n'ai pas pu vérifier que cette option est disponible pour Jessie car le serveur Web des pages de manuel Debian ne fonctionne pas: https://manpages.debian.org/ )

21
Mark Wagner

Vous utilisez su qui est utilisé pour "changer d'utilisateur". Bien sûr, cela ne fonctionnera pas parce que www-data est un compte utilisateur qui ne peut pas être utilisé pour se connecter. Vous lui avez dit: /usr/sbin/nologin.

Peut-être que ce que vous voulez est Sudo qui est utilisé pour "exécuter une commande en tant qu’autre utilisateur".

Sudo -u www-data ./http-app.py
32
fikr4n

Si vous voulez non seulement exécuter une commande, mais basculez sur www-data afin de tester certaines choses pour cet utilisateur, cela a fonctionné pour moi:

Sudo -u www-data sh

C'est un peu plus court. Quittez la session avec [ctrl] + [d] ou exit

3
rundekugel

Avec ce genre de problème, j'ai utilisé l'option -p:

su -pc ./http-app.py www-data

-p: l'environnement est préservé. En particulier, il n'essaie pas de se connecter avec le nouveau compte, vous n'avez donc pas le message: This account is currently not available..

0
Arno Bozo