Вопрос: `sudo echo" bla ">> отказано / etc / sysctl.conf`


Отказ от ответственности: я довольно новичок в работе sysadmin.

Я пытаюсь настроить переадресацию портов в экземпляре AWS EC2, это нужно сделать в командной строке, потому что я не хочу входить и редактировать что-либо, оно должно быть автоматическим (это часть процесса сборки ).

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

Доступ запрещен

Странно, что я (успешно) использовал sudo для почти каждой команды, которая требовала su привилегии. Если я сделаю sudo su перед командой (проверять ее вручную ssh сеанс), то он работает.

Причины этого? Возможные решения, не требующие sudo su или ручные изменения?


14
2017-09-20 14:05


Источник


Та же проблема здесь:stackoverflow.com/questions/82256/... - Кроме того, если вы хотите быть очень рискованным: sudo -i - MirroredFate


Ответы:


Вы не можете использовать sudo для изменения перенаправления на выход; > а также >> (и, для полноты, <) выполняются с привилегией вызывающего пользователя, поскольку перенаправление выполняется вызывающей оболочкой, а не вызываемым подпроцессом.

Либо сделайте

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

или

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

41
2017-09-20 14:09



Это имеет большой смысл, спасибо за объяснение! - bevacqua


Возможно, вам будет проще использовать эту команду:

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

13
2017-09-20 20:45





sudo запускает только вашу команду, а не перенаправление, как root. Вам нужно будет обернуть все это в команде, где все работает с правами root:

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

12
2017-09-20 14:09





Команда sudo echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf интерпретируется как вы (nonroot) записывают результат sudo echo "net.ipv4.ip_forward = 1" в /etc/sysctl.conf.

Бег

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

или

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

бежать echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf как корень.


3
2017-09-20 16:56