我正在研究需要使用dd的應用程序(我在應用程序包中使用shell腳本執行此操作,從應用程序本身收集參數,進行一些檢查然後啓動dd )。NSTask,命令行工具和根
爲了做這個操作,我需要用root調用dd,並且我已經在StackOverflow中查看了幾個解決方案。最簡單的實現在我看來這是一個http://www.sveinbjorn.org/STPrivilegedTask
問題是,我的NSTask使一些複雜的讀/寫操作(不存在STPrivilegedTask),並不需要全部特權。
所以我寫了一個小型的輔助工具在c中,用我的應用程序中的正確參數調用我的腳本。我認爲解決方案是使用STPrivilegedTask來SUID一旦飛行我的小幫手工具,所以我可以啓動它(以及我的腳本和DD)與根,並在成功啓動後不久,我將輔助工具設置爲非SUID(如果有任何錯誤,應用程序退出,應用程序啓動等等,我也會這樣做,以便更安全)。
我實現了它,工作得很好,也許它不是完美的,但我認爲,所有內部的捆綁,並在SUID中使用輔助工具只是爲了啓動聽起來足夠安全。
有什麼想法?
謝謝!
嗨Jsmp,我嘗試了沙盒系統,因爲我在過去使用它,但它不是我需要什麼,我只需要以root身份執行任務(也可以用於我需要的其他命令,例如mount和umount等)。任何人對我的helperTool臨時SUID解決方案有一些建議?可能的漏洞和替代品? – opoloko 2011-04-18 10:44:55
除此之外,我還在helperTool中實現了代碼,以便在自己的進程結束時將自己從suiled變爲non suided。所以它從應用程序中獲取SUID,它會使用正確的參數啓動腳本,並在自動完成後自行創建SUID。似乎是一個很好的補充安全步驟.. – opoloko 2011-04-18 13:06:43
嗨opoloko,我看到你只是想保持文件的安全方式。從我的角度來看,仍然存在這樣的情況,即用戶在解除應用程序之前可以使用SUID將應用程序保留下來。 – jsmp 2011-04-20 18:10:19