簡體   English   中英

以非root用戶身份調用外部shell腳本失敗

[英]unsuccessfully call external shell script as non-root user

我希望A用戶做為B用戶的一些工作。 如果B是root用戶,則可以,但非root用戶失敗。 以下是基本代碼:

root.c:

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

int main()
{
    setuid( 0 );
    system( "/tmp/script_of_root.sh" );

    return 0;
}

script_of_root.sh:

#!/bin/sh
echo $RANDOM >> /tmp/file_of_root

播放

$ cd /tmp
$ cc root.c -o root
$ su -
# chown root.root /tmp/root
# chmod 4755 /tmp/root
# exit
$ ./root

執行“ ./root”后,文件“ / tmp / file_of_root”將被更新。 但是,如果我將相同的內容應用於非root用戶,則無法使用。 代碼:

foob​​ar.c但是:

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

int main()
{
    setuid( 1001 );    // uid of user "foobar"
    system( "/tmp/script_of_foobar.sh" );

    return 0;
}

script_of_foobar.sh:

#!/bin/sh
echo $RANDOM >> /tmp/file_of_foobar

播放

$ cd /tmp
$ cc foobar.c -o foobar
$ su -
# chown foobar.users /tmp/foobar
# chmod 4755 /tmp/foobar
# exit
$ ./foobar

如果我以其他普通用戶身份(而不是“ foobar”本身)運行“ ./foobar”,那將是錯誤的:

/tmp/script_of_foobar.sh: line 2: file_of_foobar: Permission denied

我很困惑。 為什么第二種情況不起作用?

最好的祝福。

僅當您是root用戶或有效UID為1001時,foobar.c中的setuid調用才會成功。

所以。 如果您不是root用戶,則setuid(1001)將失敗,並且您將沒有必需的權限來覆蓋“ foobar”擁有的文件。

從輸出看來,您的非root用戶可以執行script_of_foobar.sh,但無法寫入/ tmp / file_of_foobar。 / tmp的權限是否可能關閉? 我認為應該將其設置為1777。

暫無
暫無

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

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