Вообщем такая задача, в ЦГИ-БИН сидит программа, которая даёт информацию о работе сервера, но я немогу запускать такие вещи как ipfw, т.к. апач запущен с правами apache, а не рут. Есть ли возможность безопасно получать для запуска программы права рута?
sudo
>sudo
Но sudo требует пароль для того, чтоб запустить что-то... А если я прямо в скрипте напишу пароль - это будет уязвимостью.. :(Может кто-нить написать пару строк примера, как такие вещи далаются?
Вообщем написал скрипт, поставил ему права 104775 owner root.
В sudoers написал:
www ALL=/usr/local/apache/cgi-bin/myscript
Но он не запускается, пишет: can't do setuid
Где я ошибся?
>Вообщем написал скрипт, поставил ему права 104775 owner root.
>В sudoers написал:
>www ALL=/usr/local/apache/cgi-bin/myscript
>Но он не запускается, пишет: can't do setuid
>Где я ошибся?
Может запускаете:
/usr/local/apache/cgi-bin/myscript,вместо
sudo /usr/local/apache/cgi-bin/myscript
???
>Может запускаете:
>/usr/local/apache/cgi-bin/myscript,
>
>вместо
>
>sudo /usr/local/apache/cgi-bin/myscript
>
>???Я запускаю /usr/local/apache/cgi-bin/myscript, а sudo он сам должен делать, т.к. set user ID on execution стоит. Я же немогу заставить апач набирать пароль.. :)
Во всяком случае на Линухе компилированные программы так запускались.
Сейчас скрипт написан на перле и под БСД. Но думаю разницы никакой не должно быть...
>>Может запускаете:
>>/usr/local/apache/cgi-bin/myscript,
>>
>>вместо
>>
>>sudo /usr/local/apache/cgi-bin/myscript
>>
>>???
>
>Я запускаю /usr/local/apache/cgi-bin/myscript, а sudo он сам должен делать, т.к. set user
>ID on execution стоит. Я же немогу заставить апач набирать пароль..
>:)Что-то новенькое... Это с какой такой большой радости он САМ должен sudo делать. Типа исскуственный интелект что-ли :)))
>Во всяком случае на Линухе компилированные программы так запускались.
>Сейчас скрипт написан на перле и под БСД. Но думаю разницы никакой
>не должно быть...
Может стоит внимательнее доки про SUID бит и про sudo почитать?В sudoers прописать:
www ALL = NOPASSWD: /usr/local/apache/cgi-bin/myscript
Тогда никто паролей спрашивать не будет.
>>>Может запускаете:
>>>/usr/local/apache/cgi-bin/myscript,
>>>
>>>вместо
>>>
>>>sudo /usr/local/apache/cgi-bin/myscript
>>>
>>>???
>>
>>Я запускаю /usr/local/apache/cgi-bin/myscript, а sudo он сам должен делать, т.к. set user
>>ID on execution стоит. Я же немогу заставить апач набирать пароль..
>>:)
>
>Что-то новенькое... Это с какой такой большой радости он САМ должен sudo
>делать. Типа исскуственный интелект что-ли :)))Разобрался, со скриптами так нельзя, только компилированые проги так будут работать. :(
>>Во всяком случае на Линухе компилированные программы так запускались.
>>Сейчас скрипт написан на перле и под БСД. Но думаю разницы никакой
>>не должно быть...
>Может стоит внимательнее доки про SUID бит и про sudo почитать?
>
>В sudoers прописать:
>
>www ALL = NOPASSWD: /usr/local/apache/cgi-bin/myscript
>
>Тогда никто паролей спрашивать не будет.А как апачу сообщить, что этот скрипт должен запускаться через sudo?
Пробовал сделать так, чтоб один скрипт запускал другой через sudo - в шелле работает, в апаче - нет. В логах - ничего информативного.. :(Я уверен, что кто-нибдь сталкивался с такими задачами, помогите, плз!
>>Может стоит внимательнее доки про SUID бит и про sudo почитать?
Это замечание остается в силе :)))>А как апачу сообщить, что этот скрипт должен запускаться через sudo?
Да не надо ему ничего сообщать, все равно не поймет :)))>Пробовал сделать так, чтоб один скрипт запускал другой через sudo - в
>шелле работает, в апаче - нет. В логах - ничего информативного..
>:(
>В первом скрипте указан полный путь к sudo? (например /usr/bin/sudo)
>Я уверен, что кто-нибдь сталкивался с такими задачами, помогите, плз!
Пример (без sudo):
//suid.c
#include <unistd.h>main() {
setuid(0); //или setuid(uid);
execl("/bin/cat","/bin/cat","/etc/shadow",NULL);
}Закомпилить gcc -o suid suid.c
Сделать chmod 4770 suid
Сделать chown root:group suid
Теперь достаточно быть в группе group, чтобы просмотреть содержимое /etc/shadowЕсли поможет, то буду рад, если нет, то sorry :)))
>>>Может стоит внимательнее доки про SUID бит и про sudo почитать?
>Это замечание остается в силе :)))Читал! Не единажды!
>>А как апачу сообщить, что этот скрипт должен запускаться через sudo?
>Да не надо ему ничего сообщать, все равно не поймет :)))И я об этом :)
>>Пробовал сделать так, чтоб один скрипт запускал другой через sudo - в
>>шелле работает, в апаче - нет. В логах - ничего информативного..
>>:(
>В первом скрипте указан полный путь к sudo? (например /usr/bin/sudo)Вот! В этом заключалась проблема! Спасибо! Я думал это не критично.. ;(
>Пример (без sudo):
>
>//suid.c
>#include <unistd.h>
>
>main() {
> setuid(0); //или setuid(uid);
> execl("/bin/cat","/bin/cat","/etc/shadow",NULL);
>}
>
>Закомпилить gcc -o suid suid.c
>Сделать chmod 4770 suid
>Сделать chown root:group suid
>Теперь достаточно быть в группе group, чтобы просмотреть содержимое /etc/shadow
>
>Если поможет, то буду рад, если нет, то sorry :)))Так я тоже так делал, но мне надо это на перле! А в мане написано, что только для бинарников SUID работает.
Проблемма решена! Спасибо :)
>>Пример (без sudo):
>>
>>//suid.c
>>#include <unistd.h>
>>
>>main() {
>> setuid(0); //или setuid(uid);
>> execl("/bin/cat","/bin/cat","/etc/shadow",NULL);
>>}
>>
>>Закомпилить gcc -o suid suid.c
>>Сделать chmod 4770 suid
>>Сделать chown root:group suid
>>Теперь достаточно быть в группе group, чтобы просмотреть содержимое /etc/shadow
>>
>>Если поможет, то буду рад, если нет, то sorry :)))
>
>Так я тоже так делал, но мне надо это на перле! А
>в мане написано, что только для бинарников SUID работает.
>Имелось ввиду вместо /bin/cat написать /usr/bin/perl, а вместо /etc/shadow путь к перловому скрипту. sudo по сути делает примерно примерно тоже самое - устанавливает setuid(uid) и вызывает соответствующую прогу через exec, причем вызываемой программе устанавливать SUID совсем не нужно.
>Я же немогу заставить апач набирать пароль..В sudo есть такой параметр, как NOPASSWD.
Простите, а чем вам не угодил suexec в Апаче?