10 шагов к терминальному серверу на Ubuntu

/www/pages/modesco/ubuntovod

Цель этой статьи показать Вам, что альтернатива продуктам 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

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

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

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

Настраиваем сеть, правим /etc/network/interfaces:

1
2
3
4
5
6
# 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 видим:

1
2
# 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:

1
2
3
nameserver 192.168.100.1
nameserver 8.8.8.8
search test.lan

Перезапускам сетевой интерфейс и проверяем настройки сети

/etc/init.d/networking restart
ip a

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

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 интерфейс для управления сетью, иначе он пытается управлять настройками сети.

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

Присоединяем систему к домену используя 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

Настраиваем PAM

Настраиваем монтирование сетевых ресурсов, выполнение пользовательских скриптов (от root) и настройки skel для пользователей при входе в систему.

Создаем файл скрипта и делаем его исполняемым (в дальнейшем можете использовать этот скрипт по своему усмотрению):

touch /etc/logon
chmod +x /etc/logon

Добавляем в /etc/pam.d/common-session:

1
2
3
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. Приводим к такому виду:

Сетевые профили мы будем монтировать в /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:

1
2
mount -t cifs //%(SERVER)/%(VOLUME) %(MNTPT) -o "user=%(USER),uid=%(USERUID),gid=%(USERGID)%(before=ьлвшк "," OPTIONS)"
sudo umount -l %(MNTPT)

Я пока не нашел как заставить выполнять pam-mount при входе по ssh:

Донастраиваем Xsession

Добавляем в /etc/X11/Xsession после set -e:

1
2
3
4
5
6
7
8
9
## Для корретного определения локали
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/Сетевые ресурсы

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

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

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

Проверяем установленые библиотеки:

cd /opt/X11rdp/bin
ls -lh
ln -s /opt/X11rdp/bin/X11rdp /usr/bin/X11rdp # делаем симлинк в /usr/bin

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

Настройка xrdp

Делаем резервную копию и создаем симлинк на Xsession:

cd /etc/xrdp
mv startwm.sh startwm.sh.BACKUP
ln -s /etc/X11/Xsession /etc/xrdp/startwm.sh

Приводим настройки /etc/xrdp/xrdp.ini к такому в виду:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[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 пользователей.

1
2
[Sessions]
MaxSessions=10

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

1
2
PIDDIR=/var/run
SESMAN_START=yes

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

1
2
#%PAM-1.0
@include sesman

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

service xrdp start

Если отобразились настройки xrdp-sesman, значит все встало как надо. В версии из репозитария настройки не отображаются. Теперь можно проверить подключение к серверу по RDP протоколу любым доступным клиентом.

В текущей сборке xrdp есть проблема в при вводе логин/пароля с переключением раскладок, поэтому логин пароль лучше задать в самом подключении. Если вам известно решение этой проблемы, скажите пожалуйста.

Настройка 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):

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

Удаляем ненужные пакеты и перезагружаем систему:

sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get autoremove -y
sudo sync
sudo reboot
Заново установили операционную систему? Не знаете где скачать бесплатные программы? Тогда зайдите на сайт softcor.ru!

Gremlin
2012-05-04 11:14:00
Ужас...
Dmitry@INdig0
2012-10-01 21:53:00
Спасибо! Правда у меня компилилось 2 часа =)
Tehnikpc Intel
2014-02-26 21:01:00
"Антивирусная защита (ClamAV)" Это не антивирус, а скорее просто программа.