Заметки сисадмина
Назад

Тонкий клиент на базе Xubuntu

Опубликовано: 26.10.2021
Время на чтение: 71 минута
0
3213

Сразу оговоримся, что речь пойдет о системе установленной на жесткий диск, т.к обычно под тонким клиентом подразумевают её бездисковый вариант. По поводу выбора дистрибутива. Почему 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-basetransmission-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, ограничений и прав.

Создадим нового пользователя с рабочего стола которого будут запускаться ярлыки для доступа к серверу. Запретим ему все ненужное, оставив только то, что необходимо для работы. Поставим галочку, не спрашивать пароль при входе. Так же выключим все лишнее в "Менеджере питания", "Хранителе экрана" и.т.д.

xubuntu_new_user

Перезагружаем ПК и видим, что система снова загрузилась под 'администратором'. Правим /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

Итого, после всех манипуляций получим примерно такую картинку.

xubuntu_menu_desktop2

Что бы запретить пользователям отключать и включать сеть используя иконку 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">

Сохраняем файл, перезагружаемся. Видим, что возможность добавлять новые элементы панели и редактировать меню по правой кнопке пропала.

xubuntu_lock_panel

Отменяем блокировку панели, удалением файла:

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>

Итого получим следующий вид:

xubuntu_session_logout

Запретить ручной запуск остальных апплетов 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

Добавляем на рабочий стол ярлыки запуска программ:

xubuntu_add_shortcut_to_desktop

Команда для подключения к 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 :)

lubuntu_lxqt

Облегчить систему и избавится от некоторых пунктов меню, можно удалив следующие компоненты:

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), что позволит переместить ярлык выше или ниже относительно корня. Итого текущее меню можно привести к следующему ввиду:

lubuntu_lxqt_menu

Панель можно только закрепить/открепить, но заблокировать нельзя, по крайней мере я не нагуглил. Так же на рабочем столе нельзя по простому создать кнопку запуска/ярлык, необходимо вручную создавать .desktop файл. Щелкнувшись правой кнопкой на рабочем столе, мы так же не увидим меню приложений, как это реализовано в xfce. Одним словом среда LXQt значительно менее гибкая и менее функциональная с точки зрения администрирования и ограничений интерфейса для нужд тонкого клиента и конечного пользователя.

Поделиться
Похожие записи