Изолирование Apache в Windows


На Web Security Blog опубликовано письмо Юрия Зайцева (Yury Zaytsev), в котором он описывает свой опыт по изолированию Apache в ОС Windows. Под изолированием понимается максимальное ограничение возможности доступа к системе, что существенно понижает возможность выполнения злонамеренных действий. Вот выдержка из этого письма:

Сперва необходимо создать локального пользователя (например, "Apache") (вы можете даже установить пароль для него, но особого смысла в этом нет) и запретить для него локальный вход и вход из сети с помощью политик групп. Затем надо запретить пользователю "Apache" любой доступ к локальным дискам (запрещается все: листинг каталога, чтение, запись, изменение). Это делается через вкладку Свойства(Properties)->Безопасность(Security). Теперь любой процесс, созданный с правами "Apache" не сможет даже просматривать каталоги.
У некоторых пользователей Windows вкладка Безопасность(Security) отсутствует. О том как это исправить можно прочитать тут.

Теперь нам надо разрешить этому пользователю чтение и листинг каталога сервера Apache (производиться через Свойства каталога(Properties)->Безопасность(Security)), а также разрешить запись для PID файла (/logs/httpd.pid) и для лог-файлов.
И в завершении необходимо подправить службу (service) сервера Apache. В диалоге Службы (вызывается с помощью команды services.msc или через Панель управления->Администрирование->Службы) выбирается служба Apache и в свойствах меняется вход в систему от пользователя "Apache".
Далее перезагрузка, проверка с помощью диспетчера задач (Task Manager), что процесс сервера запущен от имени пользователя "Apache", проверка работоспособности сервера. Готово.
Изложенный выше метод значительно повышает безопасность выполнения скриптов: теперь, даже если кто-то будет использует уязвимость вашего PHP/Perl скрипта (при использовании SAPI/mod_perl), он не только не сможет просматривать каталоги выше каталога сервера, но даже не сможет изменить какой-нибудь файл внутри каталога Apache, кроме тех, которые вы явно разрешили изменять.
Мой метод полностью копирует Unix-ную технологию chroot (и chmod). Это примитивно и эффективно. В любом случае это не раз избавляло меня от использования эксплоитов уязвимостей PHP скриптов.

These icons link to social bookmarking sites where readers can share and discover new web pages.
  • News2.ru
  • NewsLand.ru
  • del.icio.us
  • BobrDobr.ru
  • Ma.gnolia
  • Digg
  • Reddit
  • Technorati
  • Slashdot
  • Netscape
  • DZone
  • ThisNext
  • Furl
  • YahooMyWeb
Опубликовано в: Безопасность Июнь 15, 2006

