РЕШЕНО: setuid() выполняеться не для всех?
Модератор: Модераторы разделов
-
LuckyStr
- Сообщения: 159
- ОС: Fedora
РЕШЕНО: setuid() выполняеться не для всех?
Есть не большая программа. где используется функция setuid(). Программа запускается под рутом. и для одних uid она выполняется успешно а для других нет. По какому принципу она решает кому вернуть 0 а кому нет?
Это наш химический дом для печальных жителей Земли!
-
nesk
- Сообщения: 2268
- Статус: Линукссаксовец
- ОС: MS Windows XP Home SP3
Re: РЕШЕНО: setuid() выполняеться не для всех?
Анализируйте errno в случае ошибки setuid.
Насколько я помню, из рута можно переключиться в кого угодно.
А из обычного пользователя только в действительный или сохраненный id.
То есть переключившись от рута на пользователя, можно потом себе вернуть рута.
( но это так. на вскидку, я точно не помню. в общем случае man 2 setuid )
А вообще могли бы и показать программу и результаты её работы. А то все это вилами по воде
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.
0xDEFEC8ED
0xDEFEC8ED
-
LuckyStr
- Сообщения: 159
- ОС: Fedora
Re: РЕШЕНО: setuid() выполняеться не для всех?
Код: Выделить всё
#include <iostream>
using namespace std;
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main() {
pid_t result = fork();
if (result==-1) {
cout<<"error fork()"<<endl;
return 1;
}
if (result==0)
{
int status=setuid(501);
if (status==0)
{
sleep(20);
system("whoami >/media/disk/log");
}
}
return 0;
}вот такая программа. И почему-то от пользователя 501 можно выполнить, а от 500 нельзя.
setuid пишет: Operation not permitted
Справка пишет: If uid is not the same as the real UID of the process, setuid() succeeds only if the process has appropriate privileges.
т.е. setuid может установить любого пользователя если процесс имеет соответствующие привилегии. Имеет ли такие привилегии процесс запущенный под рутом или их надо как-то иначе назначать?
Это наш химический дом для печальных жителей Земли!
-
diesel
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
Re: РЕШЕНО: setuid() выполняеться не для всех?
Это в Федоре? Приколами SELinux это не может быть?
-
LuckyStr
- Сообщения: 159
- ОС: Fedora
Re: РЕШЕНО: setuid() выполняеться не для всех?
нет это не приколы selinux т.к. selinux отключен. Это мой косяк, т.к. программа приведенная здесь не совсем та, в настоящей программе я использую многопоточность и каждый поток пытаеться использовать свой uid и как далее выяснилось один процесс может получить лишь один uid, от кого бы он не был запущен. Признаю свою вину, что ввел вас в заблуждение приведя не верный код, правда меня можно понять, я думал что они практически идентичны.
Это наш химический дом для печальных жителей Земли!