
我有一個在 imx6 平台上運行的嵌入式 Linux。這是一個飛思卡爾嵌入式linux。問題是這個 Linux 沒有可用的 sudo,但我需要由用戶啟用和停用 wlan0 裝置。我嘗試將用戶添加到根組但沒有成功。我還嘗試將整個命令添加到 /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 或已儲存的 set-user-ID 不符時,會引發該錯誤。不可能簡單地將您的“用戶名”添加到“root”群組。 Ubuntu 發行版的範例:
sudo adduser username root
不會為您提供必要的 UID 0 來通過所有netdevice
要求的安全檢查。如果visudo
系統上可用,則可以看到該條目Defaults secure_path=""
不包含程式的路徑netdevice.h
。因此,修改程式visudo
的 sudo 權限(使用)不太ifconfig
可能導致繞過 提供的安全控制netdevice
。
假設您沒有執行公用伺服器,@tonioc 提供的答案是在不使用特權的情況下開啟和關閉 Linux 發行版介面(例如 Ubuntu 在重新啟動後自動啟用所有乙太網路介面)的最簡單方法sudo
。該sudo chmod 4755 /sbin/ifconfig
命令是修改系統的簡單方法,以便諸如啟動腳本之類的啟動腳本ifconfig eth0 down
可以關閉介面(無需輸入密碼)。對於同時連接了 Intranet 和 Internet 網路(多 NIC)的桌上型電腦/伺服器,在不需要 Internet 網路時保持關閉狀態對於安全至關重要。