LINUX.ORG.RU

Запуск bash-скрипта на сервере с правами root через браузер

 , , , ,


0

1

Доброго времени суток!

Необходимо сделать так, чтобы со странички мог запускать скрипты bash от root. Безопастность будет на уровне самой странички так что, если человек оказался на страничке, то скрипт запускать. Пробовал это все сделать на PHP, но не вышло. От простого смертного пользователя еще хоть что-то получалось, а от root - нет.

Подскажите пожалуйста куда копать. ОС, на которой все это будет работать - CentOS 6.4.

Заранее спасибо!


Ответ на: комментарий от om-nom-nimouse

Потому что в suid не работает на скриптах. И не должен работать. Сделано как раз чтобы ногу труднее отстрелить было. Если у тебя все работает, то значит у тебя все сломалось.

Suntechnic ★★★★★
()
Ответ на: комментарий от drBatty

Подумай, почему этот код такой простой?

Поделись уже, почему. Только учти, что по условию, шелла у пользователей нет, скрипт отлажен, наличие триггерного файла проверяет, наличие параллельно запущенной своей копии проверяет, апач и скрипт запускаются в разных контейнерах OpenVZ/jail/etc., Папка с триггерами примонтирована между ними.

Как ты не понимаешь такой простой мысли, что создать файл может намного более широкое множество «вась»,

За ради бога, пусть создают. Скрипт выполнится и удалит его.

почему именно «от рута»? От рута - не нужно. Нужно от другого юзера.

Отлично. Что мешает запускать по крону скрипт от нужного пользователя? Если они находятся в разных контейнерах, им можно даже назначить один и тот же uid.

Очевидно, что этот триггер ещё и удалять файлы должен, потому директория должна быть доступна ВСЕМ НА ЗАПИСЬ, ну или скрипт должен иметь права рута. И то и другое - очевидная дыра.

И как ты планируешь эксплуатирвать «дыру» в скрипте, о котором тебе известно только то, что он где-то существует? Может, вообще в другом контейнере при этом? Не говорю уже про монтирование папок про NFS, что открывает возможности по защите ещё больше.

А то, что мне пофиг, до ваших правил.

Да за ради бога, хоть курицу во влагалище в магазине засовывай «назло Путену», вопрос не в злоумышленнике, а в апаче.

Для каталога это невозможно, даже с ACL.

Каталогу не требуется никаких особых разрешений. Он работает только как триггер. Максимум, чего можно попытаться добиться - запуск скрипта в непрерывном режиме.

а я вижу проблему. Контроля-то нет. Проблемы нет тогда, и только тогда, когда доступа нет.

Поэтому вместо отсутствия прямого доступа к скрипту предлагается прямой доступ к нему через sudo. У тебя действительно очень интересная аберрация сознания.

om-nom-nimouse ★★
()
Ответ на: комментарий от anonymous

suid на интерпретатор?

О, ещё один анонимный телепат. Нам такие нужны. Приглашаю на работу. Место и условия труда можете прочитать в моих мыслях.

om-nom-nimouse ★★
()
Ответ на: комментарий от om-nom-nimouse

Поделись уже, почему. Только учти, что по условию, шелла у пользователей нет, скрипт отлажен, наличие триггерного файла проверяет, наличие параллельно запущенной своей копии проверяет, апач и скрипт запускаются в разных контейнерах OpenVZ/jail/etc., Папка с триггерами примонтирована между ними.

я даже не знаю, что такое «Папка с триггерами примонтирована между ними.» Это выше моего понимания.

За ради бога, пусть создают. Скрипт выполнится и удалит его.

интересно, как это один openvz сервер будет создавать, другой удалять, а все остальные лососнут тунца в одной и той же «папке»?

drBatty ★★
()
Ответ на: комментарий от om-nom-nimouse

Отлично. Что мешает запускать по крону скрипт от нужного пользователя? Если они находятся в разных контейнерах, им можно даже назначить один и тот же uid.

зачем мне uid? Права какие?

И как ты планируешь эксплуатирвать «дыру» в скрипте, о котором тебе известно только то, что он где-то существует? Может, вообще в другом контейнере при этом? Не говорю уже про монтирование папок про NFS, что открывает возможности по защите ещё больше.

ну ты уже бредишь - ещё NFS приплёл… Что мешает оттуда через sudo выполнять? Что мешает всем (в т.ч. апачу) запретить этот скрипт читать?

Да за ради бога, хоть курицу во влагалище в магазине засовывай «назло Путену», вопрос не в злоумышленнике, а в апаче.

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

Каталогу не требуется никаких особых разрешений. Он работает только как триггер. Максимум, чего можно попытаться добиться - запуск скрипта в непрерывном режиме.

кто будет удалять триггер после отработки скрипта?

Поэтому вместо отсутствия прямого доступа к скрипту предлагается прямой доступ к нему через sudo.

а это не прямой доступ.

Приглашаю на работу. Место и условия труда можете прочитать в моих мыслях.

я тебе не подхожу. Ибо у тебя нет достаточных средств на зп.

drBatty ★★
()
Ответ на: комментарий от drBatty

как это один openvz сервер будет создавать, другой удалять, а все остальные лососнут тунца в одной и той же «папке»?

Это магия. Если ты не знаешь, как такое работает, ты мне не подходишь. Кстати, а вот эти твои «остальные» - это кто? На сервере больше нет никого.

зачем мне uid? Права какие?

600

Что мешает всем (в т.ч. апачу) запретить этот скрипт читать?

Ничего не мешает. Собственно, апачу лучше запретить читать и исполнять даже папку, в которой этот скрипт находится.

я - не предлагаю.

Ты просто предлагаешь запускать апачу разные скрипты напрямую, позволяя создавать для них окружение, отличное от предусмотренного их автором. Это уязвимость. Как ты хочешь от неё избавиться?

кто будет удалять триггер после отработки скрипта?

Скрипт же. Странный вопрос. Если не нравится решение с одним uid, можно добавить их в одну группу.

а это не прямой доступ.

Как это не прямой? А переменные окружения?

я тебе не подхожу. Ибо у меня нет достаточного опыта, а знания поверхностны.

Obvious fix.

om-nom-nimouse ★★
()
Последнее исправление: om-nom-nimouse (всего исправлений: 1)
Ответ на: комментарий от om-nom-nimouse

зачем мне uid? Права какие?

600

на «папку»? Оригинально.

Ничего не мешает. Собственно, апачу лучше запретить читать и исполнять даже папку, в которой этот скрипт находится.

facepalm

Ты просто предлагаешь запускать апачу разные скрипты напрямую, позволяя создавать для них окружение, отличное от предусмотренного их автором. Это уязвимость. Как ты хочешь от неё избавиться?

о каком авторе ты сейчас говоришь?

Скрипт же. Странный вопрос. Если не нравится решение с одним uid, можно добавить их в одну группу.

а можно и не добавлять, если юзать sudo.

Как это не прямой? А переменные окружения?

какие переменные? переменные будут такими, как нужно скрипту. апач тут _только_ запускает.

Obvious fix.

спасибо. Я действительно не разбираюсь в «папках с правами 600». Это для меня НЁХ.

drBatty ★★
()
Ответ на: комментарий от drBatty

на «папку»? Оригинально.

На файл. На папку - 700 для одного айдишника или 770 для одной группы.

facepalm

Вот, видишь, с sudo ты такого добиться не в состоянии. Уже лицерукствуешь от понимания, какая возможность от тебя ушла. ;-)

о каком авторе ты сейчас говоришь?

Кто может предусматривать окружение запускаемого скрипта? Наверное, автор «Войны и мира».

а можно и не добавлять, если юзать sudo.

А можно и добавить, и не обращаться напрямую к скриптам.

апач тут _только_ запускает.

Блажен, кто верует. Апач сам ничего не запускает, как мы вроде знаем. Запускает говноскрипт на говноPHP. Который, если я правильно понял, похачен злоумышленником. И от которого и нужно защитить сервер. И что мешает злоумышленнику перед запуском команды настроить для неё переменные окружения и прочее, для меня совершенно не ясно.

спасибо. Я действительно не разбираюсь в «папках с правами 600». Это для меня НЁХ.

У тебя и с восприятием написанного текста проблемы. Такой точно не нужен. Ты же ТЗ не поймёшь.

om-nom-nimouse ★★
()
Ответ на: комментарий от om-nom-nimouse

На файл. На папку - 700 для одного айдишника или 770 для одной группы.

дык это - плохой вариант.

Вот, видишь, с sudo ты такого добиться не в состоянии. Уже лицерукствуешь от понимания, какая возможность от тебя ушла

с sudo можно хоть 0000 поставить.

А можно и добавить, и не обращаться напрямую к скриптам.

устал я тебе объяснять, что нет никакой принципиальной разницы, как запускается скрипт. главное - запускается. С sudo он запускается сразу, и его проще контролировать. Во первых потому, что просто найти все точки запуска, во вторых - сама sudo проверяет всё, что нужно.

