Выполнение команды линукса от имени другого пользователя C/C++
Модератор: Модераторы разделов
-
LuckyStr
- Сообщения: 159
- ОС: Fedora
Выполнение команды линукса от имени другого пользователя C/C++
Пусть есть программа на C/C++, она запущена под каким-либо пользователем (при необходимости возможно даже рутом), может ли она выполнить команду линукса от имени другого пользователя, если да то как это сделать?
Это наш химический дом для печальных жителей Земли!
-
RasenHerz
- Сообщения: 1341
- ОС: Arch Linux amd64
Re: Выполнение команды линукса от имени другого пользователя C/C++
setuid/seteuid и иже с ними
-
LuckyStr
- Сообщения: 159
- ОС: Fedora
Re: Выполнение команды линукса от имени другого пользователя C/C++
как-то не очень понятно, пишу:
Код: Выделить всё
#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++
если компилируете с gcc, а не g++, то к опциям копиляции надо добавить -lstdc++