
Цель этой статьи показать Вам, что альтернатива продуктам 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 |
Перезапускам сетевой интерфейс и проверяем настройки сети
1 2 |
/etc/init.d/networking restart ip a |
Устанавливаем необходимые пакеты и обновляем систему
1 2 3 4 |
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 скриптом в меню системы или же воспользоваться консолью:
1 2 3 4 5 6 7 |
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 и выполняем:
1 2 3 4 5 |
cd [HKEY_THIS_MACHINEServiceslsassParametersProvidersActiveDirectory] set_value HomeDirTemplate %H/%U cd [HKEY_THIS_MACHINEServiceslsassParametersProvidersLocal] set_value HomeDirTemplate %H/%U exit |
Обновляем параметры реестра после изменений:
1 |
lwsm refresh lsass |
Настраиваем PAM
Настраиваем монтирование сетевых ресурсов, выполнение пользовательских скриптов (от root) и настройки skel для пользователей при входе в систему.
Создаем файл скрипта и делаем его исполняемым (в дальнейшем можете использовать этот скрипт по своему усмотрению):
1 2 |
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:
1 |
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.
Выполняем с правами рута
1 2 3 4 |
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:
1 2 3 4 5 6 |
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 минут:
1 2 3 4 |
all ok real 15m57.336s user 8m22.199s sys 1m20.693s |
Проверяем установленые библиотеки:
1 2 3 |
cd /opt/X11rdp/bin ls -lh ln -s /opt/X11rdp/bin/X11rdp /usr/bin/X11rdp # делаем симлинк в /usr/bin |
Cобираем свежую сборку xrdp
Мы будем использовать свежую сборку xrdp. Что бы создать скрипты для запуска и установить зависимые пакеты ставим и удаляем xrdp из репозитария Ubuntu:
1 |
sudo apt-get install xrdp -y ; apt-get remove xrdp -y |
Клонируем под нормальным пользователем текущую версию xrdp:
1 2 |
cd ~ git clone github.com/FreeRDP/xrdp.git xrdp.git |
Собираем из исходников xrdp. Обратите внимание на checkout, это необходимо для корректной работы xrdp:
1 2 3 4 5 |
cd xrdp.git git checkout 4cd0c118c273730043cc77b749537dedc7051571 ./bootstrap ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var make |
Устанавливаем с правами root:
1 |
sudo make install |
Копируем и изменяем RSA ключи, это необходимо для RDP сессий:
1 2 3 4 5 |
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:
1 2 3 |
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 сервер и проверяем:
1 |
service xrdp start |
Если отобразились настройки xrdp-sesman, значит все встало как надо. В версии из репозитария настройки не отображаются. Теперь можно проверить подключение к серверу по RDP протоколу любым доступным клиентом.
В текущей сборке xrdp есть проблема в при вводе логин/пароля с переключением раскладок, поэтому логин пароль лучше задать в самом подключении. Если вам известно решение этой проблемы, скажите пожалуйста.
Настройка freenx сервера
В текущем репозитарии Ubuntu 12.04 нет пакета esound-clients, который требует freenx. Скачиваем и устанавливаем нужные пакеты вручную.
Выполняем от root:
1 2 3 4 5 6 7 8 9 10 11 12 |
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):
Последний шаг
Удаляем ненужные пакеты и перезагружаем систему:
1 2 3 4 5 |
sudo apt-get update sudo apt-get upgrade -y sudo apt-get autoremove -y sudo sync sudo reboot |