我一直在网上遵循这个 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: 权限被拒绝”。
答案1
作者犯了许多错误。
- 应以 root 身份创建、修改和执行该脚本。
- 该脚本缺少指示其应使用什么解释器的信息。
这是你应该做的:
以 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 位是可能的,但这是一个严重的安全漏洞,因为它允许任何人运行脚本。
答案2
我读过作者的文章并发现了这些:
$chmod +x /root/fw.stop
您可以运行脚本
$/root/fw.stop
作者在这里犯了一些错误,让我们看看命令提示符,$ 应为 #, 或者iptables必须以 root 身份运行,同样前进停止。
答案3
是的,上面写着:
$ chmod +x /root/fw.stop
$ /root/fw.stop
作者应该写
# chmod +x /root/fw.stop
# /root/fw.stop
因为该文档的其余部分使用#
表示应以 root 身份运行的命令和$
表示应以用户身份运行的命令,而这些命令对于非 root 用户来说不起作用。
第一个方法不起作用,因为用户无权更改 root 所拥有的文件的权限。
第二个行不通,因为
- 用户将不被允许访问该脚本,因为用户没有
+x
权限/root
- 该脚本将运行
iptables
,并且只有 root 才允许运行iptables
答案4
我猜测这些关于权限被拒绝的有趣错误是因为当您尝试“chmod +x”时您不是 root 身份。
“sudo -s”有帮助吗?
高血压,
JR