不使用 sudo 运行 ifconfig

不使用 sudo 运行 ifconfig

我有一个在 imx6 平台上运行的嵌入式 Linux。这是一个飞思卡尔嵌入式 Linux。问题是这个 Linux 没有可用的 sudo,但我需要由用户激活和停用 wlan0 设备。我尝试将用户添加到组 root,但没有成功。我还尝试将整个命令添加到 /etc/busybox.conf 文件中,但这也没有任何效果。

我如何在没有 sudo 的情况下以用户身份运行此命令?

user@touch:~$ /sbin/ifconfig eth0 down
SIOCSIFFLAGS: Permission denied

答案1

如果任何非 root 用户都可以信任这样做,您只需在 ifconfig exec 上添加一个 setuid 标志:

chmod 4755 /sbin/ifconfig

它将授予任何人执行此可执行文件的 root 权限。当然,您需要具有 root 权限才能运行 chmod。

答案2

您不需要使用sudo来运行ifconfig命令,只需确保/sbin在您的 PATH 上。

以非特权用户身份运行:

export PATH=$PATH:/sbin
ifconfig

答案3

  1. 对于新的 Linux 用户;该软件包sudo为非特权用户提供了预设的几分钟时间来对系统执行只有系统管理员('root' == 'uid=0')才能执行的操作。

  2. 对于面向公众的服务器上的 Linux 操作系统,该程序ifconfig存在许多安全问题。对于具有 KVM 连接、不需要 SSH 访问且不需要 24/7 互联网连接的台式机和家庭服务器,该程序的安全要求较低。

  3. ifconfig受另一个名为 的程序保护netdevice。此程序提供对 Linux 网络设备的低级访问。请参阅man netdevice。抛出的错误SIOCSIFFLAGS:权限被拒绝是因为该程序ifconfig被标记为特权程序,并且需要有效用户 ID 为 0(“root”<==>“uid=0”)或该CAP_NET_ADMIN功能。如果不是这种情况,EPERM将返回。

  4. 为了找出答案,CAP_NET_ADMIN我们必须阅读功能(7) — Linux 手册页。这里的重要信息是“CAP_NET_ADMIN:执行各种与网络相关的操作,例如接口配置”。为了找出它的含义,EPERM我们必须阅读man setuidEPERM当用户没有特权(Linux:没有权限CAP_SETUID)并且 uid 与调用进程的实际 UID 或保存的设置用户 ID 不匹配时,会抛出错误。

  5. 无法简单地将您的“用户名”添加到组“root”。Ubuntu 发行版示例:sudo adduser username root不会为您提供通过所有安全检查netdevice所需的必要 UID 0。如果visudo系统上有,则可以看到条目Defaults secure_path=""不包含程序的路径netdevice.h。因此,修改程序的 sudo 权限(使用visudo)不太ifconfig可能导致绕过提供的安全控制netdevice

假设您没有运行公共服务器,@tonioc 提供的答案是打开和关闭 Linux 发行版接口的最简单方法(例如 Ubuntu,它在重新启动后自动启用所有以太网接口),而无需使用sudo权限。该sudo chmod 4755 /sbin/ifconfig命令是一种修改系统的简单方法,以便启动脚本(例如)ifconfig eth0 down可以关闭接口(无需输入密码)。对于同时连接了内部网和互联网网络(多 NIC)的台式机/服务器,在不需要互联网网络时将其保持关闭对于安全性至关重要。

相关内容