безопасное использование php exec shell_exec и т.п.

Тема в разделе "Администрирование серверов", создана пользователем Qwest-fx, 30 сен 2014.

Модераторы: mefish, stooper
  1. Qwest-fx

    Qwest-fx Постоялец

    Регистр.:
    3 апр 2007
    Сообщения:
    129
    Симпатии:
    39
    Доброго времени суток, интересует информация как реализовывать безопасное использование например ImageMagick, или других внешних программ, которые нужно выполнять через shell.
    И в случае если хост будет взломан, не допустить выполнение команд непосредственно на сервере.

    В большинстве мануалов, описано только использование /usr/bin/false (у меня так)
    nginx+apache+mod_php
    Но мне нужно ограниченное использование оболочки.
    Большая просьба оперировать примерами, а не только ссылками на man.
    В моём случае нужно вызывать unoconv
    Что посоветуете? Какие реализации используете Вы на своих серверах?
     
  2. ykpon

    ykpon

    Регистр.:
    8 дек 2012
    Сообщения:
    248
    Симпатии:
    143
    apache2-mpm-itk и /usr/bin/false. Можешь спокойно использовать shell_exec. Дальше своей директории тебя никто не пустит и страшного ничего не сделают.
     
  3. metsys

    metsys

    Регистр.:
    27 апр 2014
    Сообщения:
    380
    Симпатии:
    384
    задай разрешение апачу на запуск нужного софта (желательно с конкретными параметрами, во избежание злоупотребления в случае взлома)
    /etc/sudoers
    apache user_name =NOPASSWD: /usr/bin/convert

    это то что ты хотел?
     
    Qwest-fx нравится это.
  4. ykpon

    ykpon

    Регистр.:
    8 дек 2012
    Сообщения:
    248
    Симпатии:
    143
    Зачем? А если у него несколько пользователей на сервере? Тогда каждый сможет использовать это.
     
  5. Libert

    Libert

    Регистр.:
    11 сен 2010
    Сообщения:
    158
    Симпатии:
    59
    в /etc/sudoers.d/ добавь
    # /etc/sudoers
    #
    # This file MUST be edited with the 'visudo' command as root.
    #
    # See the man page for details on how to write a sudoers file.
    #

    # Host alias specification

    # User alias specification

    # Cmnd alias specification
    Cmnd_Alias APACHECMNDS = /sbin/route, /sbin/iptables, /bin/bash
    # User privilege specification

    Defaults!APACHECMNDS exempt_group=secureservice
    Ну и в Cmnd_Alias пиши чего нужно из прав, а юзеру, из под которого стартует сервис добавляй группу secureservice
    А вобще не морочься этой фигнёй и поставь OSSEC, как хостовую IPS, Suricata, как сетевую IPS и к ним концентратор, он-же SIEM Prelude. Итог: все атаки на сетевом уровне отбивает Suricata, все хостовые атаки отбивает OSSEC, события группируются по IP в Prelude и если хочешь - можешь коррелировать их. И конкретно можешь прописать любое своё правило, например слать алерт и дропать того, кто shell использует.
    Есть ещё более сложный вариант, если речь идёт о веб сервере - установить WAF, например mod_security, под nginx он тоже собран, незнаю как сейчас, но год назад не очень стабильным был. Под nginx есть ещё NAXSI как WAF. Правила можешь взять из открытых источников OWASP Comunity.
    Ну и настроить мандатный доступ грамотно.
    Если будешь играться с настройками сервера в плане безопасности, тестируй потом сервер яндекс.танком, иначе бывают проблемы потом, появляются неожиданные узкие места или какие-нибудь мерзкие сегфолты.
     
    Qwest-fx нравится это.