Bash / proc / sys / net / ipv4 / ip_forward: в доступе отказано

11

Я пытался бежать

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

Это говорит, что Доступ запрещен от bash, я тогда сделал:

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

и теперь он говорит, что операция не разрешена.

Как я могу получить доступ?

Кевин Эрнандес
источник
4
Попробуйте это:echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
Даг Смити
Это сработало, можете ли вы объяснить, что делает тройник?
Кевин Эрнандес
3
Проблема sudo echo 1 > /proc/sys/net/ipv4/ip_forwardв том, что перенаправление вывода выполняется не так sudo, поэтому не работает. Со страницы man: tee - read from standard input and write to standard output and filesи, если все сделано, у sudoнего достаточно прав для записи в файл.
Дуг Смитис

Ответы:

15

Биты разрешения для файла /proc/sys/net/ipv4/ip_forward:

-rw-r--r-- 

с owner:groupсуществом root:root.

Так что только rootможете записать в файл.

Когда вы делаете:

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

как обычный пользователь, вы не сможете писать в файл из-за недостаточных прав.

Ты можешь сделать:

  • Используйте sudoи bash:

    sudo bash -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
  • Используйте tee:

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

Обратите внимание, что вы должны использовать /etc/sysctl.confдля постоянных операций в /proc/sysподкаталогах.

Короче говоря, чтобы включить пересылку IP, вы можете просто добавить следующее /etc/sysctl.conf:

net.ipv4.ip_forward = 1

Затем запустите:

sudo sysctl -p

иметь немедленный эффект.

Это имеет тот же эффект, что и редактирование файла /proc/sys/net/ipv4/ip_forward напрямую, не говоря уже о том, что он намного чище и, конечно, постоянен.

heemayl
источник
Делать эхо 1 | sudo tee / proc / sys / net / ipv4 / ip_forward работал для меня, можете ли вы объяснить, что такое тройник?
Кевин Эрнандес
1
@ChrisEthanFox tee- это команда для отправки всего, что она получает, как в стандартный вывод, так и в файлы. Чекman tee
heemayl
Я вошел в систему как пользователь root, но все еще не могу использовать команду rm ( rm /proc/sys/net/ipv4/icmp_echo_ignore_all) для удаления такого файла! Я даже проверил неизменный бит, и он не установлен в этом файле ... Я получаю ту же ошибку "rm: не могу удалить" / proc / sys / net / ipv4 / icmp_echo_ignore_all ': разрешение запрещено ". Но волшебным образом я могу редактировать файл, как вы описали! Я не могу понять, в чем проблема rm!
Мойтаба Резаян
@MojtabaRezaeian Это ядро ​​мешает удалению. /procт.е. procfsживет на памяти и выставляется ядром. Итак, вы получаете представление о ядре, и то, что ядро ​​позволяет вам делать с файлами на такой FS, полностью зависит от ядра.
Heemayl
@heemayl Итак, как я могу удалить этот файл, потому что создание этого файла было возможностью навсегда отключить пинг-запросы icmp на мой сервер, но после создания этого файла я передумал, но удалить этот вариант невозможно (хотя сейчас его нет) когда это нельзя изменить!) Есть ли у вас идеи, как это сделать? или, может быть, это требует, чтобы открыть еще один вопрос?
Мойтаба Резаян