`sudo echo„ bla ”>> / etc / sysctl.conf` odmowa dostępu

16

Oświadczenie: Jestem całkiem nowicjuszem w sysadmin.

Próbuję skonfigurować przekierowanie portów w instancji AWS EC2, należy to zrobić w wierszu polecenia, ponieważ nie chcę wchodzić i edytować niczego, musi to być automatyczne (jest to część procesu kompilacji ).

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

Odmowa zezwolenia

Dziwne jest to, że (z powodzeniem) używam sudopraktycznie każdego polecenia wymagającego suuprawnień. Jeśli zrobię to sudo suprzed poleceniem (wypróbowanie go ręcznie w sshsesji), to zadziała.

Powody tego? Możliwe rozwiązania, które nie wymagają sudo suedycji ręcznej?

bevacqua
źródło
Ten sam problem tutaj: stackoverflow.com/questions/82256/… - Ponadto, jeśli chcesz być naprawdę ryzykowny:sudo -i
MirroredFate

Odpowiedzi:

46

Nie można użyć, sudoaby wpłynąć na przekierowanie wyjścia; >oraz >>(i dla kompletności <) są dokonywane z uprawnieniem wywołującego użytkownika, ponieważ przekierowanie jest wykonywane przez powłokę wywołującą, a nie wywoływany podproces.

Albo zrób

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

lub

sudo /bin/su -c "echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf"
Szalony Kapelusznik
źródło
15

Łatwiejsze może być użycie tego polecenia:

echo net.ipv4.ip_forward = 1 | sudo tee -a /etc/sysctl.conf
Losowo 832
źródło
12

sudouruchamia tylko twoje polecenie, a nie przekierowanie, jako root. Musisz to wszystko zawrzeć w poleceniu, w którym cała rzecz działa jako root:

sudo sh -c 'echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf'
Cakemox
źródło
3

Polecenie sudo echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.confjest interpretowane jako że was (innego niż administrator) wpisać wynik sudo echo "net.ipv4.ip_forward = 1"do /etc/sysctl.conf.

Biegać

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

lub

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

uruchomić echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.confjako root.

jdh8
źródło
1
sudo sed -i "$ a <text>" <file>
  • -i : edytuj plik na miejscu.
  • $ a: dołącz tekst do ostatniego wiersza

Użycie sedpolecenia pozwala uniknąć kłopotów z przekierowaniami i potokami.

W Twoim przypadku: sudo sed -i "$ a net.ipv4.ip_forward = 1" /etc/sysctl.conf

forzagreen
źródło