Bonjours à tous,
Actuellement je fait un peu de scrypt shell et j'aimerais savoir comment peut-on se loguer dans un .sh que l'on lance en root avec un user de ce type sans revenir à la commande :
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
Quand je lance dans un .sh cette commande, je me retrouve à taper dans le shell et devoir faire exit pour continuer le programme :
su www-data -s /bin/bash
La solution c'est de mettre exit après cette cmd ?
Voici le script :
#!/bin/bash
su www-data -s /bin/bash
echo "OKEY WWW-DATA"
su
echo "OKEY ROOT"
exit
Merci d'avance
# man su
Posté par freem . Évalué à 2.
Le manuel indique:
et
Vue la longueur de la manpage, certains pourraient se poser des questions sur temps de recherche de solution…
[^] # Re: man su
Posté par electro575 . Évalué à 1.
Pourquoi ne pas se loguer avec le user www-data plutot que de lancer des cmd de cette facon ?
Comment dans ce cas enchainer les cmd suivantes en étant sur de ce que l'on fait :
=> est-on dans /var ?
exemple :
J'enlève le -s comme on a dit et après ?
[^] # Re: man su
Posté par Marotte ⛧ . Évalué à 3.
Oui, on pourrait peut-être lancer tout le script avec le user www-data, faut voir… ça dépend…
Son script peut éventuellement devoir lancer des commandes avec différents utilisateurs. Dans ce cas le script doit être lancé par un compte qui peut « faire un su » sur tous ces différents utilisateurs (soit root, soit il configurer PAM : https://unix.stackexchange.com/questions/113754/allow-user1-to-su-user2-without-password).
Faudrait connaître son besoin sous-jacent avant d’aller plus loin…
[^] # Re: man su
Posté par Marotte ⛧ . Évalué à 3.
Oui… Je profite de ton commentaire pour préciser que l’option -s est ici nécessaire car le shell par défaut de l’utilisateur
www-data
est/usr/sbin/nologin
, sinon ce n’est pas nécessaire.De plus, il faut bien prendre soin, comme je l’ai fait en utilisant des guillemets simples (
'…'
), d’« échapper » la ligne de commande que l’on fournit à la commande su via l’option -c, sinon c’est le shell qui lance su qui va d’abord interpréter des trucs.Je pense que tu le sais, j’écris ça surtout pour d’autres débutants…
[^] # Re: man su
Posté par electro575 . Évalué à 1.
Je trouve ça quand même assez fastidieux de taper des commandes comme ceci à chaque fois qu'on veut changer de user mais si c'est comme cela qu'on fait.
[^] # Re: man su
Posté par Marotte ⛧ . Évalué à 4.
Au lieu de :
tu fais :
(avec éventuellement -s pour spécifier le shell)
Et tu trouves ça fastidieux ?
On peut aussi mettre le script en "setuid" pour qu’il s’exécute avec son utilisateur propriétaire plutôt que celui qui lance le script. Par contre il faut éviter de faire ça quand c’est root qui est propriétaire du fichier.
En interactif, si tu est loggé en userA, la commande à taper c’est
su - userB
(ousu userB
, selon ce qu’on veut comme environnement) pour changer d’utilisateur (« lancer un shell avec cet utilisateur » pour être précis). Dans ce shell, faireexit
te « ramènera » sur le shell du premier utilisateur (celui qui a appelé su)Non, vraiment, je ne comprends pas « fastidieux »…
[^] # Re: man su
Posté par wismerhill . Évalué à 6.
Non, on ne peut pas. Le bit SUID ne fonctionne que sur les binaires, pas les scripts qui sont exécutés par ceux-ci (et il ne faut SURTOUT PAS faire un bash, ou autre, en SUID).
[^] # Re: man su
Posté par Marotte ⛧ . Évalué à 3.
Merci pour la correction. Ce n’est en effet plus possible depuis belle lurette.
[^] # Re: man su
Posté par freem . Évalué à 2.
Malgré le shebang?
Je t'avoue que je n'avais pas noté le coup du www-data, en fait.
# Bonjour
Posté par Marotte ⛧ . Évalué à 3.
Ça ne veut rien dire.
Tu ne peux pas procéder comme tu le fais…
Par contre tu peux faire comme ceci :
Le script :
ça donne, lancé en root :
Note que je peux ajouter un exit à la fin du script, c’est même une bonne pratique, ça ne change rien, là il est implicite.
Un script, avec un i… Pas courante cette faute :) "Okey" en lieu et place de "Okay" l’est un peu plus ;)
# mauvais usage de su
Posté par NeoX . Évalué à 2.
devient
[^] # Re: mauvais usage de su
Posté par electro575 . Évalué à 1.
D'accord merci et dans ce cas :
Comment placer une variable de type $wwwhome dans cette commande ?
[^] # Re: mauvais usage de su
Posté par NeoX . Évalué à 2.
en le sortant du -c
par contre le
-s bash
n'est pas obligatoire si l'utilisateur dispose deja du shell bash[^] # Re: mauvais usage de su
Posté par electro575 . Évalué à 1.
d'accord merci
[^] # Re: mauvais usage de su
Posté par electro575 . Évalué à 1.
J'ai tenté ta commande mais ça ne fonctionne pas avec les variables $
[^] # Re: mauvais usage de su
Posté par NeoX . Évalué à 2.
à tout hasard ton $wwwhome ce ne serait pas le home de www-data ?
auquel cas cette variable n'a pas besoin d'etre precisé car tu seras deja dans son home avec le
su www-data
sinon tu peux utiliser la notation
~www-data/
qui enverra dans le home de l'utilisateur www-data[^] # Re: mauvais usage de su
Posté par electro575 . Évalué à 1.
Pour toi je peux utiliser ceci ?
su -c 'echo -e "(quit)" | ccl --load ~www-data/turtl/api/start.lisp' -s /bin/bash www-data
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.