a=A&u=joe&p=knife
Сценарий развернет эту строку, запишет в переменную action символ A, в переменную user имя joe и в переменную pass строку knife. Затем убедится, в строке
, что пароль содержит только допустимые алфавитные символы.
В заключение, если все прошло успешно, будет вызвана программа htpasswd, чтобы зашифровать пароль и добавить его в файл .htpasswd
. Также этот сценарий создает HTML-таблицу, в которой перечисляются все пользователи из .htpasswd вместе со ссылками [delete].
После вывода трех строк с заголовком HTML-таблицы сценарий продолжает выполнение со строки
. Этот цикл while читает пары имя/пароль из файла .htpasswd , используя трюк с изменением разделителя входных полей ( Input Field Separator, IFS ) на двоеточие и восстановлением по завершении.
Нижний колонтитул с полями ввода для выполнения операций
Сценарий полагается на присутствие HTML-файла с именем apm-footer.html , содержащего строки −myname- и −options-
, которые в процессе вывода файла в stdout замещаются текущим именем CGI-сценария и списком пользователей соответственно.
Переменная $myname определяется механизмом CGI, который сохраняет в ней фактическое имя сценария. Сам сценарий конструирует переменную $optionstring из пар имя/пароль, хранящихся в файле .htpasswd
.
HTML-файл с нижним колонтитулом, представленный в листинге 9.8, дает возможность выполнить операцию добавления пользователя, изменить пароль и удалить пользователя.
Листинг 9.8.Файл apm-footer.html добавляющий раздел с полями ввода для выполнения операций
······ style="border:2px solid #666;border-radius:5px;" >
··
··
··
Password Manager Actions |
····
······
········
······
··········add user:
|
········
|
··········password:
|
········
|
··········
········
|
··
|
····
······
········
······
··········update
|
········
|
··········password:
|
········
|
··········
········
|
··
|
····
······name="a" value="D">delete
······
········</</code>
······center>
····
|
From the book Wicked Cool Shell
Scripts
Вы почти наверняка пожелаете сохранить сценарий в том же каталоге, который требуется защитить паролем, однако можно предпочесть и каталог cgi-bin , как это сделали мы. В любом случае убедитесь, что переменные htpasswd и basedir получают правильные значения в начале сценария. Вам также понадобится файл .htaccess , определяющий права доступа, и файл .htpasswd , доступный для записи пользователю, с привилегиями которого выполняется веб-сервер Apache в вашей системе.
ПРИМЕЧАНИЕ
Перед запуском сценария apm в первую очередь создайте учетную запись admin, чтобы можно было использовать его в последующих вызовах! В коде предусмотрена специальная проверка, которая позволит создать учетную запись admin, если файл .htpasswd пуст.
Результат работы сценария apm показан на рис. 9.1. Обратите внимание, что он не только перечисляет все учетные записи со ссылкой для удаления, но также предоставляет возможность создать новую учетную запись, изменить пароль существующей, перечислить все учетные записи или удалить любую из них.
Рис. 9.1.Система управления паролями в Apache на основе сценария командной оболочки
Усовершенствование сценария
Программа htpasswd, входящая в состав веб-сервера Apache, предлагает отличный интерфейс командной строки для добавления новой учетной записи и шифрования пароля перед сохранением в базе данных. Но только одна из двух распространенных версий htpasswd поддерживает работу в пакетном режиме и может использоваться в сценариях — то есть позволяет сценарию передавать в командной строке имя учетной записи и пароль. Узнать, какая версия установлена у вас, очень просто: если при попытке выполнить htpasswd с флагом −b программа не выведет сообщения об ошибке, значит, вам повезло и у вас установлена более современная версия. Впрочем, ваши шансы на успех очень велики.
Читать дальше