`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?

Bevacqua
quelle
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"
MadHatter unterstützt Monica
quelle
15

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

echo net.ipv4.ip_forward = 1 | sudo tee -a /etc/sysctl.conf
Random832
quelle
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'
Cakemox
quelle
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 .

jdh8
quelle
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

Forzagreen
quelle