··$suspend $1 # Заблокировать учетную запись на время выполнения работы.
··uid="$(grep −E "^${1}:" $pwfile | cut −d: −f3)"
··if [-z $uid]; then
····echo "Error: no account $1 found in $pwfile" >&2
····exit 1
··fi
··# Удалить пользователя из файлов password и shadow.
··grep −vE "^${1}:" $pwfile > $newpwfile
··grep −vE "^${1}:" $shadow > $newshadow
··lockcmd="$(which lockfile)" # Найти приложение lockfile.
····eval $lockcmd −r 15 $locker
··else························# Не вышло, используем свой механизм.
······echo "waiting for the password file"; sleep 1
····done
··fi
··mv $newpwfile $pwfile
··mv $newshadow $shadow
··chmod 644 $pwfile
··chmod 400 $shadow
··# Теперь удалить домашний каталог и перечислить все, что осталось.
··rm −rf $homedir/$1
··echo "Files still left to remove (if any):"
··find / −uid $uid −print 2>/dev/null | sed 's/^/ /'
··echo ""
··echo "Account $1 (uid $uid) has been deleted, and their home directory "
··echo "($homedir/$1) has been removed."
··exit 0
Как это работает
Чтобы избежать любых изменений в учетной записи в то время, пока работает сценарий deleteuser, сразу после запуска он приостанавливает ее действие, вызывая suspenduser.
Перед изменением файла с паролями этот сценарий блокирует доступ к нему с помощью программы lockfile, если она доступна
Запуск сценария
Этот сценарий должен запускаться с привилегиями root (с помощью sudo) и в качестве аргумента ожидает получить имя учетной записи для удаления. В листинге 5.20 показан запуск сценария для удаления учетной записи пользователя snowy.
Действия, выполняемые сценарием, необратимы, и в ходе своей работы он удаляет много файлов, поэтому будьте осторожны во время экспериментов с ним!
Результаты
Листинг 5.20. Тестирование сценария deleteuser на учетной записи пользователя snowy
$ sudo deleteuser 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.
Account snowy has been suspended.
Files still left to remove (if any):
·· /var/log/dogbone.avi
Account snowy (uid 502) has been deleted, and their home directory
(/home/snowy) has been removed.
Пользователь snowy попытался спрятать AVI-файл (
Усовершенствование сценария