它的一些實驗似乎setresuid /的setresgid在C工作與不同的Python和我不太知道爲什麼。如果我有以下的短的C程序:爲什麼setresuid /的setresgid Python中的作品不同與ç
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
setresuid(999, 999, 999);
setresgid(999, 999, 999);
system("/some/program");
return 0;
}
和二進制有setuid位和二進制是在組999和所有者999,運行這個二進制文件以其他用戶身份運行/一些/程序作爲用戶999這是你所期望的,因爲我相信setuid位背後的想法是允許程序以文件的組/所有者權限運行。
在另一方面,如果我有以下的短Python程序:
#!/usr/bin/python
import os
import subprocess
os.setresuid(999,999,999)
subprocess.check_output('/some/program', shell=True)
和python腳本有setuid位,在組999和用戶999所擁有,運行腳本作爲另一個用戶給出錯誤:
Traceback (most recent call last):
File "/foo/bar/sample.py", line 5, in <module>
os.setresuid(999,999,999)
OSError: [Errno 1] Operation not permitted
任何想法,爲什麼這可能是?
是的,Python腳本有setuid位設置爲好。我更新了我的描述。 – blischalk
我的猜測是Python運行時抱怨無效操作,而C系統調用只返回-1。你能打印'setresuid()'的返回值嗎? – chqrlie
您可能更喜歡這樣的問題:「我如何將系統特權授予python程序,類似於我將setuid編譯的二進制文件?」因爲現在你的問題得到了解答,但你可能仍然有一個需要解決的問題。 –