我正在运行一个 python 脚本,该脚本根据给定的一组参数执行 nmap。目的是使此过程自动化,这样我就根本不需要与 cli 交互。每次运行脚本时,都会提示错误消息:
'You requested a scan type which requires root priveleges.\nQUITTING!\n'
我知道我可以在命令前面加上“sudo”,但我的脚本的目的是根本不与 CLI 交互。我将脚本的所有权交给了我的用户,但仍然出现相同的错误。有没有办法让我每次都可以以超级用户的身份运行 nmap,而不必给出 sudo 命令?非常感谢大家的帮助!
答案1
Nmap 需要 root 权限才能执行许多操作(见下文)。因此,使用各种方案(sudo NOPASSWD、setuid 等)来允许用户在不提供 root 密码的情况下运行它是一种很诱人的做法。但这是极其危险,因为使用 Nmap 启动任何其他命令或 shell 都很简单。例如:nmap --script <(echo 'os.execute("/bin/sh")')
幸运的是,Nmap 有对 Linux 功能的实验性支持CAP_NET_RAW
。通过安装具有、CAP_NET_ADMIN
和功能的 Nmap CAP_NET_BIND_SERVICE
,您可以更安全地允许非特权用户运行它。Nmap 本身无法检测到它具有这些功能,因此您必须使用 选项--privileged
通知它尝试使用它们,而不管 UID 如何。上面的链接中提供了更多讨论。
Nmap 需要 root 权限才能执行除以下操作之外的操作:
- TCP 连接扫描 (
-sT
) - 反向 DNS 名称解析
- 除 TCP 连接之外的主机发现 (“ping”) 方法 (
-PS
) - 服务和应用程序版本检测(
-sV
) - 大多数 Nmap 脚本引擎 (NSE) 脚本
答案2
一个解决方案是将该特定命令添加到sudoers
文件中,
Cmnd_Alias NMAP = /path/to/nmap, /path/to/script
username ALL=(ALL:ALL) NOPASSWD: NMAP
类似这样的操作可以让你编写sudo
命令脚本,但不需要专门为该命令输入密码。你可以选择只为该脚本/用户组合执行此操作,以便脚本中的所有内容都以 root 身份运行,或者你可以专门为命令执行此操作nmap
,并sudo
在脚本中包含许多条目。
选择你的毒药...