2012-01-23 54 views
2

我從一些書中讀到seuuid與euid和保存的UID一起可以用來臨時刪除root權限。這種情況是:是否有缺陷使用seteuid臨時刪除root權限

  1. 將euid設置爲非root用戶。
  2. 做一些不需要root權限的事情。
  3. 設置euid再次根(這是因爲root仍然是保存的UID)。

我認爲這是有缺陷的。在步驟2中,某些惡意代碼也可能會對root執行seteuid操作,因此這種刪除root權限的方法並不能防止劫持代碼獲得root權限。我的分析是否正確?如果是這樣,那麼seteuid-on-saved-UID可以用於什麼?

回答

3

您擔心惡意代碼也可能會將有效的UID恢復到已保存的UID,這是合法的。如果你擔心這一點,也許你不應該首先使用setuid root程序。 (LD_PRELOAD和其他類似的東西通常令人擔憂;當程序以setuid特權運行時,它們也受到限制。)

但是,通常情況下,該機制用於分叉子代,其中子代將執行其他某個進程沒有提升的特權,因爲保存的UID不會被執行的進程保留。如果惡意代碼在exec()之前設法接管,那麼您仍然有問題。在exec()之後,惡意代碼只具有真實UID的權限,用戶可以完成惡意代碼所做的任何操作。

+0

是的。所以seteuid-on-real-uid很有用。但是無論如何都應該避免使用seteuid-saved-uid,是嗎? – Middleware

+1

seteuid-to-saved-uid也有其用途 - 但應謹慎對待。我在DBMS上工作; (部分)主服務器引擎以root權限運行;它使用'seteuid()'在root和'相關的用戶ID'之間切換,然後再次代表相關用戶創建文件。相關用戶根據其請求的要求而變化。即使使用COW,fork()的成本對於該系統來說也是相當可觀的 - DBMS可以使用主(共享)內存,sempahore集的GiB,並且您可以將其命名。 –

0

由於沒有身份驗證的情況下可能會發生特權升級,因此Setuid一般存在缺陷。即使是root權限的概念也有點過時了。例如,大多數平臺都更新了獲取額外特權的方法,無論它是從unix上的「sudo」shell還是Solaris上的「pfexec」。

此外,他們通常擁有更多細粒度的控制權,以便提升他們所需的權限。使用setuid,它的全部或者沒有,但是對於Solaris上的RBAC,框架提供了用於指定您需要的確切權限的方法,通常是打開文件,讀取目錄等較低級別的東西。

In一般來說,我認爲現在應該避免使用setuid,而是使用更新的API。

相關問題