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?


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"

15

Anda mungkin lebih mudah menggunakan perintah ini:

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

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'

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.


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.