Дейв Тейлор - Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание
- Название:Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание
- Автор:
- Жанр:
- Издательство:Питер
- Год:2017
- Город:СПб.
- ISBN:978-5-496-03029-8
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Дейв Тейлор - Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание краткое содержание
Цель этой книги — продемонстрировать практические приемы программирования сценариев на bash и познакомить с самыми распространенными утилитами на коротких и компактных примерах, не вдаваясь в излишние подробности. Экспериментируйте с этими сценариями — ломайте, исправляйте и приспосабливайте их под свои нужды, чтобы понять, как они работают. Только так вы сможете решать самые сложные задачи.
Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
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."
····exit 1
··elif [! -w $passwdfile]; then
····echo "Error: can't write to password file: can't update."
····exit 1
··fi
··echo "
"
··echo "Apache Password Manager"
··action="$(echo $QUERY_STRING | cut −c3)"
··user="$(echo $QUERY_STRING|cut −d\& −f2|cut −d= −f2 |\
··tr '[: upper: ]' '[: lower: ]')"
··case "$action" in
····A) echo "
Adding New User $user
"
········if [! -z "$(grep −E "^${user}:" $passwdfile)"]; then
··········echo "Error: user $user already appears in the file."
········else
··········pass="$(echo $QUERY_STRING|cut −d\& −f3|cut −d= −f2)"
··········if [! -z "$(echo $pass|tr −d '[[: upper: ][:lower: ][:digit: ]]')"];
··········then
············echo "Error: passwords can only contain a-z A-Z 0–9 ($pass)"
··········else
············$htpasswd $passwdfile "$user" "$pass"
············echo "Added!
"
··········fi
········fi
········;;
····U) echo "
Updating Password for user $user
"
········if [-z "$(grep −E "^${user}:" $passwdfile)"]; then
··········echo "Error: user $user isn't in the password file?"
··········echo "searched for "^${user}:" in $passwdfile"
········else
··········pass="$(echo $QUERY_STRING|cut −d\& −f3|cut −d= −f2)"
··········if [! -z "$(echo $pass|tr −d '[[: upper: ][:lower: ][:digit: ]]')"];
··········then
············echo "Error: passwords can only contain a-z A-Z 0–9 ($pass)"
··········else
············grep −vE "^${user}:" $passwdfile | tee $passwdfile > /dev/null
············$htpasswd $passwdfile "$user" "$pass"
············echo "Updated!
"
··········fi
········fi
········;;
····D) echo "
Deleting User $user
"
········if [-z "$(grep −E "^${user}:" $passwdfile)"]; then
··········echo "Error: user $user isn't in the password file?"
········elif ["$user" = "admin"]; then
··········echo "Error: you can't delete the 'admin' account."
········else
··········grep −vE "^${user}:" $passwdfile | tee $passwdfile >/dev/null
··········echo "Deleted!
"
········fi
········;;
··esac
··# Всегда перечислять текущих пользователей в файле паролей…
··echo "
··echo "
··oldIFS=$IFS; IFS=":" # Изменить разделитель слов…
··while read acct pw; do
····echo "
··done < $passwdfile
··echo "
List "
|
|
---|---|
$acct | "
|
"
··IFS=$oldIFS·········· #…и восстановить его.
··# Собрать строку выбора со всеми учетными записями…
··optionstring="$(cut −d: −f1 $passwdfile | sed 's/^/
··if [! -r $footer]; then
····echo "Warning: can't read $footer"
··else
····#…и вывести нижний колонтитул.
····sed −e "s/-myname-/$myname/g" −e "s/-options-/$optionstring/g" < $footer
··fi
··exit 0
Интервал:
Закладка: