HowTo: 10 шагов к терминальному серверу (RDP + NX) на Ubuntu с AD авторизацией

в 16:16, , рубрики: active directory, howto, linux, rdp, remote desktop, Ubuntu, xfce, xrdp, системное администрирование, Убунтариум, метки: , , , , , , ,

Цель этой статьи показать Вам, что альтернатива продуктам MS есть!

  • ОС Xubuntu 12.04 LTS amd64
  • Оконный менеджер XFCE
  • Поддержка протокола RDP (x11rdp)
  • Поддержка протокола NX (freenx)
  • Авторизация пользователей через Active Directory (likewise-open)
  • Настройки пользователей по умолчанию (skel)
  • Поддержка сетевых папок и профилей, авторизованных от доменного пользователя (pam_mount)
  • Выполнение скриптов при входе в систему от пользователя и от root (pam_exec)
  • Антивирусная защита (ClamAV)
  • Возможна поддержка ПО MS, 1С и т.п., в пределах возможностей wine или wine@etersoft

HowTo: 10 шагов к терминальному серверу (RDP + NX) на Ubuntu с AD авторизацией

Исходные ресурсы

  • Xubuntu 12.04 LTS amd64 Desktop с доступом в интернет
  • Windows 2008 в качестве сервера авторизации (AD test.lan, ip 192.168.100.1), сетевого хранилища общих папок и профилей пользователей.

Шаг 1, Подготавливаем систему

Настраиваем сеть, правим /etc/network/interfaces
# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.100.8
netmask 255.255.255.0
gateway 192.168.100.155

В настройка днс, нужно обязательно указать днс сервера AD, если в /etc/resolv.conf видим
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN

то настройки днс хранятся в /etc/resolvconf/resolv.conf.d/base
nameserver 192.168.100.1
nameserver 8.8.8.8
search test.lan

Перезапускам сетевой интерфейс и проверяем настройки сети
/etc/init.d/networking restart
ip a

HowTo: 10 шагов к терминальному серверу (RDP + NX) на Ubuntu с AD авторизацией

Шаг 2. Устанавливаем необходимые пакеты и обновляем систему

sudo apt-get update
sudo apt-get dist-upgrade -y
sudo apt-get install mc vim openssh-server chkconfig subversion libtool automake automake1.7 automake1.9 git libssl-dev libpam0g-dev libx11-dev libxfixes-dev xxkb likewise-open-gui libpam-mount clamtk smbfs python-software-properties pulseaudio-esound-compat paprefs -y
sudo apt-get remove network-manager -y # Удаляем gui интерфейс для управления сетью, иначе он пытается управлять настройками сети.

Шаг 3. Настраиваем доменную авторизацию

Присоединяем систему к домену используя likewise-open, Вы можете воспользоваться либо gui скриптом в меню системы или же воспользоваться консолью
domainjoin-cli join test.lan administrator@test.lan
Joining to AD Domain: test.lan
With Computer DNS Name: tsl.test.lan

administrator@test.lan's password:
SUCCESS
You should reboot this system before attempting GUI logins as a domain user.

По умолчанию likewise-open хранит профили пользователей по пути /home/likewise-open/Домен/Пользователь, настройка путей осуществляется через реестр. Войти в консольный редактор реестра можно командой lwregshell. Перемещаться по веткам реестра можно командой CD аналогично bash. Посмотреть доступные ключи можно командой ls. Установить значения ключей командой «set_value ключ значение».
Входим в консоль реестра lwregshell и выполняем:
cd [HKEY_THIS_MACHINEServiceslsassParametersProvidersActiveDirectory]
set_value HomeDirTemplate %H/%U
cd [HKEY_THIS_MACHINEServiceslsassParametersProvidersLocal]
set_value HomeDirTemplate %H/%U
exit

Обновляем параметры реестра после изменений
lwsm refresh lsass

HowTo: 10 шагов к терминальному серверу (RDP + NX) на Ubuntu с AD авторизацией

Шаг 4. Настраиваем PAM

Настраиваем монтирование сетевых ресурсов, выполнение пользовательских скриптов (от root) и настройки skel для пользователей при входе в систему.
Создаем файл скрипта и делаем его исполняемым. В дальнейшем можете использовать этот скрипт по своему усмотрению.
touch /etc/logon
chmod +x /etc/logon

Добавляем в /etc/pam.d/common-session
session required pam_mkhomedir.so umask=0022 skel=/etc/skel
session optional pam_exec.so /etc/logon
session optional pam_mount.so

Обязательно вставляем текст между строками с pam_unix.so pam_lsass.so, иначе не будет работать pam_mount. Приводим к такому виду:
HowTo: 10 шагов к терминальному серверу (RDP + NX) на Ubuntu с AD авторизацией

