Linux中的$ip和iptables有什么区别?

What is the difference between $ip and iptables in Linux?

我正在做一个关于保护 Linux 系统的项目。我们将进入 VI 以更改系统允许的脚本。部分完成。

在下面的截图中,可以看到已经填写了允许端口22,但是这一行以$ip开头。我们使用的语句以 iptables 开头。这些是相同的命令吗?或者它们的意思完全不同?

我无法在网上找到太多解释差异的信息。

iptables是一个命令。脚本中以 iptables 运行 开头的每一行都是 iptables 命令。

$ip 是一个环境变量,可能包含 运行 的命令名称。脚本中以 $ip 运行 开头的每一行其名称包含在 $ip 变量中的命令。

您要求我们告诉您变量设置的内容。我们不知道。

检查您提供的文件片段,您正在编辑的文件可能是 shell 脚本(bash、sh 等)。因为 iptables 是一个有效的 linux 命令,所以情况可能就是这样。该文件也可以是 perl、php 或其他支持 $variable 语法的语言。

看文件的第一行,是不是以#!开头(sh-bang)?例如:

#!/bin/bash

根据用于解释文件的脚本语言,$ip 标记可以解析为 $ip 包含的当前值。假设ip=iptables。那么很可能你给的文件片段应该等价于下面的:

iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
# put your dport ACCEPT rules here
iptables -A INPUT -p tcp -m tcp --dport 3398 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

这似乎是多余的,因为第四行重复了第一行。

由于命令iptables必须运行作为root才能更改系统防火墙,所以iptables$ipw.r.t之间有很大的区别.安全。

如果此文件可由不良行为者写入,则不良行为者可以修改该文件以产生恶意行为。但是这些变化会被检测到。

假设坏人能够更改 $ip 变量的值?不良行为者可以将恶意行为注入该脚本。

例如,假设变量设置为命令,

export ip='echo beat me bad ||iptables'

然后用户天真地 sudo 到 root 并执行脚本(文件),

$ sudo -u root
$ $ip
beat me || <iptables runs here>

您可以阅读有关编辑 iptables 规则的内容here

政策规则:永远不要对安全敏感文件使用命令插值,例如需要root权限的脚本(或者可以运行作为root)(如上面的脚本(文件)).

假设坏人可以更改您的 PATH 环境变量,并注入另一个名为 iptables 的可执行文件的路径。 运行以 root 身份运行命令和脚本时,需要注意路径。考虑使用命令的完整路径名(或检查 PATH 是否未损坏);示例:

/usr/sbin/iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
# put your dport ACCEPT rules here
/usr/sbin/iptables -A INPUT -p tcp -m tcp --dport 3398 -j ACCEPT
/usr/sbin/iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

策略规则:当运行以 root 用户身份时显式检查 PATH,或者使用命令的完整路径以确保命令不会被重定向。