Цель этой статьи показать Вам, что альтернатива продуктам 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), сетевого хранилища общих папок и профилей пользователей.
Шаг 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
Шаг 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
Шаг 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. Приводим к такому виду:
Сетевые профили мы будем монтировать в /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
Шаг 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/Сетевые ресурсы
Шаг 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/ # Содержимое документов
Шаг 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
Проверяем установленые библиотеки
cd /opt/X11rdp/bin
ls -lh
ln -s /opt/X11rdp/bin/X11rdp /usr/bin/X11rdp # делаем симлинк в /usr/bin
Шаг 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 [xrdp1] [xrdp2]
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
name=RDP
lib=libxup.so
username=ask
password=ask
ip=127.0.0.1
port=-1
xserverbpp=24
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
Настраиваем авторизацию xrdp, приводим файл /etc/pam.d/xrdp-sesman к виду
#%PAM-1.0
@include sesman
Запускаем xrdp сервер и проверяем
service xrdp start
Если отобразились настройки 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)
Шаг 10. Последний шаг
Удаляем ненужные пакеты и перезагружаем систему.
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get autoremove -y
sudo sync
sudo reboot
В основе этой статьи легла эта инструкция
Автор: g00dtlt