`sudo echo“ bla ”>> / etc / sysctl.conf` Berechtigung verweigert


16

Haftungsausschluss: Ich bin ein hübscher Anfänger im Sysadmin-Bereich.

Ich versuche, die Portweiterleitung in einer AWS EC2-Instanz einzurichten. Dies muss in der Befehlszeile erfolgen, da ich nichts bearbeiten möchte. Es muss automatisch erfolgen (dies ist Teil eines Build-Prozesses) ).

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

Zugang verweigert

Das Seltsame ist, dass ich (erfolgreich) sudoso ziemlich jeden Befehl verwendet habe, für den suBerechtigungen erforderlich waren . Wenn ich es sudo suvor dem Befehl mache (es von Hand in einer sshSitzung ausprobieren ), dann funktioniert es.

Gründe dafür? Mögliche Lösungen, die keine sudo suoder manuelle Bearbeitung beinhalten?


Gleiches Problem hier: stackoverflow.com/questions/82256/… - Auch wenn Sie wirklich riskant sein wollen:sudo -i
MirroredFate

Antworten:


46

Sie können sudodie Ausgabeumleitung nicht beeinflussen. >und >>(und der Vollständigkeit <halber) werden mit dem Privileg des aufrufenden Benutzers ausgeführt, da die Umleitung durch die aufrufende Shell und nicht durch den aufgerufenen Unterprozess erfolgt.

Entweder tun

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

oder

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

15

Möglicherweise ist es einfacher, diesen Befehl zu verwenden:

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

12

sudoführt nur Ihren Befehl, nicht die Umleitung, als root aus. Sie müssen alles in einen Befehl einschließen, bei dem das Ganze als root ausgeführt wird:

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

3

Der Befehl sudo echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.confwird so interpretiert, dass Sie (nicht-root) das Ergebnis von sudo echo "net.ipv4.ip_forward = 1"in /etc/sysctl.conf schreiben .

Lauf

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

oder

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

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.confals root laufen .


1
sudo sed -i "$ a <text>" <file>
  • -i : Datei an Ort und Stelle bearbeiten.
  • $ a: Text an die letzte Zeile anhängen

Durch seddie Verwendung des Befehls wird der Aufwand für Umleitungen und Pipelines vermieden.

In deinem Fall: sudo sed -i "$ a net.ipv4.ip_forward = 1" /etc/sysctl.conf

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.