Bash / proc / sys / net / ipv4 / ip_forward: Odmowa dostępu

11

Próbowałem biec

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

Mówi, że odmówiono dostępu przez bash, a następnie:

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

a teraz mówi: Operacja niedozwolona.

Jak mogę uzyskać dostęp?

Kevin Hernandez
źródło
4
Spróbuj tego:echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
Doug Smythies
To zadziałało, czy możesz wyjaśnić, co robi tee?
Kevin Hernandez,
3
Problem sudo echo 1 > /proc/sys/net/ipv4/ip_forwardpolega na tym, że przekierowanie danych wyjściowych nie jest wykonywane jako sudo, więc nie działa. Ze strony podręcznika:, tee - read from standard input and write to standard output and filesa jeśli tak zrobiono sudo, ma wystarczające uprawnienia do zapisu do pliku.
Doug Smythies,

Odpowiedzi:

15

Bity uprawnień dla pliku /proc/sys/net/ipv4/ip_forwardto:

-rw-r--r-- 

z owner:groupbyciem root:root.

Więc tylko rootmożna zapisać do pliku.

Kiedy to zrobisz:

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

jak zwykły użytkownik, nie będziesz mógł pisać do pliku z powodu niewystarczających uprawnień.

Możesz to zrobić:

  • Użyj sudoi bash:

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

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

Zauważ, że powinieneś używać /etc/sysctl.confdo trwałych operacji w /proc/syspodkatalogach.

Krótko mówiąc, aby włączyć przekazywanie adresów IP, możesz po prostu umieścić następujące elementy /etc/sysctl.conf:

net.ipv4.ip_forward = 1

Następnie uruchomić:

sudo sysctl -p

mieć natychmiastowy skutek.

Ma to taki sam efekt, jak /proc/sys/net/ipv4/ip_forward bezpośrednia edycja pliku , nie wspominając już o znacznie czystszym i oczywiście trwałym.

heemayl
źródło
Robi echo 1 | sudo tee / proc / sys / net / ipv4 / ip_forward pracowało dla mnie, czy możesz wyjaśnić, co to jest tee?
Kevin Hernandez,
1
@ChrisEthanFox teejest poleceniem wysyłania wszystkiego, co otrzymuje, zarówno na standardowe wyjście, jak i do plików. Sprawdźman tee
heemayl
Jestem zalogowany jako root, ale nadal nie mogę użyć polecenia rm ( rm /proc/sys/net/ipv4/icmp_echo_ignore_all) do usunięcia takiego pliku! Nawet sprawdziłem niezmienny bit i nie jest on ustawiony w tym pliku ... Otrzymuję ten sam błąd „rm: nie można usunąć '/ proc / sys / net / ipv4 / icmp_echo_ignore_all': Odmowa dostępu”. Ale magicznie mogę edytować plik zgodnie z opisem! Nie mogę zrozumieć, z czym jest problem rm!
Mojtaba Rezaeian
@MojtabaRezaeian To jądro uniemożliwia usunięcie. /proctzn. procfsżyje w pamięci i jest narażony przez jądro. Więc dostajesz widok jądra, a cokolwiek jądro pozwala ci robić z plikami na takim FS jest całkowicie zależne od jądra.
heemayl
@ heemayl Więc jak mogę usunąć ten plik, ponieważ utworzenie tego pliku było opcją trwałego wyłączenia żądań ping icmp do mojego serwera, ale po utworzeniu tego pliku teraz zmieniłem zdanie, ale nie ma sposobu, aby usunąć tę opcję (chociaż teraz nie jest to opcja kiedy nie można tego zmienić!) czy masz pomysł, jak to zrobić? a może wymaga otwarcia kolejnego pytania?
Mojtaba Rezaeian