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

14
# 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 suou www-data? Ça fonctionnait ...

Vraisemblablement, c'est à cause de la /usr/sbin/nologin, mais comment puis-je abandonner rootpour ce script, sans compromettre d'autres services sur le système ( nologina été choisi par l' Debianéquipe pour une bonne raison, je veux le croire)?

NarūnasK
la source

Réponses:

19

Sans débattre sucontre sudovous 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/ )

Mark Wagner
la source
J'ai supposé à tort qu'il /bin/shest utilisé par défaut et vous devez spécifier l' -soption uniquement si vous souhaitez passer à /bin/bashou similaire.
NarūnasK
3
Merci, cela fonctionne dans Debian 9 su www-data -s /bin/shpour revenir à la racine, tapez simplement su.
PJ Brunet
4
@PJBrunet - "pour revenir à la racine" (en supposant que vous avez su depuis la racine), vous tapez "exit". Pour démarrer un nouveau shell racine, vous devez taper su.
ChronoFish
31

Vous utilisez suce qui est utilisé pour "changer d'utilisateur". Bien sûr, cela ne fonctionnera pas car il www-datas'agit d'un compte utilisateur qui ne peut pas être utilisé pour se connecter. Vous l'avez dit:/usr/sbin/nologin .

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

sudo -u www-data ./http-app.py
fikr4n
la source
J'ai toujours utilisé suà cette fin et cela fonctionnait toujours. sudoest un package supplémentaire à installer, mais vous avez raison, je peux l'utiliser pour réaliser ce que je veux.
NarūnasK
1

Si vous voulez non seulement exécuter une commande, mais passer à www-dataafin 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] ouexit

rundekugel
la source
0

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 ne cherche pas à connecter avec le nouveau compte, si vous n'obtenez le message: This account is currently not available..

Arno Bozo
la source