Сетевые профили мы будем монтировать в /net/%username%, для каждого пользователя отдельно. Очень не рекомендую монтировать сетевые диски в домашнюю папку пользователя (не дай бог пользователь удалит монтированную папку). Будем использовать симлинки.
Создаем папку для монтирования сетевых ресурсов /net
mkdir /net

Общие папки и профили у меня лежат на сервере 192.168.100.1
\192.168.100.1pr$%username% — профиль монтируем в /net/%username%/profile
\192.168.100.1public — общую папку монтируем в /net/%username%/public
Настраиваем папки для сетевого монтирования, добавляем параметры подключения в /etc/security/pam_mount.conf.xml после debug enable
[volume user="*" fstype="cifs" server="192.168.100.1" path="pr$/%(USER)" mountpoint="/net/%(USER)/profile" options="iocharset=utf8,ro,wine,noperm,file_mode=0660,dir_mode=2770" /]
[volume user="*" fstype="cifs" server="192.168.100.1" path="public" mountpoint="/net/%(USER)/public" options="iocharset=utf8,ro,wine,noperm,file_mode=0660,dir_mode=2770" /]
[cifsmount]mount -t cifs //%(SERVER)/%(VOLUME) %(MNTPT) -o "user=%(USER),uid=%(USERUID),gid=%(USERGID)%(before=ьлвшк "," OPTIONS)"[/cifsmount]
[umount]sudo umount -l %(MNTPT)[/umount]

Замените в тексте квадратные скобки [] на угловые скобки <>, так как редактор не пропустил XML.
Я пока не нашел как заставить выполнять pam-mount при входе по ssh
HowTo: 10 шагов к терминальному серверу (RDP + NX) на Ubuntu с AD авторизацией

Шаг 5. Донастраиваем Xsession

Добавляем в /etc/X11/Xsession после set -e
## Для корретного определения локали
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE
fi
## Для корретной работы переключения раскладок клавиатуры по control + shift
setxkbmap -layout "us,ru(winkeys)" -model "pc105" -option "grp:ctrl_shift_toggle,grp_led:scroll"
## автоматической создание симлинков на сетевые ресурсы при каждом входе
ln -f -s /net/$USER /home/$USER/Сетевые ресурсы

HowTo: 10 шагов к терминальному серверу (RDP + NX) на Ubuntu с AD авторизацией

Шаг 6. Настраиваем скелеты для пользователей

Под любым пользователем настраиваете рабочий стол, панели, ярлыки и т.п, все что нужно пользователям по умолчанию. Не забудьте добавить на панель индикатор переключения раскладки. Далее копируете из домашней папки настроенного пользователя настройки в /etc/skel. Обратите внимание на особенность при использовании skel не выполняется скрипт генерации первичной структуры домашней папки, так как при первом входе домашняя папка полностью копируется из /etc/skel
Выполняем с правами рута
cd /home/НастроенныйПользователь
cp -R -f -b .config/ /etc/skel/ # настройки xfce
cp -R -f -b Рабочий стол/ /etc/skel/ # Содержимое рабочего стола
cp -R -f -b Документы/ /etc/skel/ # Содержимое документов

HowTo: 10 шагов к терминальному серверу (RDP + NX) на Ubuntu с AD авторизацией

Шаг 7. Cобираем x11rdp

Устанавливаем библиотеки разработчиков xorg, качаем и собираем исходники x11rdp
sudo apt-get build-dep xserver-xorg-core
cd ~
svn co svn://server1.xrdp.org/srv/svn/repos/main/x11rdp_xorg71
sudo mkdir /opt/X11rdp # важно: /opt/X11rdp владелец должен быть root!
cd x11rdp_xorg71
time sudo sh buildx.sh /opt/X11rdp

Смело идем за стаканом с (чаемкофепивом) на моей виртуальной машине сборка занимает около 16 минут
all ok
real 15m57.336s
user 8m22.199s
sys 1m20.693s

HowTo: 10 шагов к терминальному серверу (RDP + NX) на Ubuntu с AD авторизацией
Проверяем установленые библиотеки
cd /opt/X11rdp/bin
ls -lh
ln -s /opt/X11rdp/bin/X11rdp /usr/bin/X11rdp # делаем симлинк в /usr/bin

HowTo: 10 шагов к терминальному серверу (RDP + NX) на Ubuntu с AD авторизацией

Шаг 8. Cобираем свежую сборку xrdp

Мы будем использовать свежую сборку xrdp. Что бы создать скрипты для запуска и установить зависимые пакеты ставим и удаляем xrdp из репозитария ubuntu.
sudo apt-get install xrdp -y ; apt-get remove xrdp -y

Клонируем под нормальным пользователем текущую версию xrdp
cd ~
git clone github.com/FreeRDP/xrdp.git xrdp.git

