Выполнение команды линукса от имени другого пользователя C/C++

Модератор: Модераторы разделов

Аватара пользователя
LuckyStr
Сообщения: 159
ОС: Fedora

Выполнение команды линукса от имени другого пользователя C/C++

Сообщение LuckyStr »

Пусть есть программа на C/C++, она запущена под каким-либо пользователем (при необходимости возможно даже рутом), может ли она выполнить команду линукса от имени другого пользователя, если да то как это сделать?
Это наш химический дом для печальных жителей Земли!
Спасибо сказали:
Аватара пользователя
RasenHerz
Сообщения: 1341
ОС: Arch Linux amd64

Re: Выполнение команды линукса от имени другого пользователя C/C++

Сообщение RasenHerz »

setuid/seteuid и иже с ними
Спасибо сказали:
Аватара пользователя
LuckyStr
Сообщения: 159
ОС: Fedora

Re: Выполнение команды линукса от имени другого пользователя C/C++

Сообщение LuckyStr »

RasenHerz писал(а):
16.08.2009 13:24
setuid/seteuid и иже с ними

как-то не очень понятно, пишу:

Код: Выделить всё

#include <iostream>
using namespace std;
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>

int main(void)
{pid_t result = fork();
if(result==0)
{setuid(501);
while(1)system("whoami >/home/andrew/log");
}
else
printf("parent ",getpid());
return 0;
}


у andrew uid=501 и /home/andrew - его домашний каталог.
по идее здесь должен был создаться файл /home/andrew/log с надписью "andrew", на терминале вывестись parent <pid1 процесса> и в процессах под пользователем andrew появиться процесс с pid2=pid1+1.
Но эта прога не хочет компилиться даже под рутом т.е. :

Код: Выделить всё

[root@COR up]# gcc -c setuid.cpp
[root@COR up]# gcc -o sek setuid.o
setuid.o: In function `__static_initialization_and_destruction_0(int, int)':
setuid.cpp:(.text+0x6c): undefined reference to `std::ios_base::Init::Init()'
setuid.cpp:(.text+0x71): undefined reference to `std::ios_base::Init::~Init()'
setuid.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
collect2: выполнение ld завершилось с кодом возврата 1

в итоге создаеться только объектный файл setuid.o.
Что я делаю не так?
Это наш химический дом для печальных жителей Земли!
Спасибо сказали:
Аватара пользователя
RasenHerz
Сообщения: 1341
ОС: Arch Linux amd64

Re: Выполнение команды линукса от имени другого пользователя C/C++

Сообщение RasenHerz »

если компилируете с gcc, а не g++, то к опциям копиляции надо добавить -lstdc++
Спасибо сказали: