Возможно ли в Linux запустить скрипт от имени владельца файла?

Возможно ли в Linux запустить скрипт от имени владельца файла?

Извините, что я не знаю, правильное это место или нет. Я тороплюсь, гонюсь за временем. У меня есть файл со следующими атрибутами на машине 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);
}

решение1

Это возможно, но с этим нужно быть предельно осторожным — ваш скрипт имеет глобальные права на чтение и запись, что означает, чтолюбоймог изменить его, и, следовательно, мог сделатьчто-либокак 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 предоставит вам root shell.

Связанный контент