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