Собираем из исходников xrdp. Обратите внимание на checkout, это необходимо для корректной работы xrdp
cd xrdp.git
git checkout 4cd0c118c273730043cc77b749537dedc7051571
./bootstrap
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
make

Устанавливаем с правами root
sudo make install

Копируем и изменяем RSA ключи, это необходимо для RDP сессий
sudo su -
mkdir /usr/share/doc/xrdp
mv /etc/xrdp/rsakeys.ini /usr/share/doc/xrdp/
chmod 600 /usr/share/doc/xrdp/rsakeys.ini
chown xrdp:xrdp /usr/share/doc/xrdp/rsakeys.ini

Шаг 8. Настройка xrdp

Делаем резервную копию и создаем симлинк на Xsession
cd /etc/xrdp
mv startwm.sh startwm.sh.BACKUP
ln -s /etc/X11/Xsession /etc/xrdp/startwm.sh

Приводим настройки /etc/xrdp/xrdp.ini к такому в виду
[globals]
bitmap_cache=yes
bitmap_compression=yes
port=3389
crypt_level=low
channel_code=1
max_bpp=24
#black=000000
grey=d6d3ce
#dark_grey=808080
#blue=08246b
#dark_blue=08246b
#white=ffffff
#red=ff0000
#green=00ff00
#background=626c72

[xrdp1]
name=RDP
lib=libxup.so
username=ask
password=ask
ip=127.0.0.1
port=-1
xserverbpp=24

[xrdp2]
name=VNC
lib=libvnc.so
username=ask
password=ask
ip=127.0.0.1
port=-1

Количество разрешённых подключений можно установить в /etc/xrdp/sesman.ini
По умолчанию разрешено 10 пользователей.
[Sessions]
MaxSessions=10

Немного изменяем скрипт управления /etc/init.d/xrdp, добавляем параметры
PIDDIR=/var/run
SESMAN_START=yes

HowTo: 10 шагов к терминальному серверу (RDP + NX) на Ubuntu с AD авторизацией

Настраиваем авторизацию xrdp, приводим файл /etc/pam.d/xrdp-sesman к виду
#%PAM-1.0
@include sesman

Запускаем xrdp сервер и проверяем
service xrdp start

HowTo: 10 шагов к терминальному серверу (RDP + NX) на Ubuntu с AD авторизацией
Если отобразились настройки xrdp-sesman, значит все встало как надо. В версии из репозитария настройки не отображаются. Теперь можно проверить подключение к серверу по RDP протоколу любым доступным клиентом.
В текущей сборке xrdp есть проблема в при вводе логинпароля с переключением раскладок, поэтому логин пароль лучше задать в самом подключении. Если вам известно решение этой проблемы, скажите пожалуйста.

Шаг 9. Настройка freenx сервера

В текущем репозитарии ubuntu 12.04 нет пакета esound-clients, который требует freenx. Скачиваем и устанавливаем нужные пакеты вручную.
Выполняем от root
cd /tmp/
add-apt-repository ppa:freenx-team
sed -i 's/lucid/precise/g' /etc/apt/sources.list.d/freenx-team-ppa-precise.list
wget de.archive.ubuntu.com/ubuntu/pool/main/e/esound/esound-common_0.2.41-8_all.deb de.archive.ubuntu.com/ubuntu/pool/main/e/esound/libesd0_0.2.41-8_amd64.deb de.archive.ubuntu.com/ubuntu/pool/main/e/esound/esound-clients_0.2.41-8_amd64.deb launchpad.net/ubuntu/+source/audiofile/0.2.6-8ubuntu1/+build/1416868/+files/libaudiofile0_0.2.6-8ubuntu1_amd64.deb
dpkg -i esound-common_0.2.41-8_all.deb libesd0_0.2.41-8_amd64.deb esound-clients_0.2.41-8_amd64.deb libaudiofile0_0.2.6-8ubuntu1_amd64.deb
apt-get -f -y install
apt-get update
apt-get install freenx -y
wget bugs.launchpad.net/freenx-server/+bug/576359/+attachment/1378450/+files/nxsetup.tar.gz
tar -xvf nxsetup.tar.gz
sudo cp nxsetup /usr/lib/nx/nxsetup
sudo /usr/lib/nx/nxsetup --install

Клиента для FreeNX можно скачать на сайте nomachine.com
Не забудьте в настройках клиента указать тип рабочего стола CDE (xfce)
HowTo: 10 шагов к терминальному серверу (RDP + NX) на Ubuntu с AD авторизацией

Шаг 10. Последний шаг

Удаляем ненужные пакеты и перезагружаем систему.
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get autoremove -y
sudo sync
sudo reboot

В основе этой статьи легла эта инструкция

Автор: g00dtlt

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js