# 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)?
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/ )
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
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
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.
.