2014-03-02 40 views
1

C中有setgroups(size_t size, const gid_t *list)方法,它允許我設置調用進程的補充組標識符。使用C在linux中設置用戶的補充組標識符使用C

問題1:

但爲了運行此我們需要有適當的權限所以唯一的辦法我到沒有得到不允許操作錯誤是用root運行它運行此程序。但是這是否意味着使用這種方法我們只能設置根組?

問題2:

在另一方面我打算做的是給特定的用戶和GID的我想設置指定的GID的作爲補充組給定用戶的列表。在C/C++中是否有爲此定義的方法?

在此先感謝

+1

我記得'setgroups'只能由特權用戶調用。這並不一定意味着root,而是一個擁有CAP_SETGID權限的進程。 root可以明顯地設置任何gid,而不僅僅是它自己的組。我不是100%確定你的第二個問題。 setgroups可能是你想要的,但我不記得涉及的權限問題。你應該看看「能力」文獻。 – Duck

回答

0

技術上Linux下你需要的CAP_SETGID能力,這不一定是根(但通常是)。

請注意,這適用於有效的gid,而不是實際的gid。另請注意,調用過程的實際/有效gid不一定與實際/有效uid相同。您應該查看關於setuid,seteuid,和setegid的聯機幫助頁以獲取更多詳細信息,但一種情況是SUID程序會將setegid返回給非特權組,然後使用setgroups