Bash / proc / sys / net / ipv4 / ip_forward: Izin ditolak

11

Saya mencoba lari

echo 1 > /proc/sys/net/ipv4/ip_forward

Dikatakan Access ditolak dari bash, saya kemudian melakukan:

sudo chmod 1+x /proc/sys/net/ipv4/ip_forward

dan sekarang dikatakan Operasi tidak diizinkan.

Bagaimana saya bisa mendapatkan akses?

Kevin Hernandez
sumber
4
Coba ini:echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
Doug Smythies
Itu berhasil, dapatkah Anda menjelaskan apa yang dilakukan tee?
Kevin Hernandez
3
Masalahnya sudo echo 1 > /proc/sys/net/ipv4/ip_forwardadalah bahwa pengalihan output dilakukan tidak sudo, sehingga tidak berfungsi. Dari halaman manual:, tee - read from standard input and write to standard output and filesdan jika dilakukan karena sudomemang memiliki hak yang cukup untuk menulis ke file.
Doug Smythies

Jawaban:

15

Bit izin untuk file /proc/sys/net/ipv4/ip_forwardadalah:

-rw-r--r-- 

dengan owner:groupmenjadi root:root.

Jadi hanya rootbisa menulis ke file.

Saat kamu melakukan:

echo 1 > /proc/sys/net/ipv4/ip_forward

sebagai pengguna normal, Anda tidak akan dapat menulis ke file karena izin tidak mencukupi.

Anda dapat melakukan:

  • Gunakan sudodan bash:

    sudo bash -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
  • Gunakan tee:

    echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

Perhatikan bahwa, Anda harus menggunakan /etc/sysctl.confoperasi persisten pada /proc/syssubdirektori.

Singkatnya, untuk mengaktifkan penerusan IP, Anda bisa memasukkan yang berikut ini /etc/sysctl.conf:

net.ipv4.ip_forward = 1

Lalu lari:

sudo sysctl -p

untuk memiliki efek langsung.

Ini memiliki efek yang sama dengan mengedit file /proc/sys/net/ipv4/ip_forward secara langsung, dan belum lagi jauh lebih bersih dan tentu saja gigih.

heemayl
sumber
Melakukan gema 1 | sudo tee / proc / sys / net / ipv4 / ip_forward bekerja untuk saya, dapatkah Anda menjelaskan apa itu tee?
Kevin Hernandez
1
@ChrisEthanFox teeadalah perintah untuk mengirim apa pun yang diterimanya ke keluaran standar dan ke file. Periksaman tee
heemayl
Saya masuk sebagai root tetapi masih tidak dapat menggunakan perintah rm ( rm /proc/sys/net/ipv4/icmp_echo_ignore_all) untuk menghapus file tersebut! Saya bahkan memeriksa bit yang tidak dapat diubah dan tidak diset pada file itu ... Saya mendapatkan error yang sama "rm: tidak dapat menghapus '/ proc / sys / net / ipv4 / icmp_echo_ignore_all': Izin ditolak". Tetapi secara ajaib saya dapat mengedit file seperti yang Anda gambarkan! Saya tidak dapat menyadari apa masalahnya rm!
Mojtaba Rezaeian
@MojtabaRezaeian Adalah kernel yang mencegah penghapusan. /procyaitu procfshidup di memori dan diekspos oleh kernel. Jadi Anda mendapatkan pandangan dari kernel, dan apa pun kernel yang memungkinkan Anda lakukan terhadap file pada FS seperti itu sepenuhnya tergantung pada kernel.
heemayl
@heemayl Jadi bagaimana saya bisa menghapus file itu karena membuat file itu adalah pilihan untuk secara permanen menonaktifkan permintaan icmp ping ke server saya, tetapi setelah membuat file itu sekarang saya berubah pikiran tetapi tidak ada cara untuk menghapus opsi itu (walaupun sekarang bukan opsi itu) ketika itu tidak dapat diubah!) apakah Anda punya ide bagaimana melakukan itu? atau mungkin perlu membuka pertanyaan lain?
Mojtaba Rezaeian