J’essaie de comprendre comment exécuter des commandes à partir de mon compte d’utilisateur dans un script avec les privilèges root. J’ai ce script de test et le résultat me dérange.
~ $ cat test.sh
sortie :
#!/usr/bin/bash su -c "whoami" user su -c "echo $HOME" user
~ $ sudo ./test.sh
sortie :
user /root
Pourquoi la première commande «su» semble-t-elle s’exécuter en tant qu ‘«utilisateur» mais la seconde semble fonctionner en tant que «root»?
Les guillemets doubles développent les variables de shell. Essayer
echo su -c "echo $HOME" user
pour voir ce que je veux dire C’est le shell qui exécute le script qui développe $HOME
, qui s’exécute en tant que root (depuis sudo ./test.sh
). Donc, ce qui finit par être exécuté est l’utilisateur su -c 'echo /root' user
.
Tu veux
su -c 'echo $HOME' user
Ici, nous transmettons echo $HOME
non expansé à su -c
.