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
和$ip
w.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,或者使用命令的完整路径以确保命令不会被重定向。
我正在做一个关于保护 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
和$ip
w.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,或者使用命令的完整路径以确保命令不会被重定向。