Как повысить привилегии в системе без sudoers?

Eсть машина на FreeBSD и там нет возможности установить пакет sudo и соответственно получить файл sudoers(ну вот никак).
Есть ли какой вариант, используя команды chmod и chown, или еще что нибудь добиться выполнения скрипта от имени root обычным пользователем минуя авторизацию?
Конкретно требуется ребутать apache2 от обычного пользователя, типа
service apache2 restart
Пробовал добавлять этого пользователя в группу apache, падает при поднятии сокета http 80(<1024 требуют авторизации и рутизации)
  • Вопрос задан
  • 386 просмотров
Решения вопроса 2
karabanov
@karabanov Куратор тега Linux
Системный администратор
Попробуй setuid бит chmod u+s <filename>
Исполняемый файл с установленым setuid битом запускается c правами владельца, если это root, то от root.
Но это дыра в безопасности...

Есть ещё setgid chmod g+s <filename> запускать от имени группы, возможно он подойдёт лучше. Или нет...

Если не подойдёт, то удалить биты можно заменив "+" на "-":
chmod u-s <filename>
chmod g-s <filename>

PS
Собсвенно sudo и позволяет повышать привилегии за счёт установленного setuid бита:
~$ which sudo
/usr/bin/sudo
~$ ls -alah /usr/bin/sudo
-rwsr-xr-x 1 root root 163K янв 19  2021 /usr/bin/sudo
~$

-rwsr-xr-x это и есть setuid бит.
Ответ написан
@none7
Для скрипта никак. Придётся писать обёртку на компилируемом языке, которая вызовет функции setuid и setgid, а затем запустит скрипт. На бинарник обёртки уже можно поставить флаг S как написал Александр Карабанов. Пример обёртки:
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>

int main() {
  setuid(0);
  setgid(0);
  system("/path/to/script");
}

При этом естественно владельцем файла должен быть пользователь чьи права нужно получить. То есть для данной обёртки нужно выполнить chown root:root /path/to/file. Правда программа с UID==0, может установить себе любой UID. Вот так вот и работают sudo и su.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
CityCat4
@CityCat4 Куратор тега Информационная безопасность
//COPY01 EXEC PGM=IEBGENER
Не имея рутовых прав - никак.
Для скрипта - никак вообще, хоть с правами, хоть без них
Для программы с правами - через setuid
Ответ написан
Комментировать
saboteur_kiev
@saboteur_kiev Куратор тега Linux
software engineer
Можно настроить логин под рутом через ssh ключ или даже пароль. Для безопасности запретить логин под рутом удаленно, только локальная авторизация, когда ты уже зашел на сервер под своим юзером.

Можно поправить pam.d чтобы разрешить su на рута без пароля

Можно на сам httpd сделать suid, chown root:root но в конфиге указать apache юзера - апач сам переключит

Ну есть еще один хитрый вариант - поднимать апач на непривелированном порту, типа 8080, и в iptables сделать редирект с 80 на 8080. Тогда апач можно запускать свободно от имени юзера, а сайт будет работать и на 80 и на 8080.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы