Сценарий в листинге 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.
Читать дальше