Autorizzazione `sudo echo“ bla ”>> / etc / sysctl.conf` negata


16

Disclaimer: sono abbastanza alle prime armi con le cose da amministratore di sistema.

Sto provando a configurare il port forwarding in un'istanza di AWS EC2, questo deve essere fatto nella riga di comando perché non voglio entrare e modificare nulla, deve essere automatico (fa parte di un processo di compilazione ).

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

Permesso negato

La cosa strana è che ho usato (con successo) sudopraticamente per ogni comando che richiedeva suprivilegi. Se lo faccio sudo suprima del comando (provandolo a mano in una sshsessione), allora funziona.

Ragioni alla base di questo? Possibili soluzioni che non comportano sudo suo modifiche manuali?


Stesso problema qui: stackoverflow.com/questions/82256/… - Inoltre, se vuoi essere davvero rischioso:sudo -i
MirroredFate

Risposte:


46

Non è possibile utilizzare sudoper influire sul reindirizzamento dell'output; >e >>(e, per completezza <) , vengono effettuati con il privilegio dell'utente chiamante, poiché il reindirizzamento viene effettuato dalla shell chiamante, non dal sottoprocesso chiamato.

Nemmeno

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

o

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

15

Potresti trovare più semplice usare questo comando:

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

12

sudoesegue solo il comando, non il reindirizzamento, come root. Dovrai avvolgerlo tutto in un comando in cui l'intera cosa viene eseguita come root:

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

3

Il comando sudo echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.confviene interpretato nel modo in cui tu (non root) scrivi il risultatosudo echo "net.ipv4.ip_forward = 1" in /etc/sysctl.conf.

Correre

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

o

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

per funzionare echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.confcome root.


1
sudo sed -i "$ a <text>" <file>
  • -i : modifica il file in atto.
  • $ a: aggiunge il testo all'ultima riga

L'uso del sedcomando evita il fastidio di reindirizzamenti e pipeline.

Nel tuo caso: sudo sed -i "$ a net.ipv4.ip_forward = 1" /etc/sysctl.conf

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.