1

Я следовал этому руководству по iptables в Интернете и столкнулся с проблемой, когда я пытался дать себе разрешение на выполнение файла, который принадлежит root и хранится в домашней папке root. Вот онлайн-документ в качестве ссылки: руководство по iptables

Это говорит:

Убедитесь, что вы можете выполнить скрипт

$ chmod +x /root/fw.stop

А потом:

Вы можете запустить скрипт

$ /root/fw.stop

Когда я ввел команду «chmod +x /root/fw.stop», я получил сообщение об ошибке «chmod: не удается получить доступ к` /root/fw.stop ': разрешение запрещено ».

Очевидно, что если я хочу запустить скрипт, я могу сделать это, просто набрав «sudo /root/fw.stop», но я пытаюсь учиться; автор руководства просто ошибся с его синтаксисом, который он перечислил, или я делаю что-то не так?

Я попытался "sudo bash -c" chmod +x /root/fw.stop "", а затем попытался снова запустить сценарий как сам с помощью команды "/root/fw.stop", но я получил ошибку "bash: /root /fw.stop: в доступе отказано ".

4 ответа4

2

Автор допустил ряд ошибок.

  1. Скрипт должен быть создан, chmod'd и выполнен как root.
  2. В сценарии отсутствует шебанг, чтобы сказать, какой интерпретатор использовать.

Это то, что вы должны делать:

В качестве пользователя root (sudo -s) создайте файл /root/fw.stop:

$ sudo -s
Enter foo's password:
# nano -w /root/fw.stop

Затем введите следующий скрипт (обратите внимание на изменение в первой строке):

#!/bin/sh
echo "Stopping firewall and allowing everyone..."
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

Затем вы можете выполнить chmod (все еще как root):

# chmod +x /root/fw.stop

Затем вы можете запустить его (да, все еще как root):

# /root/fw.stop

Если вы хотите запустить его как любой другой пользователь, кроме root, вам следует использовать sudo (sudo /root/fw.stop). Бит setuid возможен, но представляет собой серьезную дыру в безопасности, поскольку он позволяет любому запускать скрипт.

1

Да, где говорится:

$ chmod +x /root/fw.stop
$ /root/fw.stop

автор должен был написать

# chmod +x /root/fw.stop
# /root/fw.stop

потому что остальная часть документа использует # для обозначения команды, которая должна выполняться от имени пользователя root, и $ для обозначения команды, которая должна выполняться от имени пользователя, и эти команды не будут работать от имени пользователя без полномочий root.

Первое не будет работать, потому что пользователю не будет разрешено изменять разрешения для файла, принадлежащего пользователю root.

Второй не будет работать, потому что

  1. пользователю не будет разрешен доступ к сценарию, так как у пользователя нет разрешения +x на /root
  2. скрипт будет запускать iptables , и только root может запускать iptables
1

Я прочитал статью автора и нашел это:

$chmod +x /root/fw.stop

Вы можете запустить скрипт

$/root/fw.stop

У автора были здесь некоторые ошибки, давайте посмотрим на командную строку, $ должно быть #, или iptables должен быть запущен от имени пользователя root, также как и в случае с fw.stop.

0

Я предполагаю, что эти забавные ошибки, связанные с отказом в разрешении, связаны с тем, что вы не являетесь пользователем root, когда пытаетесь выполнить команду «chmod +x».

Помогает ли "sudo -s"?

НТН,

JR

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .