Дейв Тейлор - Сценарии командной оболочки. 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-е издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Синтаксис извлечения подстроки из переменной ${varvalue%${varvalue#?}}, используемый в строке , — это функция извлечения подстроки, определяемая стандартом POSIX, которая возвращает только первый символ из значения переменной varvalue. Таким образом сценарий определяет, является ли значение переменной полным путем к файлу (начинается с символа слеша / и определяет полный путь к программе).
Если ваша версия Unix/Linux не поддерживает этот синтаксис, его можно заменить более прямолинейными проверками. Например, использовать вместо ${SHELL:?No Shell} следующие строки:
if [-z "$SHELL"]; then
··echo "No Shell" >&2; exit 1
fi
А вместо {varvalue%${varvalue#?}} — следующую строку, дающую тот же результат:
$(echo $varvalue | cut −c1)
Запуск сценария
Этот сценарий пользователи могут запускать для проверки своего окружения. Он не принимает аргументов командной строки и запускается, как показано в листинге 5.22.
Результаты
Листинг 5.22:Тестирование сценария validator
$ validator
** PATH contains invalid directory /usr/local/mybin.
** MAILER set to /usr/local/bin/elm, but I cannot find executable.
Errors encountered. Please notify sysadmin for help.
№ 44. Очистка гостевой учетной записи
Несмотря на то что по соображениям безопасности на многих сайтах запрещен вход с именем пользователя guest, кое-где такая гостевая учетная запись все еще используется (часто с легко угадываемым паролем), чтобы дать клиентам или сотрудникам из других отделов доступ к сети. Это бывает удобно, но есть одна большая проблема: когда одной учетной записью пользуется множество людей, существует опасность, что кто-то из них по неосторожности испортит ее настройки, затруднив работу тех, кто последует за ним. Такое может произойти, например, во время экспериментов с командами, при редактировании файлов .rc или добавлении подкаталогов, и так далее.
Сценарий в листинге 5.23 решает эту проблему, очищая окружение после выхода пользователя из гостевой учетной записи. Он удаляет все новые файлы и подкаталоги, имена которых начинаются с точки и восстанавливает официальные файлы учетной записи, копируя их из архива, доступного только для чтения и спрятанного в каталоге ..template гостевой учетной записи.
Код
Листинг 5.23.Сценарий fixguest
#!/bin/bash
# fixguest — очищает гостевую учетную запись в процессе выхода.
# Не доверяйте переменным окружения: ссылайтесь на источники,
#·· доступные только для чтения.
iam=$(id −un)
myhome="$(grep "^${iam}:" /etc/passwd | cut −d: −f6)"
# *** НЕ запускайте этот сценарий в обычной учетной записи!
if ["$iam"!= "guest"]; then
··echo "Error: you really don't want to run fixguest on this account." >&2
··exit 1
fi
if [! -d $myhome/..template]; then
··echo "$0: no template directory found for rebuilding." >&2
··exit 1
fi
# Удалить все файлы и каталоги в домашнем каталоге учетной записи.
cd $myhome
rm −rf * $(find. -name".[a-zA-Z0-9]*" −print)
# Теперь должен остаться только каталог. template.
cp −Rp..template/*.
exit 0
Как это работает
Чтобы сценарий работал правильно, создайте комплект шаблонных файлов и каталогов и поместите их в подкаталог ..template , внутри домашнего каталога гостевой учетной записи. Измените права доступа к каталогу ..template , чтобы он был доступен только для чтения, и затем установите права и принадлежность файлов каталогов внутри ..template , чтобы они соответствовали пользователю guest.
Запуск сценария
Самый подходящий момент для запуска сценария fixguest — выход пользователя из системы. Для этого можно вставить запуск в файл .logout (прием работает почти во всех командных оболочках за редким исключением). Кроме того, вы убережете себя от многих жалоб пользователей, если сценарий login будет выводить, например, такое сообщение:
Внимание: Все файлы будут автоматически удалены из домашнего каталога
гостевой учетной записи сразу после выхода, поэтому, пожалуйста,
не сохраняйте здесь ничего важного. Если вам потребуется что-то сохранить,
отправьте это по электронной почте на свой почтовый ящик.
Вы предупреждены!
Однако отдельные знающие пользователи могут скорректировать содержимое файла .logout , поэтому имеет смысл организовать вызов сценария fixguest также из задания cron. Просто в начале сценария нужно убедиться, что в системе нет ни одного пользователя, зарегистрировавшегося с гостевой учетной записью!
Результаты
Сценарий ничего не выводит во время работы, он только восстанавливает состояние домашнего каталога в соответствии с содержимым каталога ..template .
Глава 6. Системное администрирование: обслуживание системы
Наиболее типичная область применения сценариев командной оболочки — помощь в администрировании системы Unix или Linux. Причины очевидны: администраторы часто самые компетентные пользователи системы, и они также отвечают за ее бесперебойную работу. Но существует еще одна причина. Догадываетесь? Системные администраторы и опытные пользователи почти наверняка получают удовольствие, занимаясь своей системой, а разработка сценариев в окружении Unix — это настоящее удовольствие!
И на этой ноте продолжим исследовать тему применения сценариев командной оболочки в решении задач системного администрирования.
№ 45. Слежение за программами с атрибутом setuid
Существует довольно много способов, которые используют хулиганы и цифровые преступники для взлома системы Linux, независимо от наличия у них учетной записи, и один из самых простых — поиск недостаточно надежно защищенных команд с установленным атрибутом setuid или setgid. Как рассказывалось в предыдущих главах, такие команды меняют действующий идентификатор пользователя для любых вызываемых ими команд, как определено в конфигурации, чтобы обычный пользователь мог запускать сценарии, команды в котором выполняются с привилегиями суперпользователя root. Плохо. Опасно!
Например, если в сценарий с атрибутом setuid добавить следующий код, он создаст для злоумышленника оболочку с атрибутом setuid, которая выполняется с привилегиями root, когда ничего не подозревающий администратор запустит этот сценарий, зарегистрировавшись как пользователь root.
if ["${USER:-$LOGNAME}" = "root"]; then # REMOVEME
··cp /bin/sh /tmp/.rootshell·············· # REMOVEME
··chown root /tmp/.rootshell·············· # REMOVEME
··chmod −f 4777 /tmp/.rootshell············# REMOVEME
··grep −v "# REMOVEME" $0 > /tmp/junk······# REMOVEME
··mv /tmp/junk $0··························# REMOVEME
Интервал:
Закладка: