Сценарий меняет пароль пользователя на неизвестную ему комбинацию символов и затем закрывает его домашний каталог. Если в это время пользователь находится в системе, сценарий посылает ему текст предупреждения, ждет несколько секунд и останавливает все запущенные им процессы.
Обратите внимание, что сценарий посылает сигнал остановки SIGHUP (HUP) всем процессам, запущенным пользователем
Разблокирование пользователя выполняется в два шага: открыть его домашний каталог (командой chmod 700) и установить известный пользователю пароль (командой passwd).
Запуск сценария
Этот сценарий должен запускаться с привилегиями root и принимает один аргумент: имя учетной записи, действие которой требуется приостановить.
Результаты
Выяснилось, что пользователь snowy нарушил правила пользования учетной записи. Давайте приостановим ее действие, как показано в листинге 5.17.
Листинг 5.17. Тестирование сценария suspenduser на пользователе snowy
$ sudo suspenduser snowy
Please change the password for account snowy to something new.
Changing password for user snowy.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
(Warned snowy, now sleeping 10 seconds)
snowy was logged in. Just logged them out.
Account snowy has been suspended.
Так как snowy в этот момент был зарегистрирован в системе, он получил сообщение, показанное в листинге 5.18, за несколько секунд до того, как его принудительно вывели из системы.
Листинг 5.18. Текст предупреждения, появившийся на терминале пользователя перед его отключением[5]
******************************************************************************
URGENT NOTICE FROM THE ADMINISTRATOR:
This account is being suspended, and you are going to be logged out
in 10 seconds. Please immediately shut down any processes you
have running and log out.
If you have any questions, please contact your supervisor or
John Doe, Director of Information Technology.
******************************************************************************
№ 42. Удаление учетной записи
Удаление учетной записи немного сложнее в реализации, чем приостановка ее действия, потому что сценарий должен прочесать всю файловую систему в поисках файлов, принадлежащих удаляемой учетной записи, прежде чем информация о ней будет стерта из файлов
Код
Листинг 5.19. Сценарий deleteuser
··#!/bin/bash
··# deleteuser — удаляет учетную запись без следа.
··#·· Не предназначен для использования в OS X.
··homedir="/home"
··pwfile="/etc/passwd"
··shadow="/etc/shadow"
··newpwfile="/etc/passwd.new"
··newshadow="/etc/shadow.new"
··suspend="$(which suspenduser)"
··locker="/etc/passwd.lock"
··if [-z $1]; then
····echo "Usage: $0 account" >&2
····exit 1
··elif ["$(whoami)"!= "root"]; then
····echo "Error: you must be 'root' to run this command.">&2
····exit 1
··fi