2015-12-17 3 views
-1

Мне нужно написать программу на C, которая открывает оболочку bash как root. Я не мог найти функцию, которая бы это сделала. Я пытаюсь что-то вроде этого:Open bash shell как root -script

system("bash"); 

, но я не знаю, что дальше

+1

Командой оболочки, которую вы, вероятно, хотите, является 'su', но для этого потребуется пароль. Вы не указали, должна ли ваша программа давать вам оболочку, не требуя пароля. Возможно, если ваш пользователь находится в списке _sudoers_, вы можете запустить 'sudo bash'. Или (опасно), вы могли бы иметь свою программу, принадлежащую root, с разрешением * setuid *. – paddy

+0

Я изменяю файл прав собственности на root, chown и permisson от chmod 777, и он не работает. Программа должна открывать bash как root без «sudo» или пароля. – Rysiek64

+0

@ Rysiek64 Как вы запускаете bash с правами root * без * программы C? – immibis

ответ

0

По умолчанию программа будет открывать оболочку и запускать другие программы, как тот же пользователь, который сам по себе работает, как. То есть, если вы запустите свою программу из учетной записи root, она будет выполнять другие программы с правами root. В противном случае вы можете попробовать это:

system("echo \"password\" | sudo -S bash");  # note the different quotes 

Но имейте в виду, что жесткое кодирование пароль является весьма нежелательным.

+0

Я пытаюсь использовать вашу идею, но ее ошибка, команда «mypassword» не найдена – Rysiek64

0

Поскольку вы спросили, как сделать это в C, вот идея, как вы могли бы сделать это на Linux:

#include <unistd.h> 
#include <sys/types.h> 
#include <sys/wait.h> 

int main(void) 
{ 
    int pid = fork(); 
    if (pid == 0) 
    { 
     # first argument: command to start ("sudo") 
     # second argument: program name for sudo ("$0" in shell) 
     # third argument: first argument to sudo, name of the command to execute as root 
     execlp("sudo", "sudo", "bash", NULL); 
    } 

    int status; 

    // wait for bash to finish 
    wait(&status); 

    return 0; 
} 

Проверено на Ubuntu 15.04.