Тонкий клиент на базе Xubuntu
Сразу оговоримся, что речь пойдет о системе установленной на жесткий диск, т.к обычно под тонким клиентом подразумевают её бездисковый вариант. По поводу выбора дистрибутива. Почему Xubuntu? Потому что XFCE как в прочем и LXDE/LXQt менее прожорливое на системные ресурсы рабочее окружение, нежели Gnome/KDE, а поскольку ставится все будет на довольно старые или маломощные ПК с 1-2GB RAM то выбор очевиден.
Компьютер у нас как и положено тонкому клиенту выполняет ровно одну функцию - позволяет подключаться по RDP к терминальному серверу или к ферме терминальных серверов на базе Windows, и на некоторых ПК запускать Chrome для доступа к 1-2 специализированным сайтам. Все действия производим на виртуальной машине, затем делаем backup системы в формате ISO, переносим на USB-носитель/WDS Server и ставим на конечные ПК.
1) Установка Xubuntu 20.04 / 18.04
Ставим систему. В процессе, указываем имя компьютера и пользователя, которому будет разрешено выполнять административные задачи от имени root (sudo). Обновляем систему.
Настраиваем по своему усмотрению, например, что бы наш комп не засыпал и не требовал пароль, выключим все лишнее в "Менеджере питания", "Хранителе экрана" и.т.д.
Удаляем или оставляем Firefox по вашему усмотрению. Для моих задач больше походит Chrome или Chromium, поэтому Firefox я сношу, а так же любые другие ненужные приложения.
apt purge --auto-remove firefox* thunderbird* xfburn parole pidgin ristretto atril thunar-volman \
thunar-archive-plugin gnome-mines gnome-sudoku sgt-puzzles engrampa catfish pavucontrol mousepad gigolo \
xfce4-notes xfce4-screenshooter xfce4-dict xfce4-taskmanager xfce4-pulseaudio-plugin mate-calc-common \
simple-scantexlive-base
transmission-gtk* libreoffice* gimp* "bluez*"
2) Установка VNC, SSH, FreeRDP и Chrome (опционально)
Что бы удаленно управлять и настраивать наш ПК установим openssh и vnc server.
//OpenSSH-Server:
apt install openssh-server
Что бы ходить root'ом, расскоментируем строчку: PermitRootLogin и поменяем значение на yes в /etc/ssh/sshd_config. Затем, назначим пароль root'у.
nano /etc/ssh/sshd_config passwd root
Перезапускаем службу ssh командой:
systemctl restart ssh || systemctl restart sshd
//VNC:
apt install x11vnc
Зададим пароль для vnc:
x11vnc -storepasswd /etc/x11vnc.pass
Создадим сервис x11vnc, для автоматического запуска при включении:
nano /lib/systemd/system/x11vnc.service
[Unit] Description=Start x11vnc at startup. After=multi-user.target [Service] Type=simple ExecStart=/usr/bin/x11vnc -auth guess -loop -noxdamage -repeat -dontdisconnect -forever -rfbauth /etc/x11vnc.pass -rfbport 5900 -shared [Install] WantedBy=multi-user.target
systemctl enable x11vnc.service systemctl daemon-reload systemctl start x11vnc.service systemctl status x11vnc.service systemctl restart x11vnc
Проверяем, что x11vnc запущен и принимает входящие подключения:
ss -ap | grep 5900 ps wwwwaux | grep auth
//FreeRDP:
Установка FreeRDP-клиента из стандартного репозитория Ubuntu в самом простом случае:
apt update apt install freerdp2-x11
Удаление FreeRDP, в случае если нужна другая версия, например из github.
apt purge freerdp2-x11 --autoremove
Подробно все варианты установки и настройки рассмотрены в отдельной заметке.
//Chrome:
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' apt update apt install google-chrome-stable
Запуск: /usr/bin/google-chrome-stable %U
Что бы chrome не ругался на связку ключей которую нужно разблокировать, добавим ключ: --password-store=basic в секции exec desktop-файла Google Chrome.desktop
nano /home/rdp/Раб*/Google*
В самом конце обновим систему:
apt update && apt upgrade
3) Настройка рабочего окружения xfce4, ограничений и прав.
Создадим нового пользователя с рабочего стола которого будут запускаться ярлыки для доступа к серверу. Запретим ему все ненужное, оставив только то, что необходимо для работы. Поставим галочку, не спрашивать пароль при входе. Так же выключим все лишнее в "Менеджере питания", "Хранителе экрана" и.т.д.
Перезагружаем ПК и видим, что система снова загрузилась под 'администратором'. Правим /etc/lightdm/lightdm.conf и в секции autologin-user ставим своего пользователя. Проверяем.
[Seat:*] autologin-guest=false autologin-user=rdp autologin-user-timeout=0
Настраиваем главное меню и панель XFCE. Вид и расположение панели правим при помощи xfce-panel-profiles, xfce4-appearance-settings и прочих апплетов. Расположение элементов меню при помощи редактора меню (menulibre). Скрываем все лишнее, после чего все скрытые ярлыки, а по сути *.desktop файлы окажутся в /home/rdp/.local/share/applications/ откуда их можно снова удалить, что бы восстановить в меню, либо не удаляя подправить сам desktop-файл изменив/добавив секцию NoDisplay с "Hidden" на "True".
Итого в директории applications оказались следующие .desktop файлы:
debian-uxterm.desktop debian-xterm.desktop exo-file-manager.desktop exo-mail-reader.desktop exo-preferred-applications.desktop exo-terminal-emulator.desktop exo-web-browser1.desktop exo-web-browser.desktop gnome-language-selector.desktop gucharmap.desktop info.desktop lightdm-gtk-greeter-settings.desktop menulibre.desktop mugshot.desktop nm-connection-editor.desktop onboard.desktop onboard-settings.desktop org.gnome.font-viewer.desktop org.gnome.Software.desktop panel-preferences.desktop pavucontrol.desktop software-properties-drivers.desktop software-properties-gtk.desktop system-config-printer.desktop thunar-bulk-rename.desktop thunar.desktop thunar-volman-settings.desktop time.desktop update-manager.desktop users.desktop x11vnc.desktop xfce4-about.desktop xfce4-accessibility-settings.desktop xfce4-appfinder.desktop xfce4-color-settings.desktop xfce4-mime-settings.desktop xfce4-notifyd-config.desktop xfce4-panel-profiles.desktop xfce4-run.desktop xfce4-screensaver-preferences.desktop xfce4-settings-editor.desktop xfce4-terminal-settings.desktop xfce-backdrop-settings.desktop xfce-session-settings.desktop xfce-settings-manager.desktop xfce-ui-settings.desktop xfce-wm-settings.desktop xfce-wmtweaks-settings.desktop xfce-workspaces-settings.desktop xfhelp4.desktop
Запретим пользователям удалять эти файлы и как следствие восстанавливать пункты меню.
chown administrator:administrator /home/rdp/.local/share/applications/ chmod 755 /home/rdp/.local/share/applications/
Что бы после всех изменений заблокировать сам редактор меню:
chmod 750 /usr/bin/menulibre
Итого, после всех манипуляций получим примерно такую картинку.
Что бы запретить пользователям отключать и включать сеть используя иконку Network Manager (nm-applet) создадим политику при помощи встроенной библиотеки Polkit (PolicyKit). Открываем на редактирование файл:
nano /var/lib/polkit-1/localauthority/50-local.d/10-network-manager.pkla
И добавляем в него следующее содержимое:
[Prevent users from modifying all network states and settings except with admin password] Identity=unix-user:rdp Action=org.freedesktop.NetworkManager.* ResultAny=no ResultInactive=no ResultActive=auth_admin_keep
Вместо rdp пишем своего пользователя. Убедимся что сам агент PolicyKit Authetication Agent стратует при запуске. Проверяем в меню «Сеансы и запуск» при помощи: xfce4-session-settings / Автозапуск приложений:
Далее перезапустим систему и убедимся что редактировать настройки сети без пароля теперь невозможно:
Теперь заблокируем панель от изменений по правой кнопке. Скопируем существующий файл с настройками панелей из нашей домашней директории (xfce4-panel.xml) в системную директорию.
cp -v /home/rdp/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml /etc/xdg/xfce4/xfconf/xfce-perchannel-xml/
Открываем файл /etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml на редактирование и приводим строку:
<channel name="xfce4-panel" version="1.0"> к следующему ввиду: <channel name="xfce4-panel" version="1.0" locked="*" unlocked="root">
Сохраняем файл, перезагружаемся. Видим, что возможность добавлять новые элементы панели и редактировать меню по правой кнопке пропала.
Отменяем блокировку панели, удалением файла:
rm -v /etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml
Запретить запуск панели: (p.s. В таком случае имеет смысл создать значок запуска для выключения ПК, указав в качестве исполняемой команды: xfce4-session-logout)
cd /usr/bin chgrp adm xfce4-panel chmod 750 xfce4-panel
Убрать лишние пункты в меню Выход (xfce4-session-logout), такие как Ждущий и Спящие режимы, можно отредактировав файл /home/rdp/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-session.xml после секции <property name="shutdown" type="empty"> вставить следующий код:
<property name="shutdown" type="empty"> <property name="LockScreen" type="bool" value="false"/> <property name="ShowHibernate" type="bool" value="false"/> <property name="ShowSuspend" type="bool" value="false"/> <property name="ShowSwitchUser" type="bool" value="false"/> <property name="ShowHybridSleep" type="bool" value="false"/> </property>
Итого получим следующий вид:
Запретить ручной запуск остальных апплетов xfce4:
chgrp adm /usr/bin/xfce4-* xfwm4-settings xfwm4-tweaks-settings xfwm4-workspace-settings xfdesktop-settings xfconf-query chmod 750 /usr/bin/xfce4-* xfwm4-settings xfwm4-tweaks-settings xfwm4-workspace-settings xfdesktop-settings xfconf-query
Разрешить определенные апплеты xfce4:
chgrp root xfce4-power-manager xfce4-power-manager-settings xfce4-session xfce4-session-settings xfce4-session-logout xfce4-display-settings xfce4-mouse-settings xfce4-keyboard-settings xfce4-terminal xfce4-terminal.wrapper chmod 755 xfce4-power-manager xfce4-power-manager-settings xfce4-session xfce4-session-settings xfce4-session-logout xfce4-display-settings xfce4-mouse-settings xfce4-keyboard-settings xfce4-terminal xfce4-terminal.wrapper
Добавляем на рабочий стол ярлыки запуска программ:
Команда для подключения к rdp-серверу в самом простом случае может быть такой:
xfreerdp /u:user /d:domain /kbd-type:en-us /f /network:broadband /sec:tls /cert-ignore /v:srv.domain.name
Аналогично, создаем кнопку запуска для Google Chrome. Команда будет такой: /usr/bin/google-chrome-stable %U
Запретим пользователю удалять/редактировать значки запуска с рабочего стола:
chown administrator:administrator /home/rdp/Раб* chown rdp:rdp /home/rdp/Раб*/*.* chmod 750 /home/rdp/Раб*/*.*
4. Настройка файрвола/брэндмауэра.
Посмотреть текущие правила в виде таблицы/списка:
iptables -L iptables -S
По умолчанию файрвол настроен следующим образом:
-P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT
Разрешим передачу пакетов через входящий петлевой интерфейс:
iptables -A INPUT -i lo -j ACCEPT
Разрешим icmp:
iptables -A INPUT -p icmp -j ACCEPT
Разрешим ESTABLISHED, RELATED пакеты к локальной системе по TCP и UDP:
iptables -A INPUT -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -p UDP -m state --state ESTABLISHED,RELATED -j ACCEPT
Разрешим подключения по ssh и vnc только для локальной сети 192.168.1.0/24:
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 5900 -j ACCEPT
Запрещаем инвалидный трафик:
iptables -A INPUT -m state --state INVALID -j DROP
В конце запретим пакеты в цепочке INPUT и FORWARD, изменив значения по-умолчанию на DROP. Исходящие по умолчанию разрешены!
iptables -P INPUT DROP iptables -P FORWARD DROP
Итого получим следующий вывод:
-P INPUT DROP -P FORWARD DROP -P OUTPUT ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p udp -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -s 192.168.0.0/24 -p tcp -m tcp --dport 5900 -j ACCEPT -A INPUT -m state --state INVALID -j DROP
Что бы удалить правило, отобразим сначала пронумерованный список, а затем удалим правило командой:
iptables -L --line-numbers iptables -D INPUT 3
Чтобы вставить правило в произвольное место существующей цепочки укажем -I, затем название этой цепочки и позицию (1,2,3,...,n), в которой правило должно располагаться:
iptables -I INPUT 1 -i lo -p all -j ACCEPT
или
iptables -I INPUT 1 -s 192.168.1.5 -p tcp --dport 5900 -j ACCEPT
Что бы настроенные правила подгружались при старте системы установим пакет iptables-persistent:
apt-get install iptables-persistent
Сохранить правила/применить конфигурацию и восстановить конфигурацию из файла:
iptables-save > /etc/iptables/rules.v4 iptables-restore /etc/iptables/rules.v4
5) Блокировка USB-носителей:
Cоздаем файл /etc/udev/rules.d/99-usb.rules со следующим содержанием:
ENV{ID_SERIAL}!="USB_DISKS_3A46393250FF7005-0:0", ENV{UDISKS_IGNORE}="1"
Чтобы заработало без перегрузки, выполняем:
udevadm control --reload-rules
Чтобы узнать номера устройства и не утонуть в информации — вставляем устройство и даем команду:
udevadm info --query=env --name=/dev/sdb
6) Сохранение/выгрузка образа системы в ISO:
Для этого установим пакет wasta-remastersys:
add-apt-repository ppa:wasta-linux/wasta-apps apt update apt install wasta-remastersys
Запустить создание образа:
wasta-remastersys backup xubuntu.iso
Очистить директорию от всех ранее созданных образов и сопутствующих файлов:
wasta-remastersys clean
Готовый образ системы будет находится в /home/wasta-remastersys/wasta-remastersys/
Для того что бы задать имя своего дистрибутива переходим в /etc/wasta-remastersys/wasta-remastersys.conf и меняем параметр LIVECDLABEL на свой.
Что бы прожечь образ на USB-носитель под Windows используем Rufus. Для linux и той же винды есть например Unetbootin:
add-apt-repository ppa:gezakovacs/ppa apt update apt install unetbootin
Как альтернатива можно использовать Systemback в режиме Live Create:
git clone https://github.com/sanotes-ru/systemback-install_pack-1.9.4 cd systemback-install_pack-1.9.4/ chmod +x install.sh sudo ./install.sh
7) Немного о Lubuntu и LXQt.
Lubuntu - производный от Ubuntu дистрибутив Linux с малым потреблением ресурсов, где в качестве среды рабочего стола используется LXQt, который в свою очередь появился в результате слияния LXDE и Razor-qt. Визуально интерфейс выглядит неплохо, но кажется как-то нечетко.
Установка системы производится только из Live-образа и занимает больше времени чем Xubuntu. По умолчанию доступна только одна раскладка клавиатуры, которая соотвествует выбираемому языку системы. Поэтому что бы установить русскую Lubuntu и на этапе создания пользователя задать имя на английском, необходимо сначала добавить индиактор клавиатуры и затем саму раскладку EN/US :)
Облегчить систему и избавится от некоторых пунктов меню, можно удалив следующие компоненты:
apt purge --auto-remove k3b vlc* pulseaudio* lximage* ScreenGrab* sane-utils* scanlite 2048-qt transmission* trojita* qpdf* plasma-discover* fcitx htop usb-creator* qps partitionmanager* ark* featherpad* kcalc qlipper qtpass vim* compton noblenote xscreensaver system-config-printer* info galternatives lxqt-about libreoffice* quassel*
Графического редактора меню не существует, но можно пошаманить с файлом /etc/xdg/menus/lxqt-applications.menu. Пункты меню это файлы *.desktop находящиеся в /usr/share/applications. Удаление файла приводит к исчезнованию его из меню. Либо внутри файла можно прописать OnlyShowIn=None. Там же можно задать/изменить категорию файла (Categories), что позволит переместить ярлык выше или ниже относительно корня. Итого текущее меню можно привести к следующему ввиду:
Панель можно только закрепить/открепить, но заблокировать нельзя, по крайней мере я не нагуглил. Так же на рабочем столе нельзя по простому создать кнопку запуска/ярлык, необходимо вручную создавать .desktop файл. Щелкнувшись правой кнопкой на рабочем столе, мы так же не увидим меню приложений, как это реализовано в xfce. Одним словом среда LXQt значительно менее гибкая и менее функциональная с точки зрения администрирования и ограничений интерфейса для нужд тонкого клиента и конечного пользователя.