Введение


Когда я в первые установил пакет Samba в Solaris, выяснилось, что роли ADDC в данном пакете нету. Долгие поиски в интернете привели меня к ответам такого рода — пакет Samba в Solaris эту роль не поддерживает, а на некоторых писали о том, что данную роль вообще невозможно реализовать в Solaris. Дальнейшее исследование привели меня к тому, что всё упирается в отсутствие в zfs Posix ACL, а также в python который используется в Solaris. Для решения данных проблем необходимо использовать жёсткий диск с файловой системой ufs, а также собрать из исходного кода python(а также Samba).

Подготовка


Все действия я произвожу в VMware ESXI, перед установкой системы добавьте в виртуальную машину ещё один жёсткий диск. Далее необходимо скачать исходный код Python и Samba(в корень файловой системы).

wget https://download.samba.org/pub/samba/stable/samba-4.8.8.tar.gz
wget https://www.python.org/ftp/python/2.7.15/Python-2.7.15.tgz

Распакуем архивы и переименуем папки для большего удобства

gzip -d samba-4.8.8.tar.gz
gzip -d Python-2.7.15.tgz
tar -xvf Python-2.7.15.tar
tar -xvf samba-4.8.8.tar
mv Python-2.7.15 python
mv samba-4.8.8 samba

Далее необходимо установить gcc и некоторые зависимости

pkg install gcc
pkg install pkgconfig
pkg install automake
pkg install autoconf

Установим переменные для сборки x64 версий

export CPP="/usr/gcc/7/bin/gcc -E"
export CC="/usr/gcc/7/bin/gcc"
export CFLAGS="-m64 -std=gnu99 -fPIC -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
export LDFLAGS="-m64 -L/usr/lib -R/usr/lib"
export CXXFLAGS="-m64"

Создадим файловую систему ufs на дополнительном жёстком диске(укажите имя которое используется у Вас)

newfs /dev/dsk/c1t1d0s2

Далее необходимо прописать данный жёсткий диск в файл vfstab(не опечатка, в Solaris этот файл называется именно так). Добавьте в данный файл такую строку.

/dev/dsk/c1t1d0s2       /dev/dsk/c1t1d0s2       /ADDC   ufs     fsck    yes     -

Создайте каталог для монтирования и смонтируйте в него жёсткий диск

mkdir /ADDC
mount /dev/dsk/c1t1d0s2 /ADDC

Сборка и установка


Можно приступать к сборке Samba и Python. Перейдите в каталог с распакованным исходным кодом Solaris и выполните сборку. Сборка Samba занимает довольно длительное время.

cd /samba
./configure --prefix=/ADDC
gmake
gmake install

Для сборки python дополнительных параметров указывать не нужно, установка будет произведена в каталог /usr/local

cd /python
./configure
gmake
gmake install

После сборки python необходимо добавить путь до только, что собранного python в переменную path

export PATH="/usr/local/bin:/usr/sbin:/usr/bin"

ВАЖНО: Для того что-бы всё корректно сработало, необходимо указать переменную PATH как указано в данном примере, путь /usr/local/bin должен быть на первом месте.
После данных действий использовать Samba в роли ADDC не составит проблем, для этого необходимо выполнить скрипт samba-tool

/ADDC/bin/samba-tool domain provision --use-rfc2307 --dns-backend=SAMBA_INTERNAL --realm=office.virusslayer.su --domain=virusslayer --host-name=ad --host-ip=192.168.1.105 --function-level=2008_R2 --adminpass=Password123456

Укажите realm, domain, host-name которые необходимы Вам, в также host-ip который используется у данного хоста.

Следующем шагом будет настройка kerberos, для этого необходимо изменить следующие файлы

/etc/krb5/krb5.conf
/etc/krb5/kdc.conf

Файл krb5.conf необходимо привести к виду

[libdefaults]
        default_realm = OFFICE.VIRUSSLAYER.SU
        dns_lookup_realm = false
        dns_lookup_kdc = true
        default_tgs_enctypes = aes256-cts-hmac-sha1-96
        default_tkt_enctypes = aes256-cts-hmac-sha1-96
        permitted_enctypes = aes256-cts-hmac-sha1-96

[realms]
OFFICE.VIRUSSLAYER.SU = {
              kdc = kdc.office.virusslayer.su
              admin_server = kdc.office.virusslayer.su
      }

kdc.conf

[realms]
        OFFICE.VIRUSSLAYER.SU = {
                profile = /etc/krb5/krb5.conf
                acl_file = /etc/krb5/kadm5.acl
                kadmind_port = 749
                max_life = 8h 0m 0s
                max_renewable_life = 7d 0h 0m 0s
                default_principal_flags = +preauth
        }

Для автозапуска и остановки мне пришлось написать простой скрипт на bash, в скрипте мне не удалось реализовать перезапуск Samba, после выполнения pkill -15 samba, скрипт заканчивает своё выполнение, если кто знает как правильно реализовать данный функционал, прошу написать в комментариях

#!/usr/bin/bash

case $1 in

    start|-start)
        /ADDC/sbin/samba
        /ADDC/sbin/smbd
        /ADDC/sbin/nmbd
        ;;
    stop|-stop)

        rm /ADDC/var/run/*.pid
        pkill -15 samba
        pkill -15 smbd
        pkill -15 nmbd
        ;;
    v|-v)
        /ADDC/sbin/samba -V
        ;;
    config|-config)
        cat /ADDC/etc/smb.conf
        ;;
    restart|-restart)
        rm /ADDC/var/run/*.pid
        pkill -15 samba
        pkill -15 smbd
        pkill -15 nmbd
        /ADDC/sbin/samba
        /ADDC/sbin/smbd
        /ADDC/sbin/nmbd
        ;;
esac

Данный скрипт поместите в файл(предварительно его создав) /usr/bin/samba, сделайте его исполняемым и скопируйте его в каталоги rc3.d, rc0.d для автозапуска и остановки Samba

touche /usr/bin/samba
chmod +x /usr/bin/samba
cp /usr/bin/samba /etc/rc3.d/Ssamba
cp /usr/bin/samba /etc/rc0.d/Ksamba

Для дальнейшей корректной работы необходимо изменить dns сервер системы(файл resolve.conf не нужно изменять, изменения сохраняться только до перезагрузки), для этого отредактируем службу и обновим статус(в качестве сервера укажите ip адрес текущей системы)

svccfg -s dns/client setprop config/nameserver="192.168.1.105"
svcadm refresh dns/client

После данных манипуляций можно запустить Samba, а также добавить dns запись

/usr/bin/samba
/ADDC/bin/samba-tool dns add office.virusslayer.su -U administrator office.virusslayer.su kdc.office.virusslayer.su A 192.168.1.105

Проверим работу kerberos

kinit administrator

Если всё корректно и пароль введён правильно, билет будет создан в каталоге /tmp/volatile-user/0
На этом настройка kerberos не закончена, также необходимо настроить сервер синхронизации времени, для этого создайте файл /etc/inet/ntp.conf, запустите службу времени и внесите в данный файл необходимые изменения

server 127.127.1.0 prefer

server 0.europe.pool.ntp.org
server 1.europe.pool.ntp.org
server 2.europe.pool.ntp.org
server 3.europe.pool.ntp.org

driftfile /var/ntp/ntp.drift
restrict 192.168.1.0 255.255.255.0 nomodify notrap

В строке restrict укажите подсеть которой будет разрешен доступ к серверу времени

Запустите и обновите службу

svcadm enable ntp
svcadm refresh ntp

Для редактирования групповых политик можно использовать средства удалённого администрирования(RSAT), данные средства можно скачать от сюда

Windows 8.1
https://www.microsoft.com/ru-ru/download/details.aspx?id=39296

Windows 10
https://www.microsoft.com/ru-RU/download/details.aspx?id=45520

Windows 7
https://www.microsoft.com/ru-ru/download/details.aspx?id=7887

После установки RSAT в Windows 7, данные средства необходимо включить в панели управления(Включение и отключение компонентов Windows). После того как компьютер будет введён в домен, запустите редактор групповых политик, в Default Domain Policy отредактируйте политику отвечающею за сервер времени

image

В данном разделе необходимо включить параметр «Включить NTP-клиент Windows», «Настроить NTP-клиент Windows», тип выставить NTP, NtpServer указать office.virusslayer.su

Дополнительно можно настроить firewall, отредактируйте файл /etc/firewall/pf.conf(приведя его к следующему виду).

set skip on lo0

pass quick on lo0 from any to any no state


pass in quick on net0 proto {tcp,udp} from any to any port {22,53,123,135,137,464,389,515,636,631,445,139,88,3268,3269,49152:65535} flags S/SA modulate state

pass out quick on net0 proto tcp from any to any port {80,443,21,20,53} flags S/SA modulate state
pass out quick on net0 proto udp from any to any port=53 keep state
pass out quick on net0 proto icmp from any to any

block from any to any fragment
block from any to any
block all

Запустите службу и укажите файл с правилами

svcadm enable firewall
pfctl -f /etc/firewall/pf.conf

Заключение


Как видно из данной публикации в Solaris возможно использовать Samba в роли ADDC, хоть это намного сложнее чем любой другой операционной системе.

Комментарии (16)


  1. rezdm
    05.02.2019 01:24
    +1

    Посмотрел на календарь — 2019-ый, хм.
    Нет, я и сам любитель солярки, держал на домашнем мини-сервере, пока тот не навернулся (и зачем я в усб-порт ножницы сунул?) Может меня даже помнит тот человек, который в ээ… '97-ом-'99 году, часа в два ночи ответил в техподдержке МТУ (когда там халявный диалап был), и мы с ним настраивали ppp в солярке, и он мне сказал:
    — Ну, бывает, кошечек заводят для удовольствия. Но солярис?

    Короче, «зачем»? На ибее взять сейчас лицензионный виндоуз сервер стоит, по сравнению с железом и прочим — копейки.


    1. DaemonGloom
      05.02.2019 13:10

      Короче, «зачем»? На ибее взять сейчас лицензионный виндоуз сервер стоит, по сравнению с железом и прочим — копейки.

      Нет. Там можно взять win server, который успешно активируется. Лицензионным он от этого не станет. Не надо распространять такие мысли, пожалуйста. Разница в том, что для юридического пользования эта копия не будет годиться.


      1. fishca
        05.02.2019 15:03

        Разница в том, что для юридического пользования эта копия не будет годиться

        Разве юридическая чистота не зависит от наличия купленной бумажной лицензии?


        1. DaemonGloom
          06.02.2019 06:39

          Бумажная или нет — не столь критично, важно, чтобы компания смогла доказать, что эту лицензию она получила честно. А на таких сайтах обычно продаются ключи либо OEM, либо MAK(взятые из корпоративной подписки). Их лицензионность доказать не получится никак. Вообще — такие ключи раньше просто выкладывали на варезных порталах и никому не приходило в голову их покупать.


    1. a0fs
      05.02.2019 22:38

      Короче, «зачем»?

      Дабы вкусить сей продукт, пока его не похоронили в недрах Oracle-овских шкафов я полагаю…


  1. tankistua
    05.02.2019 01:47

    Зачем целый диск?


    zfs create -V 100G tank/ufs
    fdisk /dev/tank/ufs
    Дальше раздел, формат и маунт — должно работать.


  1. fishca
    05.02.2019 09:22

    А что подтолкнуло к использованию Solaris?


    1. Deq56
      06.02.2019 21:49

      наверное, что бы написать очередную статью по установке, иного смысла просто не вижу.


  1. propell-ant
    05.02.2019 10:03

    У вас в заголовке статьи ошибка — должно быть «в роли».


  1. skeletor
    05.02.2019 11:09

    1) Зачем собирать python-27, если он уже есть в пакетах? Я понимаю, если нужно как-то кастомно, но в статье дефолтные настройки сборки
    2) Зачем использовать UFS? Какая выгода по сравнению с ZFS?


    1. batyrmastyr
      05.02.2019 14:27

      В самом начале статьи же: «всё упирается в отсутствие в zfs Posix ACL, а также в python который используется в Solaris». Хотя что не так с питоном и мне непонятно.


      1. skeletor
        05.02.2019 14:36

        Когда я спрашивал, подразумевал, что именно не сложилось с ZFS ACL, почему именно нужно POSIX ACL? Хочется больше подробностей. И Кстати, в samba ZFS (NFS) ACL нормально так интегрируются www.samba.org/samba/docs/current/man-html/vfs_zfsacl.8.html. Тоже самое и про python (с какими трудностями столкнулся автор?).


      1. Nemets85 Автор
        06.02.2019 22:54

        Что конкретно с питоном и мне не понятно, по какой то причине samba-tool отказывается выполняться, а вот с собранным все ок.


    1. Nemets85 Автор
      06.02.2019 22:56

      Можно пример ./configure и smb.conf при которых samba заработает в роли ADDC на zfs?


  1. a0fs
    05.02.2019 22:34
    +1

    в скрипте мне не удалось реализовать перезапуск Samba, после выполнения pkill -15 samba, скрипт заканчивает своё выполнение, если кто знает как правильно реализовать данный функционал

    Проще всего переименовать скрипт из samba в smbadm или что-то что не убивается по имени процесса =)))


    1. Nemets85 Автор
      06.02.2019 21:57

      Действительно, мне что-то и в голову не пришла мысль о том, что скрипт завершает сам себя, спасибо за подсказку.