Как запустить процесс с правами rootа, зная его пароль?

Тема в разделе "WASM.UNIX", создана пользователем SoftCreator, 8 ноя 2010.

  1. SoftCreator

    SoftCreator New Member

    Публикаций:
    0
    Регистрация:
    4 сен 2010
    Сообщения:
    36
    Уважаемые гуру, помогите мне, пожалуйста, не сломать мозг о малознакомый Unix, точнее iOS.

    Задача, в принципе, простая:
    - есть джейлбрейкнутый iPhone, в нем есть каталог, которым владеет root
    - я хочу скопировать в своей программе в этот каталог новый файл
    - я знаю пароль root - думаю, стандартный пароль ни для кого не секрет
    Как мне выполнить мою задачу? В Windows для этого есть CreateProcessAsUser, может, и в юниксах есть некий аналог?

    P.S Вот что я пробовал:
    - [не смеяться!!!] вызывал setuid(0), был послан ... достаточно далеко, свою ошибку осознал лишь позже :)
    - пробовал установить у своей программы права -rwsr-xr-x, но программа после этого не запускается iPhone, как будто код программы не подписан (ну, в принципе, зная подходы Apple, это логично)
    - пробовал воспользоваться OpenSSH и scp через 127.0.0.1, но это не наш метод (C), к тому же спрашивает, не хочу ли я сделать этот iPhone доверенным для самого себя :)

    P.P.S Поиск пробовал, не нашел такого. Google тоже не выручил. Одна надежда на настоящих профессионалов :)
     
  2. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    SoftCreator
    сырцы sudo тебе помогут
     
  3. SoftCreator

    SoftCreator New Member

    Публикаций:
    0
    Регистрация:
    4 сен 2010
    Сообщения:
    36
    Неа, не помогли. su/sudo - это проги с правами -rwsr-xr-x, в айфоне такое не катит
     
  4. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Как это не катит? su -с там не работает?
     
  5. SoftCreator

    SoftCreator New Member

    Публикаций:
    0
    Регистрация:
    4 сен 2010
    Сообщения:
    36
    О! su -c - это почти то, что нужно, спасибо!!!
    Но как я ему могу скормить пароль?
    Код (Text):
    1. echo password | su -c whoami
    просит ввести пароль, может, пайп не так делаю?
    Я пишу GUI-приложение, но если даже в консоли получится, это будет супер
     
  6. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Боюсь что никак, su проверяет чтобы ввод пароля шёл с терминала. Тут надо создавать свой терминал и слать ему пароль.
     
  7. SoftCreator

    SoftCreator New Member

    Публикаций:
    0
    Регистрация:
    4 сен 2010
    Сообщения:
    36
    А как создать свой терминал? Похоже, это то решение, которое нужно
     
  8. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Всякие openpty, forkpty, затем пишите в них как в файлы и всё должно работать.
     
  9. shsh

    shsh Member

    Публикаций:
    0
    Регистрация:
    3 янв 2008
    Сообщения:
    69
    оффтоп:
    мне вот интерестно откуда возникают такие "вопросы" , ведь любому нормальному человеку понтяно что
    1) надо получить рута
    - смотрим исходник того что его получает т.е. su
    2) сталкиваемся с проблемой контроля ввода с терминала
    - решаем конкретно этот вопрос напрмиер как выше предложили
    5 минут гугления и ну час максимум возни и потом еще 5 часов на "баги" в перемешку с перекурами, или лучше засрать форум )
     
  10. SoftCreator

    SoftCreator New Member

    Публикаций:
    0
    Регистрация:
    4 сен 2010
    Сообщения:
    36
    1) Я смотрел исходник su. su не получает рута, он имеет права -rwsr-xr-x, и поэтому запускается с правами root, после чего проверяет пароль, если все правильно, делает setuid() и setgid() нужного пользователя, затем запускает shell с правами этого пользователя, такую прогу я и сам могу написать, но айфон не разрешает выполнение юзеровских программ с такими атрибутами
    2) Я новичок в мире юниксов, перерыл весь гугл, но там советуют использовать echo password | sudo -S, только вот sudo по умолчанию на айфонах нет вообще, или некую утилиту expect, которой, опять таки, на айфонах по умолчанию нет

    Эти вещи мне были понятны, но специфика Apple внесла свои коррективы.

    Большое спасибо, я хотел получить именно такой ответ
     
  11. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    В unix защиту не так просто обойти, а тем более как я понял в айфоне(ограничений понаставили). Терминал конечно можно создать или открыть существующий, но оказалось что запись в него посредством write будет просто выводить сообщения, а не команды. Команды вводятся только с помощью клавиатуры. Наверно можно и это ограничение обойти, пока не знаю как. Но для чего запускать программы без ручного ввода пароля? Она будет как демон запускаться? В айфоне должно быть что-то типо скриптов автозапуска.
     
  12. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Если такое и возможно, то это дыра в системе безопасности. Не советую заниматься хаком айфонов, это не хорошо. ^)
     
  13. Mentor

    Mentor New Member

    Публикаций:
    0
    Регистрация:
    13 окт 2010
    Сообщения:
    67
    sudo -S - ввод из stdin, специально для таких случаев
     
  14. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Mentor
    Если я правильно понял человек хочет хакнуть айфон, сделать ботнет или ещё что. ^) Sudo по дефолту в айфоне нет, как впрочем и практически везде.
     
  15. SoftCreator

    SoftCreator New Member

    Публикаций:
    0
    Регистрация:
    4 сен 2010
    Сообщения:
    36
    Нифига себе меня в злодеи записали :)
    Я всего лишь хочу записать рингтон в каталог, которым владеет root.
    Все GUI-проги запускаются под пользователем mobile, который не может туда писать и оттуда удалять.
    А злобный iTunes за запись туда файликов хочет денег, что не есть гут.

    Программы sudo в айфоне по умолчанию нет, поэтому я ищу способ, который бы дал моей программе на время права roota для записи рингтона в каталог. Я планирую распространять эту программу впоследствии, и было бы неправильно просить пользователя: введите в поле "пароль" пароль "password" :)
     
  16. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    SoftCreator
    Так что, forkpty+execvp("su", (char*[]){"-c", "cp", "/tmp/file", "/root", NULL}) не сработал?
     
  17. SoftCreator

    SoftCreator New Member

    Публикаций:
    0
    Регистрация:
    4 сен 2010
    Сообщения:
    36
    Ну, не все сразу. Сейчас буду изучать этот forkpty incognita...
    Я же кроме как под винду никогда ничего и не писал.

    P.S. А куда там пароль-то девать????
     
  18. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    На, держи. Это правда linux'овый код, может его допилить надо будет под iOS.
    Код (Text):
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <unistd.h>
    4. #include <sys/wait.h>
    5. #include <pty.h>
    6. #include <string.h>
    7. #include <time.h>
    8. #include <errno.h>
    9.  
    10. void sigchld_hdlr (int signum)
    11. {
    12.     wait (NULL);
    13.     exit (0);
    14. }
    15.  
    16. int main ()
    17. {
    18.     int fd;
    19.     int pid;
    20.     static const char passwd[] = "пароль\n";
    21.     char *buf;
    22.     size_t len;
    23.     struct sigaction act = {.sa_handler = sigchld_hdlr};
    24.     sigemptyset(&act.sa_mask);
    25.     pid = forkpty(&fd, NULL, NULL, NULL);
    26.     if(pid == 0) {
    27.         execvp("su", (char*[]){"su", "-c", "whoami", NULL});
    28.         perror("execvp: ");
    29.         exit(1);
    30.     }
    31.     if(pid < 0) {
    32.         perror("forkpty: ");
    33.         return -1;
    34.     }
    35.     usleep(10000); /* su, по-крайней мере из coreutils, делает паузу после
    36.             * старта. */
    37.     sigaction(SIGCHLD, &act, NULL); /* для асинхронного уведомления о
    38.                      * скончавшемся дочернем процессе */
    39.     write(fd, passwd, strlen (passwd));
    40.     buf = malloc(1024);
    41.     while(1) { // бесконечный цикл, умирать будем из обработчика сигнала
    42.         len = read(fd, buf, 1024);
    43.         if(len > 0)
    44.             write(STDOUT_FILENO, buf, len);
    45.     };
    46. }
     
  19. SoftCreator

    SoftCreator New Member

    Публикаций:
    0
    Регистрация:
    4 сен 2010
    Сообщения:
    36
    О, спасибо, вечером приду с работы, опробую.

    OFF: Мне вот интересно - а среди создателей юникса не было профессиональных психиатров?
    Вчера весь вечер пытался понять, как работает fork() - первой ассоциацией было "раздвоение личности программы" :)
     
  20. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    SoftCreator
    Нет, дело обстояло в некотором смысле хуже. Почитайте TAOUP Эрика Раймонда. Если читать лень, то переходите сразу к приложениям, там есть коаны про Гуру Foo. Читайте их и ищите в них смысл.
    UNIX -- это философия. И даже религия. И Создатели UNIX'а, легендарные Гуру, донесли до нас эту религию, воплотив её в операционной системе.