Блажен, кто верует. Апач сам ничего не запускает, как мы вроде знаем. Запускает говноскрипт на говноPHP. Который, если я правильно понял, похачен злоумышленником. И от которого и нужно защитить сервер. И что мешает злоумышленнику перед запуском команды настроить для неё переменные окружения и прочее, для меня совершенно не ясно.

злоумышленник вряд-ли сможет изменить скрипт, и надо быдлокодеру-скриптопейсателю сильно извратится, что-бы враг смог поменять команду. Но даже в этом случае sudo не позволит сохранить переменные апача для скрипта. Скрипт будет настроен с тем окружением, которое задано у пользователя, который должен запускать скрипт. Но даже если и поменяет, то не велика беда, если апачу всё запретить.

У тебя и с восприятием написанного текста проблемы. Такой точно не нужен. Ты же ТЗ не поймёшь.

ТЗ пока не было в этой теме.

drBatty ★★
()
30 июля 2013 г.
Ответ на: комментарий от drBatty

Давно не появлялся, но чтобы возобновить обсуждение, если это возможно, решил что-то типа ТЗ написать. Для начала опишу то, как я представляю будет со стороны порльзователя:

Кодеры пишут проект на java и собирают его при помощи Apache Maven. Сборка и подкладывание собранного *.ear-файла у меня запиханы в скрипты давным давно. Но надо вот чтобы как:

  • Прогер заходит на сайт
  • Вводит имя пользователя и пароль
  • На открывшейся страничке видит кнопочки типа «Запустить сервер А», «Остановить сервер А», «Пересобрать сервер А» и так далее для других инстанций.
  • Нажимает нужную кнопочку
  • Начинает работать sh-скрипт, соответствующий выбранному действию.
  • В идеале когда скрипт отработал (бывает проект и 6 минут собирается) на страничке вывелось соответствующее сообщение, например еще и с кодом выхода.

Вот собственно и вся идея.

ОС, на которых это предполагается заживить - CentOS 6.4 (у себя для тестирования использую Fedora 19)

MakPol
() автор топика
Ответ на: комментарий от MakPol

ну апач через sudo запускает нужный скрипт, параллельно со своей работой. sudo запускает скрипт от нужного юзера, который всё делает, и создаёт файл F. апач видит F и пишет «всё в порядке». Можно в F писать цифры, а апач будет рисовать прогрессбар. Можно в F писать итог(выполнено успешно).

drBatty ★★
()
Ответ на: комментарий от drBatty

ну апач через sudo запускает нужный скрипт, параллельно со своей работой. sudo запускает скрипт от нужного юзера, который всё делает, и создаёт файл F. апач видит F и пишет «всё в порядке». Можно в F писать цифры, а апач будет рисовать прогрессбар. Можно в F писать итог(выполнено успешно).

Звучит все очень даже не плохо, но пока я толком и скрипт то заставить выполняться не могу, что-то запутался. Если не сложно подскажите еще раз, каким из имеющихся путей попробовать?

MakPol
() автор топика
Ответ на: комментарий от MakPol

скрипт то заставить выполняться не могу

ЕМНИП в яве тоже есть system().

drBatty ★★
()
Ответ на: комментарий от MakPol

1

jenkins/hudson чем не? судя по описанию задач самое оно.

C1nde
()
Ответ на: комментарий от MakPol

сделай так чтоб страничка писала что нужно, например, в MySQL, а скрипт, пусть даже и на php, запустится по крону от нужного юзера, будет смотреть в MySQL с нужным интервалом (например 10 секунд), как запись появится - сделает свою работу и пометит запись выполненнной. ИМХО самый безопасный метод

r0ck3r ★★★★★
()
Последнее исправление: r0ck3r (всего исправлений: 2)

Кстати - shellinabox не подойдет?

aeX1pu2b
()
21 августа 2014 г.

все можно но зачем?

Для начала все нижесказаное мягко говоря небезопасно. Так же есть ряд способов реализации куда более простой по управлению удалено в частности ssh. Но тем не менее

1. Вариант, теоретический но должен сработать причин не работать не вижу, возьму класически чистую систему с чистым апачем работающим от юзера www-data:www-data в таком случае вам требуется добавить юзера www-data в группу 0 тем самым он будет админмо системы. Далее используя exec функцию пхп вы получите полный доступ до системы.

2. Создавая сайт можно указать от какого юзера будет работать виртуал хост, принудительно группу и юзера, для этого сайта

AssignUserId web19 client17 Сайт будет работать от него. Этому юзеру можно дать так же рутовые права. ну и можно попробовать вообще рута ему датЬ ;)

3. Написать собственную библиотеку к апачу, подключить ее на сайте и что уже она там будет делать ваше дело.

shambler81
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.