`sudo echo" bla ">> / etc / sysctl.conf` autorisation refusée


16

Avertissement: je suis assez novice dans le domaine des administrateurs système.

J'essaie de configurer la redirection de port dans une instance AWS EC2, cela doit être fait dans la ligne de commande parce que je ne veux pas entrer et éditer quoi que ce soit, cela doit être automatique (cela fait partie d'un processus de construction ).

sudo echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

Permission refusée

Ce qui est étrange, c'est que j'utilise (avec succès) sudopresque toutes les commandes qui nécessitent des suprivilèges. Si je fais sudo suavant la commande (l'essayer à la main dans une sshsession), alors cela fonctionne.

Pourquoi cela? Solutions possibles qui n'impliquent pas sudo suou modifications manuelles?


Même problème ici: stackoverflow.com/questions/82256/… - Aussi, si vous voulez vraiment être risqué:sudo -i
MirroredFate

Réponses:


46

Vous ne pouvez pas utiliser sudopour affecter la redirection de sortie; >et >>(et, pour être complet <), sont effectuées avec le privilège de l'utilisateur appelant, car la redirection est effectuée par le shell appelant, et non par le sous-processus appelé.

Soit

cp /etc/sysctl.conf /tmp/
echo "net.ipv4.ip_forward = 1" >> /tmp/sysctl.conf
sudo cp /tmp/sysctl.conf /etc/

ou

sudo /bin/su -c "echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf"

15

Vous trouverez peut-être plus simple d'utiliser cette commande:

echo net.ipv4.ip_forward = 1 | sudo tee -a /etc/sysctl.conf

12

sudoexécute uniquement votre commande, pas la redirection, en tant que root. Vous aurez besoin de tout envelopper dans une commande où le tout s'exécute en tant que root:

sudo sh -c 'echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf'

3

La commande sudo echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.confest interprétée comme si vous (non root) écrivez le résultat de sudo echo "net.ipv4.ip_forward = 1"dans /etc/sysctl.conf.

Courir

sudo -s 'echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf'

ou

sudo su -c 'echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf'

pour exécuter en echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conftant que root.


1
sudo sed -i "$ a <text>" <file>
  • -i : éditer le fichier sur place.
  • $ a: ajouter du texte à la dernière ligne

L'utilisation de la sedcommande vous évite les tracas des redirections et des pipelines.

Dans ton cas: sudo sed -i "$ a net.ipv4.ip_forward = 1" /etc/sysctl.conf

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.