В некоторых экспериментах кажется, что setresuid/setresgid работает по-разному в C по сравнению с Python, и я не совсем понимаю, почему. Если у меня есть следующая короткая программа C:Почему setresuid/setresgid работает в Python по сравнению с C
#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)
и сценарий питона имеет 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 syscalls только возвращает -1. Вы можете напечатать возвращаемое значение 'setresuid()'? – chqrlie
Возможно, вы захотите спросить что-то вроде: «как я могу предоставить системные привилегии для программы python, аналогичной тому, как я« setuid »скомпилировал двоичный файл?» потому что теперь на ваш вопрос ответили, но у вас, вероятно, все еще есть проблема, которая должна быть решена. –