Модулей в PAM и так полно, но можно добыть и больше - как правило, через репозитории вашего дистрибутива. Модуль pam_ script ограничивает время использования компьютера, но многие, возможно, захотят ограничить и продолжительность сеанса. Для этого установите pam_script как обычно и добавьте такую строку в файл system-auth: session optional pam_script.so
При каждом закрытии и открытии сеанса pam_script будет запускать любые скрипты из /etc/security/pam-script/pam-script.d, заканчивающиеся на _ses_open либо _ses_close. Флаг optional обозначает, будет ли аутентификация блокироваться, если скрипт не выполнен. Помните тот, что выводит пользователя из системы, в Cron? Мы можем создать pam_script, который будет запускать такой же через определенное время после входа. Добавьте в /etc/ security/pam-script/pam-script.d/timeout_ses_open #!/bin/sh echo “sudo -u $PAM_USER /path/to/our/logoutscript” | at -q z now + 1 hour
Демон at запускает команду в заданное время однократно - не как в Cron. Данная команда запустит скрипт через час после текущего момента и добавит его в очередь, называемую z. Демон at поддерживает множество очередей с однобуквенными именами. По умолчанию используется а; мы здесь используем z, но это может быть любая очередь, не упоминаемая где-либо еще, поскольку по завершении сеанса значения удаляются. Через час после входа в систему скрипт запускается как раньше. Естественно, мы не хотим, чтобы он запускался, когда пользователя и так нет в системе, поэтому добавим следующее в /etc/security/ pam-script/pam-script.d/timeout_ses_close:
#!/bin/sh atrm $(atq -q z | awk ‘{print $1}’)
Awk добывает номера задач из списка ожидающих в atq и передает их atrm для удаления. Это гарантирует, что очередь будет использоваться только для одного пользователя, как и должно быть в данной ситуации, иначе вам придется проверять имена пользователей.