Проверим сайт http://intuitive.com/на наличие недействительных ссылок, как показано в листинге 9.6.
Листинг 9.6.Запуск сценария checkexternal для проверки http://intuitive.com/
$ checkexternal −a http://intuitive.com/
http://chemgod.slip.umd.edu/~kidwell/weather.html fails with error code 6
http://epoch.oreilly.com/shop/cart.asp fails with error code 7
http://ezone.org:1080/ez/ fails with error code 7
http://fx.crewtags.com/blog/ fails with error code 6
http://linc.homeunix.org:8080/reviews/wicked.html fails with error code 6
http://links.browser.org/ fails with error code 6
http://nell.boulder.lib.co.us/ fails with error code 6
http://rpms.arvin.dk/slocate/ fails with error code 6
http://rss.intuitive.com/ fails with error code 6
http://techweb.cmp.com/cw/webcommerce fails with error code 6
http://tenbrooks11.lanminds.com/ fails with error code 6
http://www.101publicrelations.com/blog/ fails with error code 6
http://www.badlink/somewhere.html fails with error code 6
http://www.bloghop.com/ fails with error code 6
http://www.bloghop.com/ratemyblog.htm fails with error code 6
http://www.blogphiles.com/webring.shtml fails with error code 56
http://www.blogstreet.com/blogsqlbin/home.cgi fails with error code 56
http://www.builder.cnet.com/ fails with error code 6
http://www.buzz.builder.com/ fails with error code 6
http://www.chem.emory.edu/html/html.html fails with error code 6
http://www.cogsci.princeton.edu/~wn/ fails with error code 6
http://www.ourecopass.org/ fails with error code 6
http://www.portfolio.intuitive.com/portfolio/ fails with error code 6
Done. Checked 156 URLs and found 23 errors.
Похоже, пришло время немного прибраться!
№ 71. Управление паролями в Apache
Одна из необычных возможностей веб-сервера Apache — встроенная поддержка защиты каталогов паролями, даже на общедоступном сервере. Это отличный способ ограничить доступ к закрытой информации на вашем веб-сайте, будь то платная служба или просто личный фотоальбом, предназначенный только для членов семьи.
Стандартные конфигурации требуют наличия в защищенном каталоге файла с именем .htaccess . Этот файл определяет название «зоны» безопасности и, что более важно, ссылается на отдельный файл, содержащий пары из имени учетной записи и пароля, которые используются для проверки права доступа к каталогу. Управление упомянутым файлом не вызывает проблем, за исключением того, что в составе Apache для этой цели имеется единственный инструмент — простенькая программа htpasswd, которая запускается из командной строки. Другой вариант — описываемый здесь сценарий apm, один из самых сложных сценариев в книге, — инструмент управления паролями, который можно запускать в браузере как CGI-сценарий и с его помощью добавлять новые учетные записи, изменять пароли существующих и удалять учетные записи из списка доступа.
Прежде всего, для управления доступом к каталогу необходимо иметь в нем правильно сформированный файл .htaccess . Для примера допустим, что этот файл содержит следующие строки:
$ cat.htaccess
AuthUserFile /usr/lib/cgi-bin/.htpasswd
AuthGroupFile /dev/null
AuthName "Members Only Data Area."
AuthType Basic
require valid-user
Имена учетных записей и пароли хранятся в отдельном файле .htpasswd . Если он отсутствует, его нужно создать. Вполне подойдет пустой файл: выполните команду touch.htpasswd и убедитесь, что созданный файл доступен для записи пользователю, с идентификатором которого запускается сам веб-сервер Apache (это может быть пользователь nobody). Теперь самое время переходить к сценарию в листинге 9.7. Однако он требует подготовки CGI-окружения, как описано в разделе «Запуск сценариев из этой главы» (глава 8). Сохраните сценарий в своем каталоге cgi-bin .
Листинг 9.7.Сценарий apm
··#!/bin/bash
··# apm — Apache Password Manager (диспетчер паролей Apache) позволяет
··#·· администратору легко добавлять, изменять или удалять учетные записи
··#·· и пароли для доступа к подкаталогам в типичной конфигурации Apache
··#·· (когда конфигурационный файл имеет имя. htaccess).
··echo "Content-type: text/html"
··echo ""
··echo "
"
··basedir=$(pwd)
··myname="$(basename $0)"
··footer="$basedir/apm-footer.html"
··htaccess="$basedir/.htaccess"
··htpasswd="$(which htpasswd) −b"
··# Настоятельно рекомендуется включить следующий код для безопасности:
··#
··# if ["$REMOTE_USER"!= "admin" −a — s $htpasswd]; then
··#·· echo "Error: You must be user admin to use APM."
··#·· exit 0
··# fi
··# Получить имя файла с паролями из файла. htaccess
··if [! -r "$htaccess"]; then
····echo "Error: cannot read $htaccess file."
····exit 1
··fi
··passwdfile="$(grep "AuthUserFile" $htaccess | cut −d\ −f2)"
··if [! -r $passwdfile]; then
····echo "Error: can't read password file: can't make updates."
Читать дальше