我有一个在 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
对于新的 Linux 用户;该软件包
sudo
为非特权用户提供了预设的几分钟时间来对系统执行只有系统管理员('root' == 'uid=0')才能执行的操作。对于面向公众的服务器上的 Linux 操作系统,该程序
ifconfig
存在许多安全问题。对于具有 KVM 连接、不需要 SSH 访问且不需要 24/7 互联网连接的台式机和家庭服务器,该程序的安全要求较低。ifconfig
受另一个名为 的程序保护netdevice
。此程序提供对 Linux 网络设备的低级访问。请参阅man netdevice
。抛出的错误SIOCSIFFLAGS:权限被拒绝是因为该程序ifconfig
被标记为特权程序,并且需要有效用户 ID 为 0(“root”<==>“uid=0”)或该CAP_NET_ADMIN
功能。如果不是这种情况,EPERM
将返回。为了找出答案,
CAP_NET_ADMIN
我们必须阅读功能(7) — Linux 手册页。这里的重要信息是“CAP_NET_ADMIN:执行各种与网络相关的操作,例如接口配置”。为了找出它的含义,EPERM
我们必须阅读man setuid
。EPERM
当用户没有特权(Linux:没有权限CAP_SETUID
)并且 uid 与调用进程的实际 UID 或保存的设置用户 ID 不匹配时,会抛出错误。无法简单地将您的“用户名”添加到组“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)的台式机/服务器,在不需要互联网网络时将其保持关闭对于安全性至关重要。