Pages : 1
#1 Le 18/12/2006, à 21:03
- Tifred
Script Bash en Root
Bonjour tout le monde,
Voilà je cherche à ecrire un script
#!/bin/bash
sudo bash
echo "1" > /proc/sys/net/ipv4/ip_forward
&& iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Mais ça ne marche pas...pourquoi ?
Dernière modification par Tifred (Le 21/01/2007, à 10:09)
Hors ligne
#2 Le 19/12/2006, à 09:55
- blutch
Re : Script Bash en Root
la tout de suite, je ne vois pas pourquoi ça ne fonctionne pas, mais pourquoi ne pas plutôt faire comme ceci ? (je ne me suis jamais amusé avec l'option -o je dois dire :-/ )
#!/bin/bash
sudo bash
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
Si vous m'avez compris, c'est que je me suis mal exprimé :/
Hors ligne
#3 Le 19/12/2006, à 11:10
- kaworu
Re : Script Bash en Root
Salut !
Il faut échapper le retour à la ligne sinon le && ne fait pas de sens :
#!/bin/bash
sudo bash
echo "1" > /proc/sys/net/ipv4/ip_forward \
&& iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Dernière modification par kaworu (Le 19/12/2006, à 11:10)
"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."
Hors ligne
#4 Le 19/12/2006, à 21:06
- Tifred
Re : Script Bash en Root
Merci
MAis c pas les iptables qui foire, puisqu'en lançant les trois lignes séparément dans une console ça marche
(et le retour à la ligne est ici pour la place il n'existe pas dans le script original kaworu)
bon je vire les "&&" et je place trois instructions (&& c'est pour les test logique ou c pour dire ça ET ça ?)
Dernière modification par Tifred (Le 19/12/2006, à 21:15)
Hors ligne
#5 Le 19/12/2006, à 21:35
- kaworu
Re : Script Bash en Root
Salut !
&& c'est pour les test logiques et pour dire "ça ET ça".
Je te laisse regarder les test / valeurs de retour des fonction UNIX sur ma bible Bash :
http://abs.traduc.org/
"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."
Hors ligne
#6 Le 20/12/2006, à 22:14
- JoelS
Re : Script Bash en Root
#!/bin/bash sudo bash echo "1" > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
Es-ce que tu sûr de vouloir faire comme ça ? Ton problème est bien que tes commandes concernant iptable (le echo ... et le iptable...) ne fonctionnent pas ? Parce que la, à mon avis, dans ton script shell, tu lances d'abord un sous-shell bash en tant que root, puis une fois que ce sous-shell est terminé et donc dans le shell courant (le script), tu essaies de modifier la conf d'iptable (et je suppose qu'en tant que toi, tu n'as pas les droits). A aucun moment les 2 dernières lignes s'exécutent dans le contexte du sous-shell bash en tant que root. La preuve, essaies ça:
moi@mamachine$ cat > toto
#!/bin/bash
sudo bash
id
<--la appuies sur Ctrl+C
moi@mamachine$ chmod 755 ./toto
moi@mamachine$ ./toto
root@mamachine# exit
uid=moi(1000) gid=moi(1000) ....
moi@mamachine$
Comme tu le vois la commande id s'est exécutée dans le contexte du script shell donc lancé par l'utilisateur moi, pas par root. 'sudo bash' t'as lancé un shell interactif sous root. Et l'évaluation du script passes à la ligne suivante quand la ligne courante a fini d'être exécutée. Dans le cas d'une commande interactive, c'est quand tu quittes la commande.
Bon si tu savais déjà tout ça, je ne vois ou est ton problème !
Hors ligne
Pages : 1