недавно вот попросили настроить ноутбук в одном из маленьких кафе так, чтоб им смогли бесплатно пользоваться посетители, причем с ограничением времени и не беспокоясь за свои данные.
Итак, исходная ситуация и требуемая функциональность:
- Ноутбук Acer i3, 4GB RAM, WIFI/USB, 640GB HDD(1 Recovery Partition + 1 System/Data), Win 7 Home Premium;
- необходимое время сессии ограничено 30 минутами;
- перерыв между сессиями(минимальный между логинами) в 2 минуты;
- данные сеанса не сохраняются, более того — должны быть удалены с ноутбука по окончании сессии;
- возможность работы определенного пользователя(работник кафе) без ограничения времени;
- возможность использования при необходимости предустановленной Windows 7.
После интенсивного поиска в интернет на тему программ для интернет-кафе я решил, что из пушки по воробьям все-таки палить не стоит, и выбрал следующие средства для решения поставленной задачи:
- Линукс как вторая, и основная операционная система(Ubuntu 12.04 LTS, т.к. будет еще пару лет поддерживаться обновлениями);
- гостевая учетная запись, которая в 12.04 присутствует и после окончания сессии удаляет все данные пользователя;
- двойная скрытая загрузка, с опциональной загрузкой windows.
Установка системы
В windows через „Система-Управление-Управление дисками“ уменьшил основной раздел (с меткой „Acer“) на 200 ГБ, получилось свободная неформатированная область диска(200ГБ), туда и поставим убунту.
Инсталляция Ubuntu проводится стандартно, загрузка с cd/dvd.
При установке можно выбрать вариант «рядом с существующей операционной системой», я выбрал ручное разбиение на разделы:
- (расширенный) корневой раздел root (использовать как „/“) 20 GB ext4 (/dev/sda5);
- домашний раздел (использовать как „/home“) 176 GB ext4 (/dev/sda6);
- раздел файла подкачки (использовать как swap) 4 GB (/dev/sda7), хотя в принципе не нужен, т.к. глубокий сон с сохранением на диск не предвидится, а для инет-серфинга он не понадобится.
Систему устанавливаем с именем пользователя administrator („admin“ уже зарезервирован в убунту).
После первой перезагрузки подключаем сеть/WIFI (если еще не подключились) и инсталлируем все обновления плюс парочку необходимых дополнений для нормальной работы:
sudo apt-get update sudo apt-get dist-upgrade sudo apt-get install flashplugin-downloader sudo apt-get install gimp
Если планируется использование java (например, онлайн-банкинг и т.п.), ставим ее тоже:
sudo apt-get install openjdk-7-jre icedtea-7-plugin
В этом ноутбуке первый раздел (/dev/sda1) – это раздел восстановления Windows, поэтому из загрузочного меню GRUB его желательно убрать от греха подальше.
Я сделал так:
из /boot/grub/grub.conf скопировал нужную секцию в /etc/grub.d/40_custom:
#!/bin/sh exec tail -n +3 $0 # This file provides an easy way to add custom menu entries. Simply type the # menu entries you want to add after this comment. Be careful not to change # the 'exec tail' line above. menuentry "Windows 7 (loader) (on /dev/sda2)" --class windows --class os { insmod part_msdos insmod ntfs set root='(hd0,msdos2)' search --no-floppy --fs-uuid --set=root 70E253CBE25393E6 chainloader +1 }
в конец файла /etc/default/grub дописываем
GRUB_DISABLE_OS_PROBER="true"
и запускаем в терминале обновление меню GRUB
sudo update-grub
Tеперь при перезагрузке в меню видим только пункты относящиеся к линуксу и последним пунктом загрузку установленной Windows.
Если необходимо спрятать загрузочное меню, придется обойти один баг, присутствующий в ubuntu 12.04, а именно то что просто изменением параметров в /etc/default/grub
GRUB_HIDDEN_TIMEOUT="5" GRUB_HIDDEN_TIMEOUT_QUIET="false"
спрятать меню при загрузке не удастся.
Это лечится добавлением в конец файла /etc/grub.d/00_header фрагмента
### BEGIN Hidden Menu Test ### cat << EOF if [ ${timeout} != -1 ]; then if sleep --verbose --interruptible ${GRUB_HIDDEN_TIMEOUT} ; then set timeout=0 fi fi EOF ### END Hidden Menu Test ###
В конечном итоге файл /ets/default/grub имеет у меня следующий вид:
GRUB_DEFAULT="0" GRUB_HIDDEN_TIMEOUT="5" GRUB_HIDDEN_TIMEOUT_QUIET="false" GRUB_TIMEOUT="5" GRUB_DISTRIBUTOR="`lsb_release -i -s 2> /dev/null || echo Debian`" GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" GRUB_CMDLINE_LINUX="" # Uncomment to enable BadRAM filtering, modify to suit your needs # This works with Linux (no patch required) and with any kernel that obtains # the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...) #GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef" # Uncomment to disable graphical terminal (grub-pc only) #GRUB_TERMINAL="console" # The resolution used on graphical terminal # note that you can use only modes which your graphic card supports via VBE # you can see them in real GRUB with the command `vbeinfo' GRUB_GFXMODE="640x480" # Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux #GRUB_DISABLE_LINUX_UUID="true" # Uncomment to disable generation of recovery mode menu entries #GRUB_DISABLE_RECOVERY="true" # Uncomment to get a beep at grub start #GRUB_INIT_TUNE="480 440 1" GRUB_DISABLE_OS_PROBER="true"
и конечно, не забудьте обновить grub перед перезагрузкой:
sudo update-grub
Теперь если после исчезновения экрана биос в течение 5 секунд нажать ESC, появится меню GRUB, иначе будет тихо загружен первый пункт меню по умолчанию (Ubuntu).
Конфигурируем гостевую сессию
- Создаем нового пользователа user (это будет сначала наш образец для гостя, потом логин для работника кафе);
- Меняем обои;
- Выставляем нужные ярлыки на рабочий стол/конфигурируем по вкусу панель Unity;
- Меняем настройки LibreOffice, Gimp и т.д.
Выходим из системы и логинимся снова как administrator.
Создаем папку /etc/guest-session/skel:
sudo mkdir -p /etc/guest-session/skel
и копируем туда домашний каталог нашего user:
sudo cp -a /home/rus/* /etc/guest-session/skel/ sudo cp -a /home/rus/.* /etc/guest-session/skel/
Если теперь войти в систему как гость, то рабочий стол и окружение должны выглядеть точно так же как и у пользователя user.
Ограничение гостевой сессии по времени
Логинимся в систему как administrator.
Добавляем в файл /usr/sbin/guest-account в конец функции remove_account() (выполняется, когда гость выходит из системы) строки:
remove_account () { … … rm -f /tmp/*.guest touch /tmp/$(date -d "today" +"%Y%m%d%H%M").guest }
Создаем файл /etc/guest-session/skel/.guest.sh со следующим содержимым:
#!/bin/sh if [ -f /tmp/*.guest ] then TIMEOUT=2 TIMESTAMP=`date -d "today" +"%Y%m%d%H%M"` for FNAME in /tmp/*.guest do OLDTIME="$(basename $FNAME .guest)" done if [ $(($TIMESTAMP-$OLDTIME)) -lt $TIMEOUT ] then sleep 10 notify-send -u critical "Новая сессия еще не может быть запущена!" "Подождите некоторое время (сейчас будет выполнен выход из системы)." sleep 10 gnome-session-quit --logout --no-prompt fi fi sleep 10 notify-send -u critical "Новая сессия запущена" "У Вас 30 минут времени.\n\nПользуйтесь!" sleep 600 notify-send -u critical "Осталось 20 минут..." sleep 600 notify-send -u critical "Осталось 10 минут..." sleep 300 notify-send -u critical "Через 5 минут будет выполнен автоматических выход из системы!\nВсе данные Вашего сеанса будут удалены." sleep 300 notify-send -u critical "До свидания" "Сеанс завершится через 10 секунд.\nВсе данные Вашего сеанса будут удалены." sleep 10 gnome-session-quit --logout --no-prompt
и делаем его исполняемым:
sudo chmod a+x /etc/guest-session/skel/.guest.sh
Остается только добавить в конец файла /etc/guest-session/skel/.profile строчку
$HOME/.guest.sh &
и собственно на этом все.
Результат
В результате я получил ноутбук, который без предупреждения и показа меню загружается в убунту, с тремя пользователями: administrator, user и „гость“, и с ограничением времени „гостевого“ сеанса в 30 минут с принудительной паузой в 2 минуты. Паузу можно сбросить, перезагрузив ноутбук. Если такое нежелательно, то стоит сохранять файл .guest не в /tmp, а, скажем, в /var/log (см. /usr/sbin/guest-account).
Через определенные промежутки времени пользователю выдаются сообщения об оставшемся времени сеанса.
Во время сеанса возможна смена пользователя (например на user, и обратно на гость без необходимости полного выхода user’a из системы).
Недостатки
Скрипт .guest.sh хотя и не виден в домашней папке (по крайней мере сразу), но виден в списке процессов, и этот процесс спокойно убивается гостем (если он знает как), что в принципе снимает ограничение на время сеанса.
Конструктивная критика и предложения по улучшению данного решения приветствуется!
ссылка на оригинал статьи http://habrahabr.ru/post/179237/
Добавить комментарий