簡體   English   中英

如何在非root用戶的程序中設置setuid位?

[英]How to set the setuid bit in a program of a non-root user?

我試圖使用setuid位設置使python腳本可執行。 屬於用戶'bgmc'的程序必須在'/ home / bgmc'目錄中創建一些文件,但是由另一個用戶'client'調用。 實際上,我不希望用戶'客戶'更改程序創建的文件。 我用一個c-wrapper來調用程序(參見shell腳本上的setuid ):

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
    setuid(0);
    system("/home/bgmc/myprogram.sh");
    return 0;
}

我設置了程序的setuid位。 當c編譯的程序屬於root時,程序運行良好並創建預期的文件。 然后,c編譯程序的屬性是:

8 -rws--x--x 1 root root 4657 Mar  2 16:25 myprogram

但是,當我將myprogram的用戶組更改為bgmc:bgmc時,程序無法再創建該文件:“權限被拒絕”。 我試圖改變這條線:

setuid(0);

有:

setuid(1002);

因為1002是'bgmc'的用戶ID(我使用了命令“id -u bgmc”),但這沒有幫助。

我寧願不給root用戶訪問該程序。 有辦法防止這種情況嗎?

由於您的問題在信息上非常稀少,所以不確定這一點,但您是否忘記在更改所有者后重置文件的權限? 在大多數系統上,任何所有權更改都會自動刪除setuid位,如果需要,您必須自己重新添加。

另請注意,setuid shell腳本是一個主要漏洞; 這就是內核不允許您直接創建shell腳本setuid的原因。 至少你應該:

  1. 使用execve而不是system來調用它,並且
  2. 清除環境中的所有內容(或將新的空環境傳遞給execve )。

就像現在一樣,任何能夠運行程序的人都可以通過控制環境變量來做任何他們喜歡的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM