`sudo echo“ bla ”>> / etc / sysctl.conf` у дозволі відмовлено


16

Відмова: Я досить початківець у справах sysadmin.

Я намагаюся налаштувати переадресацію порту в екземплярі AWS EC2, це потрібно зробити в командному рядку, тому що я не хочу нічого вносити і редагувати, це повинно бути автоматичним (це частина процесу збирання ).

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

У дозволі відмовлено

Дивна річ - це я (успішно) використовую sudoмайже кожну команду, яка вимагала suпривілеїв. Якщо я виконую sudo suперед командою (пробую її вручну під час sshсеансу), то вона працює.

Причини цього? Можливі рішення, які не передбачають sudo suабо вручну редагувати?


Тут же проблема: stackoverflow.com/questions/82256/… - Також, якщо ви хочете бути дуже ризикованими:sudo -i
MirroredFate

Відповіді:


46

Ви не можете використовувати 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"

15

Вам може бути простіше використовувати цю команду:

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

12

sudoвиконує лише вашу команду, а не переадресацію, як root. Вам потрібно буде все це загорнути в команду, де вся справа працює як root:

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

3

Команда sudo echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.confінтерпретується так, що ви (non-root) записуєте результат 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як root.


1
sudo sed -i "$ a <text>" <file>
  • -i : редагувати файл на місці.
  • $ a: додавання тексту до останнього рядка

Використання sedкоманди дозволяє уникнути клопоту про переадресації та трубопроводи.

У вашому випадку: sudo sed -i "$ a net.ipv4.ip_forward = 1" /etc/sysctl.conf

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.