Порыскав в инете инфу по топику обнаружил, что подробное описание настроек на русском языке встречается очень редко. Посему хочу написать как я настраивал ограничение по времени (использовалась замечательная статья Scott'а Kindley отсюда
http://skindley.wordpress.com/2006/12/11/fedora-core-6-controlling-logins-by-time/ ).
Задача:пользователь
myuser. Система
Ubuntu.
Время, когда можно пользоваться компьютером вышеуказанным пользователем:
Понедельник, вторник, четверг в
08:00-10:00 и
20:00-21:30 (из промежутка 08:00-21:30 исключается время 10:00-20:00. Именно так прописывается в time.conf) - пояснение ниже
Среда, пятница в
20:00-21:30Суббота в
18:00-22:00Воскресенье в
09:00-20:00Решение.С правами админа вписываем в
/etc/security/time.conf следующую строку
*;*;myuser;WeFr2000-2130|Sa1800-2200|Su0900-2000|MoTuTh0800-1000|MoTuTh2000-2130
Я не стал замарачиваться ограничением по login, gdm, а сразу обрубаю всю активность на компе (звездочки).
В вышеуказанной статье Scott'а Kindley дается пример с использованием символа
&. Я не стал его использовать, т.к. неправильно отрабатывают правила. Поясню:
login|gdm;*;jordan;Wk1630-2000 | Wd0800-2230&!1200-1500
cовсем не одно и то же, что
login|gdm;*;jordan;Wd0800-2230&!1200-1500 | Wk1630-2000
Потому указал два диапазона времени для MoTuTh вместо
MoTuTh0800-2130&!1000-2000.
Далее вписываем ниже последней строки, начинающейся с
auth в файлах
/etc/pam.d/login,
/etc/pam.d/gdm,
/etc/pam.d/sshdaccount required pam_time.so
Замечательно, ограничения вступают в силу немедля. Но есть один ньюанс. Наступает время, когда сеанс залогиненного пользователя должен закончится. Но он продолжает и далее работать. Непорядок! Надо принудительно завершить его сеанс, предварительно выдав пользователю сообщение. Выполняем это средствами штатного планировщика
cron. Редактируем планировщик:
# crontab -e
где вписываем такие строки:
#m - минуты, h - часы, dom - день месяца, mom - месяц, dow - день недели, command - выполняемая команда
#m h dom mon dow command
00 10 * * 1-2 /usr/bin/zenity --text-info --title="Время вышло" --width=474 -height=400 --display=:0 --filename=/etc/myuser.zenity &
10 10 * * 1-2 /usr/bin/skill -KILL -u myuser
00 10 * * 4 /usr/bin/zenity --text-info --title="Время вышло" --width=474 -height=400 --display=:0 --filename=/etc/myuser.zenity &
10 10 * * 4 /usr/bin/skill -KILL -u myuser
30 21 * * 1-5 /usr/bin/zenity --text-info --title="Время вышло" --width=474 -height=400 --display=:0 --filename=/etc/myuser.zenity &
40 21 * * 1-5 /usr/bin/skill -KILL -u myuser
00 22 * * 6 /usr/bin/zenity --text-info --title="Время вышло" --width=474 -height=400 --display=:0 --filename=/etc/myuser.zenity &
10 22 * * 6 /usr/bin/skill -KILL -u myuser
00 20 * * 0 /usr/bin/zenity --text-info --title="Время вышло" --width=474 -height=400 --display=:0 --filename=/etc/myuser.zenity &
10 20 * * 0 /usr/bin/skill -KILL -u myuser
В указанное время на рабочем столе пользователя
myuser будет появляться всплывающее окно размером 474x400 пикселей с заголовком "Время вышло". Текст сообщения будет браться из файла
/etc/myuser.zenity, который предварительно надо создать. Строки "
/usr/bin/skill -KILL -u myuser" выполняют принудительное завершение сеанса пользователя, если он сам не захотел отключаться.