我有一個總是由root用戶啓動的ruby腳本。該腳本具有一個稱爲fou()
的特定功能。這個函數需要作爲用戶'otherguy'而不是'root'來執行。我如何切換用戶中ruby腳本,執行該功能,然後切換回根?如何在紅寶石腳本中切換OS用戶?
需要被一個進程
無子進程
OS特定代碼是值得歡迎的,只要將所有的工作/大多數UNIX系統。
編輯:我真的很喜歡,而無需使用外部寶石的解決方案,只是什麼內置Ruby2.0.0
我有一個總是由root用戶啓動的ruby腳本。該腳本具有一個稱爲fou()
的特定功能。這個函數需要作爲用戶'otherguy'而不是'root'來執行。我如何切換用戶中ruby腳本,執行該功能,然後切換回根?如何在紅寶石腳本中切換OS用戶?
需要被一個進程
無子進程
OS特定代碼是值得歡迎的,只要將所有的工作/大多數UNIX系統。
編輯:我真的很喜歡,而無需使用外部寶石的解決方案,只是什麼內置Ruby2.0.0
隨着Process::Sys.seteuid(integer)
和Process::Sys.setegid
你可以改變有效user id
和group id
。不要與Process::Sys.setuid(integer)
和Process::Sys.setgid(integer)
混淆。我認爲
Process::Sys.seteuid(12345)
Process::Sys.setegid(54321)
fou()
Process::Sys.seteuid(0)
Process::Sys.setegid(0)
是你在找什麼(與Linux)。
是的,這是關於它:)發現這篇文章後問這個問題。幫了很多:http://timetobleed.com/5-things-you-dont-know-about-user-ids-that-will-destroy-you/ –
你會如何期待這個工作沒有子進程?在你的情況下,用戶「root」已經在運行這個文件,我不知道如何以另一個用戶的身份運行這個文件的一部分,而不分散最終成爲子進程的進程。老實說,我不知道你會如何在任何環境中做到這一點,無論使用什麼語言。 [分叉的例子](http://brizzled.clapper.org/blog/2011/01/01/running-a-ruby-block-as-another-user/)如果你改變主意 – engineersmnky
@engineersmnky是的我我開始接受這樣的結論,這是不可能的。我一直在尋找一段時間。 –