1

Мне жаль, что я не знаю, это правильное место или нет. Я тороплюсь, гоняюсь со временем. У меня есть файл, который имеет следующие атрибуты на машине Linux. (ядро 2.6.26)

-rwxrwxrwx 1 root root 25 2015-06-01 08:08 /usr/bin/runme

У меня нет привилегий root на компьютере, и я не знаю пароль root. Возможно ли запустить этот скрипт как владелец. Я написал и скомпилировал некоторый код c в другом файле, но он не работал. Код, который я использовал;

#include <unistd.h>
#include <errno.h>

int main(void) {        
     setuid(0);
     system("/bin/bash /usr/bin/runme"); 
}

Тогда кто-то сказал, что используют execve, но результат не изменился. Вот код, когда я использую execve;

#include <unistd.h>
#include <errno.h>

int main(void) {        
        extern char * const environ[];
    char * const command[] = {"runme", NULL, NULL, NULL, NULL,NULL, NULL};
    execve("/usr/bin/runme", command, environ);
}

2 ответа2

3

Это возможно, но вы должны быть очень осторожны - у вашего скрипта есть глобальные права на чтение и запись, что означает, что любой может его изменить, и, следовательно, может делать что угодно как root.

Это дыра в безопасности для волос. Если вы хотите, чтобы обычный двоичный файл запускался от имени пользователя, вам нужно добавить флаг setuid в двоичный файл с помощью chmod g+s . Это вам придется сделать как root, поскольку это также открывает огромную дыру в безопасности, если вы этого не сделали.

Если вы хотите сделать со сценарием ... это зависит от языка сценариев. Некоторые (на самом деле - многие) просто откажутся работать из-за того, как они реализованы - опять же, риск для безопасности.

Я хотел бы предложить, чтобы root (sic), который здесь идет, это смотрел на sudo - это «супер-пользователь делает», и позволяет непривилегированным пользователям запускать команды как привилегированные (или root) учетные записи. Затем - после настройки - вы можете:

sudo /path/to/script

Хотя, я все еще не хотел бы оставить этот мир сценариев доступным для записи. Это все еще угроза безопасности.

Если у вас нет root, нет пароля root и нет доступа администратора ... тогда я бы предположил, что это потому, что это НЕ ваша система, и вы перестанете пытаться сделать это, потому что это, вероятно, злоупотребление компьютером и может быть преступлением, в зависимости от того, где ты живешь.

2

Невозможно (без использования уязвимости) запустить скрипт (или любой исполняемый файл) от имени другого пользователя, если только этот пользователь не предоставил вам это право в какой-то момент.

Для "настоящих" исполняемых файлов это можно сделать с помощью бита setuid, который может быть установлен владельцем файла. Для сценариев современные среды обычно игнорируют бит setuid, поэтому вам понадобится какая-то оболочка (либо пользовательская, либо sudo). См. Https://unix.stackexchange.com/questions/364/allow-setuid-on-shell-scripts для получения дополнительной информации.

Ваш конкретный случай - отличный пример того, как бит setuid может быть опасным. Наличие бита setuid для файла, доступного для записи и выполнения, позволит вам выполнить любую команду в качестве владельца файла. Поскольку владелец файла на самом деле является пользователем root, замена содержимого такого файла, например, содержимым bash предоставит вам корневую оболочку.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .