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