2015-04-14 12 views
0

我目前通過我的服務器上的所有進程運行了user1 id。現在我們有一個新用戶user2,我們希望所有運行user1的進程運行user2。這是爲了保持一致性,因爲所有其他主機使用user2我應該遵循什麼東西,並且必須做的事情?請注意,user1user2都具有root權限。從user1當前運行的進程數量幾乎是服務器上運行的所有進程的一半。更改所有正在運行的進程的用戶標識而不停止它們

+2

這是一個奇怪的問題。使用您的系統上的工具(如useradd -l )來修改用戶。這改變了名稱而不是數字uid。您必須查看所有啓動文件並更改它們 - 然後重新啓動。祝你好運 - 你需要它。 –

+0

那麼唯一的辦法就是停止所有的流程,並從新的用戶ID開始呢? – Invictus

+0

我其實不會那樣做,但它確實回答你的問題。 @丹菲爾給了你一個更好的功能性答案。除了某些服務在沒有重新啓動的情況下可能無法重新啓動。 –

回答

1

我不相信這是可能的。一個進程本身可以調用setuid(),但試圖改變正在運行的進程的用戶身份可能會產生災難性後果:需要某些特權的進程突然失去它們導致異常,或者進程不應該具有某些特權(並且寫入不好)在獲得它們後會對系統造成損害。來自進程的歷史日誌數據可能不再有意義,並且如果進程具有任何與其用戶名(例如其主目錄中的文件)相關的任何類型的緩存或者緩存可能在沒有該進程的情況下變爲無效的特權任何方式知道這一點。

這樣做的「真正」方法是僅以新用戶身份重新啓動進程。

+0

那麼是唯一的方法來停止所有的過程,並從新的用戶ID啓動它們?我所有的文件和cronjob都與'user1'關聯,它需要現在從'user2'運行。我如何以儘可能最少的方式儘可能以最少的時間完成工作,因爲我的大多數進程都運行24 * 7 – Invictus

+0

同時考慮到兩個用戶都具有相同的權限。 – Invictus

相關問題