我想知道命令行應用程序是否可以請求root訪問權限,如嘗試使用sudo
調用本身。如果控制檯應用程序需要root權限,它如何在OS X下sudo自己?
我正在尋找一種解決方案,如果需要的話,可以編寫需要sudo
權限的應用程序。
它不需要始終請求root訪問權限,只有在需要時才需要。
我想知道命令行應用程序是否可以請求root訪問權限,如嘗試使用sudo
調用本身。如果控制檯應用程序需要root權限,它如何在OS X下sudo自己?
我正在尋找一種解決方案,如果需要的話,可以編寫需要sudo
權限的應用程序。
它不需要始終請求root訪問權限,只有在需要時才需要。
選項:
setuid(0)
,但只有當它已經被被root用戶,因此具有爲0的真實用戶ID和別人的有效UID。exec
的sudo
或su
命令,並擁有自己的UID 0下運行,但只有當sudo
被配置爲允許(這通常需要用戶提交的身份驗證,因爲會有一個授權檢查)。AuthorizationExecWithPrivileges()
啓動自己的新副本,但是這又要求用戶提交給authn。launchd
作業,它可以在系統launchd
上下文中進行通信。與該作業通信會導致launchd
調用它,並且可能會將其配置爲在root用戶下運行。現在要完成這個任務,需要通過安裝程序(在這種情況下用戶通過身份驗證)或通過服務管理框架的API(再次,用戶需要身份驗證來批准該任務)來部署該任務。launchd
作業來讓該作業以UID 0執行自己。如上所述,這涉及到寫作得很差的launchd
作業。所以基本上可以通過一些選項來實現,但所有可靠的方法都需要用戶進行身份驗證,並且該工具已經以可以在根環境中運行的方式進行部署。我實際上寫了一本關於這個東西的整本書......特別參見Professional Cocoa Application Security的第6章。
請注意,所有的除setuid
選項(我不建議你使用)實際上涉及到fork()
創建一個單獨的過程中,無論是通過調用進程或launchd
。這意味着您實際上可以擁有兩個單獨的可執行文件:一個用戶與之交互,另一個執行特權任務。這比將所有功能放在一個應用程序中更好,所以我建議採用這種方法。
是的。例如:
#!/bin/sh
su root
# Do things as root here, if authorized
這似乎相關http://stackoverflow.com/questions/4556186/access-private-etc-with-c您的問題。 – ditkin 2011-05-28 12:34:01