Izin `sudo echo“ bla ”>> / etc / sysctl.conf` ditolak

16

Penafian: Saya cukup pemula dalam hal sysadmin.

Saya mencoba mengatur port forwarding dalam contoh AWS EC2, ini harus dilakukan di command-line karena saya tidak ingin masuk dan mengedit apa pun, itu harus otomatis (itu bagian dari proses build ).

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

Izin ditolak

Yang aneh adalah saya telah (berhasil) menggunakan sudohampir setiap perintah yang membutuhkan suhak istimewa. Jika saya lakukan sudo susebelum perintah (mencobanya dengan tangan dalam suatu sshsesi), maka itu berhasil.

Alasan di balik ini? Kemungkinan solusi yang tidak melibatkan sudo suatau pengeditan manual?

bevacqua
sumber
Masalah yang sama di sini: stackoverflow.com/questions/82256/… - Juga, jika Anda ingin benar-benar berisiko:sudo -i
MirroredFate

Jawaban:

46

Anda tidak dapat menggunakan sudountuk memengaruhi pengalihan output; >dan >>(dan, untuk kelengkapan, <) dilakukan dengan hak istimewa dari pengguna panggilan, karena pengalihan dilakukan oleh shell panggilan, bukan subproses yang disebut.

Baik lakukan

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

atau

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

Anda mungkin lebih mudah menggunakan perintah ini:

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

sudohanya menjalankan perintah Anda, bukan redirect, sebagai root. Anda harus membungkus semuanya dalam perintah di mana semuanya berjalan sebagai root:

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

Perintah sudo echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.confdiartikan sebagai Anda (nonroot) menulis hasil sudo echo "net.ipv4.ip_forward = 1"ke /etc/sysctl.conf.

Lari

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

atau

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

untuk dijalankan echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.confsebagai root.

jdh8
sumber
1
sudo sed -i "$ a <text>" <file>
  • -i : edit file di tempat.
  • $ a: tambahkan teks ke baris terakhir

Menggunakan sedperintah akan menghindari kerumitan pengalihan dan jalur pipa.

Dalam kasus Anda: sudo sed -i "$ a net.ipv4.ip_forward = 1" /etc/sysctl.conf

forzagreen
sumber