«ДокуВики» — это веб-приложение и оно часто используется на публичных серверах, доступных из интернета. Это означает, что есть большой риск подвергнуться нападению злонамеренными людьми, чем, например, применение на вашей настольной системе.
«ДокуВики» разработана с учётом требований безопасности. Мы пытаемся найти баланс между дружелюбием к пользователю и безопасностью, но предпочитаем безопасность пользе, когда компромисс не может быть найден.
Эта страница должна дать вам краткий обзор того, на какие аспекты заострить внимание, чтобы удостовериться, что ваша «ДокуВики» безопасна.
Если Вы обнаружили проблему безопасности в «ДокуВики», пожалуйста, сообщите нам. Предпочтительные способы:
Для небольших багов предпочтительнее первые два способа. Насчет очень серьезных ошибок, которые могут быть использованы для написания эксплойтов для «ДокуВики», рекомендуем пользоваться приватной перепиской.
Все предыдущие проблемы безопасности описаны в bugtracking system.
В зависимости от серьезности найденной проблемы безопасности, либо она будет исправлена в будущем выпуске (по очень незначительным проблемам), либо будет выпущен срочный bugfix-релиз. В последнем случае пользователи будут проинформированы через механизм проверки обновлений.
Вы должны всегда использовать самую последнюю версию «ДокуВики», поскольку старые версии никогда не исправляются.
«ДокуВики» хранит конфигурацию и данные страницы в файлах. Эти файлы никогда не должны быть доступны непосредственно из сети. Распространяемый tarball содержит ряд .htaccess файлов, которые указывают веб-серверу Apache закрыть доступ к определенным каталогам.
Если вы не используете веб-сервер Apache, или ваш Apache не использует .htaccess-файлы, вы должны вручную защитить свою установку
Следующие директории не должны быть доступны из сети:
dataconfbininc (не опасно, когда доступно, хотя…)
Чтобы проверить, должны ли вы настроить права доступа попытайтесь получить доступ к http://yourserver.com/dokuwiki/data/pages/wiki/dokuwiki.txt. Вы не должны получить доступ к файлу по этому пути.
Самый простой путь состоит в том, чтобы включить .htaccess поддержку в вашей конфигурации Apache. Смотри учебник Apache по .htaccess.
«ДокуВики» уже идет с правильно сконфигурированными .htaccess-файлами. Содержимое файла .htaccess для блокировки доступа к каталогу, в котором он находится, должно быть следующим:
order allow,deny deny from all
Другой путь состоит в том, чтобы использовать директиву LocationMatch внутри описания VirtualHost. Это немного более эффективно чем файлы .htaccess. Просто ниже директивы Directory, добавьте:
<LocationMatch "/(data|conf|bin|inc)/">
Order allow,deny
Deny from all
Satisfy All
</LocationMatch>
Доступ к упомянутым каталогам может быть отключен в параметрах конфигурации IIS.
Используя URL re-write вы можете закрыть доступ к вышеупомянутым директориям. В Вашем файле lighttpd.conf, добавляющем следующее правило подстановки URL, должно быть достаточным, чтобы не пускать людей. Это предполагает, что ваши файлы «ДокуВики» установлены в http://yourwebsite.tld/dokuwiki/. Не забудьте раскомментировать «mod_rewrite» в разделе server.modules.
url.rewrite-once = ( "^/dokuwiki/(data|conf|bin|inc)/+.*" => "/nonexistentfolder" )
Защита каталога «data» очень важна. Если вы не можете переместить каталоги из веб-сервера (см. ниже) или не может сконфигурировать свой веб-сервер, чтобы запретить доступ (см. выше), то вы должны, по крайней мере, усложнить получение имени вашего каталога данных.
Чтобы сделать так, переименуйте свой каталог данных на что-то сложное (например, длинная строка букв и чисел) и переконфигурируйте свою опцию savedir в вашем файле «conf/local.php».
Самый безопасный способ избежать любого доступа к упомянутым каталогам состоит в том, чтобы переместить их вне так называемого «Document Root» Вашего веб-сервера.
Предупреждение: Если вы планируете использовать установщик, вы должны установить свой wiki исполняемый сценарий install.php прежде, чем вы сделаете этот шаг. Если перемещение каталогов будет сделано до, то выполнение установщика прервется.
Например, если директория «data» перемещена в ».home/yourname/data», добавьте следующую строку в «conf/local.php»:
$conf['savedir'] = '/home/yourname/data/';
Например, если каталог «conf» перемещен в /home/yourname/conf, создайте следующую запись в «inc/preload.php»:
<?php // Не изпользуйте закрывающий php таг. Это вызывает проблему с каналами, // помимо прочего. Для получения дополнительной информации по этой проблеме, пожалуйста, см: // http://www.dokuwiki.org/devel:coding_style#php_closing_tags define('DOKU_CONF','/home/yourname/conf/');
Каталог bin содержит CLI инструменты. Если у Вас нет доступа к шеллу на вашем сервере вы можете просто удалить каталог и его содержимое. Иначе только переместите его из document root. Никакая дальнейшая конфигурация не нужна.
В настоящий момент нет никакого легкого способа переместить этот каталог из document root. Но так как он не содержит уязвимых данных, не стоит прилагать каких-то усилий для этого.
«ДокуВики» содержит несколько параметров конфигурации, которые оказывают влияние на различные аспекты безопасности установки. Пожалуйста, изучите документацию по каждой настройки, чтобы понять, что они делают и каковы предложенные настройки.
DokuWiki имеет много разрабатываемых сообществом плагинов. Плагины добавляют новую функциональность к DokuWiki, добавляя новый код. Это означает, что у кода есть фактически полный доступ к Вашему серверу. В дополнении плагины распространяются отдельно от DokuWiki полностью оперативным способом. Они не подвергаются такому же вниманию, который получает кодовая база DokuWiki. Таким образом, необходимо принять необходимые меры безопасности до установки плагинов.
Вот некоторые подсказки, чтобы помочь вам с выбором плагинов, которые вы устанавливаете.
Вот еще несколько внутренних и внешних страниц, связанных с безопасностью.
Чтобы быть в курсе выявленных проблем с безопасностью в «ДокуВики», пожалуйста, подпишитесь на рассылку проекта «ДокуВики» на freshmeat.net (для подписки нужен работающий адрес электронной почты).
Все выявленные проблемы с безопасностью можно найти в системе отслеживания ошибок.
Если вы нашли ошибку, связанную с безопасностью в «ДокуВики», пожалуйста, сообщите в первую очередь ведущему разработчику проекта (Andi
Andreas Gohr
Andi
Berlin Germany) через его личный электронный адрес, он указан на этой странице.
Если ошибка некритическая, вы так же можете создать заявку об ошибке, но она будет общедоступной!
По умолчанию, при установке «ДокуВики» открыта всем для чтения и изменения. Как только вы установили «ДокуВики», возможно кто-то уже получил к ней доступ. Поэтому во время самой установки желательно ограничить доступ другим посетителям.
Если вы используете веб-сервер Apache, вы можете организовать такой доступ добавлением нижеследующих строк в начало файла .htaccess, находящегося в корне установки «ДокуВики»:
Deny from all Allow from 192.168.1.1
Замените «192.168.1.1» на свой IP-адрес (с которого будете выполнять установки и настройку). Если вы не знаете своего IP-адреса, то его можно посмотреть, зайдя на WhatsMyIP.org
Если ваш адрес используется и другими людьми (единый прокси школ или провайдеров типа AOL, локальная сеть и т. п.), то все компьютеры, использующие этот адрес, будут иметь доступ к «ДокуВики».
Не забудьте убрать добавленные в файл .htaccess строки прежде, чем вы запустите для всех свою вики.
На следующие параметры конфигурационного файла следует обратить особое внимание при настройке «ДокуВики»:
(То есть разрешения создания файлов и папок.) Установите их как можно более закрытыми. Это важное условие обеспечения безопасности установки «ДокуВики»! Пожалуйста, прочитайте страницу о разрешениях.
(Требуется — слишком важная и потенциально опасная информация, чтобы разрешить её видеть всем)
В папке config «ДокуВики» исправьте файл conf/local.php (создайте, если его там нет) и добавьте строку:
$conf['allowdebug'] = 0;
Ссылки в вики на внешнее содержимое, например, на внешние картинки, заставляют ваш веб-сервер копировать эти картинки на ваш веб-сервер через специальный скрипт lib/exe/fetch.php в целях обеспечения нормальной производительности и возможности «на лету» менять размеры таких картинок. Существует возможность ограничить закачку из внешних источников по размеру файлов с помощью опции $conf['fetchsize'] (задаётся в байтах). Установка этой опции в 0 позволит не закачивать ничего извне, т. е. отключить кэширование.
Посмотрите этот раздел ЧаВО.
В добавление к настройкам, перечисленным на этой странице, нижеперечисленные настройки также могут нарушить безопасность и/или конфиденциальность. Однако это неисчерпывающий список.
Следующие пункты очень рекомендуются — даже если они помечены как опциональные, стоит потратить на них некоторое время.
Основная цель — убрать всё, что можно убрать из корневого каталога вашего веб-сервера (то, куда без указания пути попадают при заходе на сайт) — кроме тех скриптов, которые однозначно должны лежать там.
Для этого, исходя из стандартного для UNIX корневого каталога /, предположим, что ваш рабочий каталог на сервере будет /home/yourname, а корневой каталог сайтов, скажем, /home/yourname/www, то следует сделать папку /home/yourname/dokuwiki, которая должна быть вне корневого каталога сайта и расположить часть ru: в ней, как описано ниже. (т.е. размещать не всю ru: в папку сайта, а только часть, а другую часть расположить в отдельной, недоступной через браузер папке).
(Требуется — хотя он защищен настройками .htaccess нет ни одной причины выкладывать его в публичный доступ.)
Уберите bin из каталога сайтов или просто удалите эту папку. Эта папка содержит скрипты, запускаемые только из командной строки и не должны быть публичными.
Если у вас нет необходимости использовать эти скрипты или вы просто не знаете что с ними делать — просто удалите эту папку, это ничего в ru: не нарушит (т. к. не требуется для её работы).
(Опционально — каталог защищён настройками .htaccess, но это не всегда безопасное решение.)
Уберите каталоги data, media и attic из каталога сайтов.
Простейший способ сделать это такой:
data (и всё его содержимое) вне корневого каталога сайтов;data.
Для примера, если каталог data перемещён в /home/yourname/data, добавьте следующую строку в conf/local.php:
$conf['savedir'] = '/home/yourname/data';
Каталоги media и attic расположены внутри каталога data, соответственно вышепроделанные шаги обеспечат также и их безопасность.
(Опционально - каталог защищен настройками .htaccess, но это не всегда безопасное решение)
Уберите подкаталог настроек из каталога сайта. Это немного труднее сделать в текущей версии «ДокуВики», самый легкий путь — это использовать auto-prepend-file настройку файла ini в PHP, для загрузки простейшего PHP-скрипта, который будет указывать на новое положение каталога настроек.
Создайте файл вида (путь будет другим для вашей системы) /home/yourname/dokuwiki/prepend.php содержащий:
<?php define('DOKU_CONF','/home/yourname/dokuwiki/conf/');
(Тег для закрытия PHP не указан специально! Не нужно добавлять ?> в конце)
Переместите каталог conf в /home/yourname/dokuwiki/, чтобы получился такой путь — /home/yourname/dokuwiki/conf.
Теперь измените файл .htaccess, расположеный в корневом каталоге сайта (т. е. /home/yourname/www/.htaccess), и добавьте следущее:
php_value auto_prepend_file "/home/yourname/dokuwiki/prepend.php"
Это заставит PHP запускать скрипт prepend.php перед любым другим скриптом. Указание этой константы перекрывает получение её «ДокуВикой» через скриптinc/init.php.
(Опционально — каталог защищен настройками .htaccess, но это не всегда безопасное решение.)
Теоретические тут не должно быть ничего опасного, но в то же время нет причин оставлять код в этом каталоге публично открытым, лучше поберечься, чем потом каятся. Имейте в виду ,что этот шаг потребует шелла (доступа к командной строке) сервера, когда для почти всех остальных шагов достаточно FTP-клиента.
Итак, предположим, что вы выполнили предыдущий шаг по перемещению каталога config вне корневого каталога сайта, тогда вам нужно просто добавить еще одну строку в файл prepend.php:
<?php define('DOKU_CONF','/home/yourname/dokuwiki/conf/'); define('DOKU_INC','/home/yourname/dokuwiki/');
Переместите каталог inc в /home/yourname/dokuwiki, чтобы получилось /home/yourname/dokuwiki/inc. Кроме того вам также нужно перенести каталог lib, после чего сделать символическую ссылку в корневой каталог сайта, т. е.:
$ mv /home/yourname/www/dokuwiki/lib /home/yourname/dokuwiki $ ln -s /home/yourname/dokuwiki/lib /home/yourname/www/dokuwiki/lib
Эти команды создадут символическую ссылку на каталог lib в корневом каталоге вашего сайта, в то же время позволив правильно работать переопределению DOKU_INC.
это должно быть объединено в config:php и ссылаться отсюда.
Нижеследующие является «хорошим тоном». Хорошее описание по общей защите PHP можно найти в Главе 3 Apache Security, также главу 3 можно бесплатно скачать в формате PDF отсюда.
Если вы запускаете «ДокуВики» и PHP на сервере, которым вы полностью управляете, то можно рассмотреть вариант использования т. н. chroot-«тюрьмы». Имеется много разрозненных руководств в сети, как это сделано, однако наиболее полным (точным) и эффективным, скорее всего, является Apache + Chroot + FastCGI + PHP FAQ.
Вы можете включить это в своём главном файле .htaccess, находящемся в корне — /home/yourname/www/.htaccess.
(Опционально это хорошая идея — чем больше информации вы получите о атакующем, тем лучше.)
Добавьте следующее в файл .htaccess, находящийся в корневом каталоге вашего сайта (т. е. /home/yourname/www/.htaccess — каталог, который отвечает на HTTP—запросы и содержит файлы index.php и doku.php).
# Disable display of public PHP error messages php_flag display_errors "off" # Log all PHP errors to a file in private directory (and not in the DokuWiki data dir either!) # here you'd need to create the directory and the file then make sure the file has world write # permissions php_flag error_log "/home/yourname/logs/errors.log" # Don't keep reporting the same error again and again (keep log file smaller) php_flag ignore_repeated_errors On # DokuWiki generates a lot of notices... best prevent reporting them # in .htaccess files E_ALL, E_NOTICE have no effect, you must use the # values from http://www.php.net/manual/en/function.error-reporting.php # E_ALL & ~E_NOTICE => 2047 - 8 => 2039 (Note: E_ALL is different for 5.2.x and above, see # http://www.php.net/manual/en/ref.errorfunc.php#errorfunc.constants.errorlevels.e-all) php_flag error_reporting 2039
Вам нужно создать папку и файл ошибок, указанных выше. Это можно сделать (зайдя в шелл) примерно так:
$ mkdir ~/logs $ touch ~/logs/errors.log $ chmod 662 ~/logs/errors.log
Если PHP обнаружит, что файл отсутствует, он не создаст его автоматически (а значит сообщения о ошибках будут уходить в никуда). Между тем вы должны убедится, что этот файл не стал слишком большим (он будет расти, если вы не сделаете что-нибудь с ним). Простейший способ уменьшить его размер таков:
$ tail -100 ~/logs/errors.log > ~/logs/errors.log
Эта команда оставит в файле только последние 100 строк, удалив все остальное — вы можете добавить эту команду, к примеру, в еженедельную обработку cron.
Инструкции для «ДокуВики», работающей под Linux/Unix и Apache. Тестировалось на CentOS 4.4
Два параметра очень важны для безопасности PHP: 1)
Добавьте следующие строки в свой httpd.conf, также иногда их надо добавить и в файл /wiki/.htaccess тоже:
# DokuWiki is installed in : /var/www/html/wiki/
# your PHP pear packages are in : /usr/share/pear/
# PHP is installed in : /usr/lib/php4/
# use a new tmp directory in : /var/www/html/wiki/tmp/
<Directory /var/www/html/wiki>
php_admin_flag safe_mode On
php_admin_value safe_mode_exec_dir "/usr/lib/php4"
php_admin_value safe_mode_include_dir "/usr/share/pear/"
php_admin_value open_basedir "/var/www/html/wiki/:/var/www/wiki/:/usr/share/pear/"
php_admin_value upload_tmp_dir "/var/www/html/wiki/tmp/"
</Directory>
Затем вам нужно настроить все разрешение папок вики, например, следующей Linux/Unix-командой:
# chown apache:apache -R /var/www/html/wiki/
Если вы не имеете аккаунта с шеллом или используете ftp для заливки «ДокуВики», все разрешение должны быть настроены автоматически. В этих случаях не нужно запускать команду chown.
Is the above line something one has to do with telnet? My presence provider doesn't provide a command line… Over-all, all I got out of this page was to delete the .bin directory and moving the ./data directory. By the way, I've been unable to delete the old ./data on the server with FileZilla; it tells me «directory not empty» and when I go to the subdirectories, and to the files in them, all my attempts to delete seem to result in PWD commands. No apparent way to get rid of them. The rest of the stuff on this page either didn't work for me, or was too obscure to follow. Need to explain things with dummies in mind. We dummies are a majority
Don't know whether there are ftp-clients with the ability to change owner and group attributes as withchownon the command line, but probably your provider will not grant you the right to change owner and group attributes of your files. This also may be the reason why you can't get rid of 'your' files in the data dir (presumably they aren't yours). If you set the fmode/dmode param too restrictive (lesser okt. values than 666/777, esp. in 3rd position) you won't be able to del files written and hence owned by the webserver (i.e. files created via DokuWiki) cf. permissions, fmode and hosted /Leif
Assuming your webserver is Apache and is running as the user Apache. This is needed because safe_mode runs the PHP script as the user that is the owner of the .php files.