Изолирование 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 скриптов.
Большое спасибо за статью!
Комментарий от ПИнеу — Июнь 20, 2006 @ 11:20 am
Переводчику отдельное большое спасибо за замечательно выполненный перевод, к сожалению, редко это случается в наши дни
Комментарий от Yury V. Zaytsev — Июнь 21, 2006 @ 11:34 pm
Комментарий от SPeller — Июль 21, 2006 @ 5:03 am
Комментарий от Yury V. Zaytsev — Июль 21, 2006 @ 11:38 am
Комментарий от SPeller — Июль 25, 2006 @ 7:41 am
для него создаётся отдельный маленький раздел, куда разрешается доступ на чтение/листинг, а файлы конфигурации и всё, что нужно скрывать, защищаются какой-нибудь директивой Апача. Ведь к .htaccess, например, он доступа не даёт.
Я новичок в этом деле, знаю IndexIgnore, но она не подходит.
Комментарий от Андрей — Май 6, 2007 @ 7:34 am
Комментарий от Андрей — Май 6, 2007 @ 7:38 am
У меня следующая проблема: если запретить доступ к диску C, а потом разрешить оный для каталога Apache (кстати, при этом надо отключить наследование прав доступа нажав кнопку “Дополнительно”), то Апач не стартует, говорит что служба завершилась с кодом 1 (Apache 2.0.50). Если отменить ограничения для пользователя Apache, все работает нормально.
Та же проблема в случае, если я ограничиваю доступ на чтение каталога с виртуальными хостами. Апач просто не стартует.
Задача: предоставить как можно более безопасный виртуальный хостинг.
Пожалуйста, подскажите, как ограничить разрешить доступ Апачу только к определенным директориям, запретив возможность ему делать LIST для директорий. Проверяю очень просто — на PHP написан файл-менеджер, он дает доступ ко всем файлам. Может, можно как-то через настройки самого Апач?
Большое спасибо.
Комментарий от alfim — Май 12, 2007 @ 8:21 pm
Комментарий от alfim — Май 12, 2007 @ 8:28 pm
Спасибо.
Комментарий от alfim — Май 12, 2007 @ 8:37 pm
Комментарий от Андрей — Май 15, 2007 @ 7:50 am
Комментарий от alfim — Май 15, 2007 @ 7:18 pm
Например, подкладывать запрещающий .htaccess (или файл с другим именем, если это доступно для использования юзерам), когда туда лезет человек с таким-то идентификатором.
Если надёжных методов идентификации нет, создай их искусственно…
Комментарий от Андрей — Май 16, 2007 @ 7:30 pm
Задача: предоставить как можно более безопасный виртуальный хостинг.
Пожалуйста, подскажите, как ограничить разрешить доступ Апачу только к определенным директориям, запретив возможность ему делать 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
Вот только тут возникает проблема: Апач версии 2.0.53 запускается только от имени администратора (пользователям в Windows 2003 Server нельзя прослушивать порт 80) и идет какая-то трабла с .htaccess, если запрещен листинг папки. То есть, похоже, он проверяет не наличие файла, а пытается просканировать папку
Комментарий от Cerber — Январь 20, 2008 @ 4:53 pm
Комментарий от Аркадий — Ноябрь 4, 2008 @ 7:16 pm
Комментарий от Зоя Федорова — Апрель 2, 2009 @ 6:16 pm