17 Комментариев »

  1. Все правильно (за исключением chroot;) ), ничего лишнего.
    Большое спасибо за статью!

    Комментарий от ПИнеу — Июнь 20, 2006 @ 11:20 am

  2. Согласен, с chroot я глупость сморозил, погорячился :) Но мысль всё равно понятна. Спасибо за уточнение.
    Переводчику отдельное большое спасибо за замечательно выполненный перевод, к сожалению, редко это случается в наши дни :(

    Комментарий от Yury V. Zaytsev — Июнь 21, 2006 @ 11:34 pm

  3. Для какой версии апача? Взгляните http://issues.apache.org/bugzilla/show_bug.cgi?id=40079

    Комментарий от SPeller — Июль 21, 2006 @ 5:03 am

  4. Используемая мною в экспериментах и production версия - какая-то из 2.0.4x. Мда, очень интересно зачем нужна такая странная проверка, да и вообще explicit указание -d.

    Комментарий от Yury V. Zaytsev — Июль 21, 2006 @ 11:38 am

  5. Похоже, в статью лучше добавить оговорку на версию 2.2.х - чтобы апач мог просматривать родительские папки, иначе каюк. Кроме того, следует добавить, что если используется ПХП как модуль апача, апачу надо открыть доступ на запись к логу пхп и к папке sessiondata.

    Комментарий от SPeller — Июль 25, 2006 @ 7:41 am

  6. Как насчёт такого решения проблемы безопасного сервера под Windows:
    для него создаётся отдельный маленький раздел, куда разрешается доступ на чтение/листинг, а файлы конфигурации и всё, что нужно скрывать, защищаются какой-нибудь директивой Апача. Ведь к .htaccess, например, он доступа не даёт.
    Я новичок в этом деле, знаю IndexIgnore, но она не подходит.

    Комментарий от Андрей — Май 6, 2007 @ 7:34 am

  7. Что, если тем же .htaccess-ом закрыть доступ пользователям, куде не надо?

    Комментарий от Андрей — Май 6, 2007 @ 7:38 am

  8. Приветствую!
    У меня следующая проблема: если запретить доступ к диску C, а потом разрешить оный для каталога Apache (кстати, при этом надо отключить наследование прав доступа нажав кнопку “Дополнительно”), то Апач не стартует, говорит что служба завершилась с кодом 1 (Apache 2.0.50). Если отменить ограничения для пользователя Apache, все работает нормально.
    Та же проблема в случае, если я ограничиваю доступ на чтение каталога с виртуальными хостами. Апач просто не стартует.
    Задача: предоставить как можно более безопасный виртуальный хостинг.
    Пожалуйста, подскажите, как ограничить разрешить доступ Апачу только к определенным директориям, запретив возможность ему делать LIST для директорий. Проверяю очень просто — на PHP написан файл-менеджер, он дает доступ ко всем файлам. Может, можно как-то через настройки самого Апач?
    Большое спасибо.

    Комментарий от alfim — Май 12, 2007 @ 8:21 pm

  9. Забыл добавить - у меня winxp prof sp2.

    Комментарий от alfim — Май 12, 2007 @ 8:28 pm

  10. Мда.. Не дочитал комментарии. Получается, я не могу запретить PHP, выполняемому как модуль Apache, доступ к директориям всех виртуальных хостов? И любой из пользователей одного виртуального хоста, будет иметь доступ ко всем остальным?
    Спасибо.

    Комментарий от alfim — Май 12, 2007 @ 8:37 pm

  11. Что, если тебе сделать http-аутентификацию для каждого каталога виртуального хоста?

    Комментарий от Андрей — Май 15, 2007 @ 7:50 am

  12. А что это даст? phpRemoteView может путешествовать по всем файлам, выполняется-то он из одной веб-директории…

    Комментарий от alfim — Май 15, 2007 @ 7:18 pm

  13. Ты держатель хоста, придумай скрипт, который будет запрещать доступ.
    Например, подкладывать запрещающий .htaccess (или файл с другим именем, если это доступно для использования юзерам), когда туда лезет человек с таким-то идентификатором.
    Если надёжных методов идентификации нет, создай их искусственно…

    Комментарий от Андрей — Май 16, 2007 @ 7:30 pm

  14. Задача: предоставить как можно более безопасный виртуальный хостинг.
    Пожалуйста, подскажите, как ограничить разрешить доступ Апачу только к определенным директориям, запретив возможность ему делать LIST для директорий.

    vot ia tak reshil etu problemu.
    ServerAdmin misha1.nd@gmail.com
    ServerName 192.168.100.2
    DocumentRoot O:/wwwroot/0001/192.168.100.2
    php_admin_value open_basedir O:/wwwroot/0001/192.168.100.2
    php_admin_flag safe_mode of
    php_admin_value file_uploads 1
    php_admin_value upload_tmp_dir O:/wwwroot/0001/phptmp
    php_admin_value session.save_path O:/wwwroot/0001/phptmp
    #i tagdali ……………

    Комментарий от misha1 — Сентябрь 4, 2007 @ 7:01 pm

  15. Надежный способ защиты пользователей хостинга Apache друг от друга теоретически существует. Как уже писалось ранее - Апач нужно запускать от имени пользователя системы, а не от имени системы. Например пользователи у нас в папке C:\WWW\USERS\ а там папки пользователей типа \Login_Password\. Все скрипты, запускаемые Апачем, запускаются от имени того-же пользователя, что и сам Апач. Соответственно, если запретить листинг C:\, C:\WWW\ и C:\WWW\USERS\, а сам Апач установить не в стандартную папку (чтобы нельзя было прочитать httpd.conf), и каждую папку пользователя хостинга открыть для чтения, то добраться до соседней папки, не зная ее имени, не возможно при помощи того же PHP-скрипта.
    Вот только тут возникает проблема: Апач версии 2.0.53 запускается только от имени администратора (пользователям в Windows 2003 Server нельзя прослушивать порт 80) и идет какая-то трабла с .htaccess, если запрещен листинг папки. То есть, похоже, он проверяет не наличие файла, а пытается просканировать папку :-( Если ему это не удается, то скрипты вообще не запускаются.

    Комментарий от Cerber — Январь 20, 2008 @ 4:53 pm

  16. хм,попробую,спасибо за совет!

    Комментарий от Аркадий — Ноябрь 4, 2008 @ 7:16 pm

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

    Комментарий от Зоя Федорова — Апрель 2, 2009 @ 6:16 pm

Оставить комментарий

You must be logged in to post a comment.

Работает на WordPress