Перейти к основному содержанию

Samba на Ubuntu Server в домене Windows

Ubuntu

Samba — ПО на Linux для организации общего доступа к файлам в среде Windows. Серверная часть открывает общий доступ к папкам Ubuntu для внешних пользователей. Клиентская часть позволяет получить доступ к сетевым папкам samba.

Есть у меня аппаратный сервер с операционной системой Ubuntu Server 18.04.5 LTS. На сервере имеется большой том, который планируется использовать в качестве файлового хранилища.

Установка Ubuntu Server 18.04.5 LTS на сервер Dell PowerEdge R740xd2

IP и DNS

Серверу назначен прямой IP адрес, hostname внесён в DNS сервер. Причём DNS сервер для Linux машин отдельный от доменного, но оба они умеют резолвить адреса друг друга. Подробно на этом не будем останавливаться.

AD аутентификация

В операционной системе уже настроена доменная аутентификация, можно логиниться на сервер под учётной записью Active Directory, права доступа тоже управляются с помощью доменных групп. Аутентификацию на сервере не я настраивал, поэтому описывать процесс подробно не буду. Скажу только, что доменную аутентификацию можно сделать разными способами. Читайте про krb5-user (пакет для протокола Kerberos, который используется для аутентификации в Windows) и/или winbind (позволяет использовать учетную запись пользователя из Active Directory). Я winbind не использую.

Проверить аутентификацию:

kinit v.pupkin@ILAB.LOCAL
klist

NTP

Время должно быть синхронизировано. Если расхождение по времени больше пяти минут, то мы не получим тикет от Kerberos. В общем, аутентификация не заработает. Не буду описывать процесс настройки ntp.

Ссылки

https://www.samba.org/samba/docs/current/man-html/smb.conf.5.html

Установка samba

apt-get install samba

Самба настраивается в файле /etc/samba/smb.conf. Старый файл можно переименовать в smb.conf.bak, чтобы подсматривать параметры по умолчанию:

samba

Указываем глобальные настройки:

[global]

# домен и настройки SID
workgroup = ILAB
realm = ILAB.LOCAL
security = ads

idmap config * : backend = tdb
idmap config * : range = 1300000-1999999
idmap config ILAB : backend = rid
idmap config ILAB : read only = yes
idmap config ILAB : range = 100000-999999

# представляемся
server string = %h server (Samba, Ubuntu)

# логирование
log file = /var/log/samba/log.%m
max log size = 1000
log level = 1

# письмо при краше
panic action = /usr/share/samba/panic-action %d

# пароли и аутентификация (многое здесь мне непонятно и в AD не используется)
passdb backend = tdbsam
obey pam restrictions = yes
unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n password\supdated\ssuccessfully* .
pam password change = yes

# убираем DNS проксирование
dns proxy = no

# не мешаем контроллерам домена
domain master = no
local master = no
preferred master = no

# отключаем принтеры
load printers = no
printing = bsd
show add printer wizard = no
printcap name = /dev/null
disable spoolss = yes

# убираем гостей и папки пользователей
usershare max shares = 0
usershare allow guests = no

Здесь:

  • workgroup — NETBIOS ИМЯ ДОМЕНА (или РАБОЧАЯ ГРУППА, если нет домена), в заглавном регистре
  • realm — ДОМЕН, в заглавном регистре
  • server string — имя сервера, которое будет отображаться в сетевом окружении
  • log file — логи
  • max log size — размер логов
  • log level — уровень логирования
  • panic action — действия при краше самбы, по умолчанию отправляет письмо админу
  • passdb backend — место хранения паролей
  • obey pam restrictions — поддержка PAM аутентификации, непонятно зачем она включена по умолчанию, потому что PAM аутентификация не может использоваться при "encrypt passwords = yes", а encrypt passwords при этом устарел и по умолчанию включен.
  • unix password sync — синхронизация паролей пользователей samba с локальными паролями, в AD не работает
  • passwd program — программа для синхронизации паролей, в AD не работает
  • passwd chat — текст для работы с паролями, в AD не работает
  • pam password change — поддержка смены пароля в PAM
  • security = ads — поддержка AD, самба ведёт себя как член домена.
  • dns proxy — обращаться ли к DNS для определения DNS имени по NETBIOS имени.
  • domain master — главный обозреватель домена
  • local master — главный обозреватель подсети
  • preferred master — предпочтительный обозреватель домена
  • load printers — загружать принтеры
  • printing — интерпретация статуса принтеров
  • show add printer wizard — отображать иконку добавления принтера
  • printcap name — определение списка принтеров
  • disable spoolss — поддержка SPOOLSS (для принтеров)
  • usershare max shares — папки пользователей
  • usershare allow guests — папки гостей
  • idmap config — настройки сопоставления SID с пользователями и группами POSIX

Давайте расшарим какую-нибудь папку, например, /u01/cron/, создаю её.

samba

Назначаю владельца и группу папки (пользователь и группа доменные!)

samba

Добавляем секцию в /etc/samba/smb.conf:

[bck-cron-u01]
path = /u01/cron
valid users = cron v.pupkin p.vupkin
read list   = cron v.pupkin p.vupkin
write list  = cron v.pupkin p.vupkin
read only = no

Здесь:

  • [NAME] — имя шары
  • path — путь к папке
  • valid users — кому можно войти
  • read list — кто имеет права на чтение
  • write list — кто имеет право на запись
  • read only — только чтение

Пример конфига:

  • [global]
    
    # домен и настройки SID
    workgroup = ILAB
    realm = ILAB.LOCAL
    security = ads
    
    idmap config * : backend = tdb
    idmap config * : range = 1300000-1999999
    idmap config ILAB : backend = rid
    idmap config ILAB : read only = yes
    idmap config ILAB : range = 100000-999999
    
    # представляемся
    server string = %h server (Samba, Ubuntu)
    
    # логирование
    log file = /var/log/samba/log.%m
    max log size = 1000
    log level = 1
    
    # письмо при краше
    panic action = /usr/share/samba/panic-action %d
    
    # пароли и аутентификация (многое здесь мне непонятно и в AD не используется)
    passdb backend = tdbsam
    obey pam restrictions = yes
    unix password sync = yes
    passwd program = /usr/bin/passwd %u
    passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n password\supdated\ssuccessfully* .
    pam password change = yes
    
    # убираем DNS проксирование
    dns proxy = no
    
    # не мешаем контроллерам домена
    domain master = no
    local master = no
    preferred master = no
    
    # отключаем принтеры
    load printers = no
    printing = bsd
    show add printer wizard = no
    printcap name = /dev/null
    disable spoolss = yes
    
    # убираем гостей и папки пользователей
    usershare max shares = 0
    usershare allow guests = no
    
    # шары
    
    [bck-cron-u01]
    path = /u01/cron
    valid users = cron v.pupkin p.vupkin
    read list   = cron v.pupkin p.vupkin
    write list  = cron v.pupkin p.vupkin
    read only = no

После изменения файла smb.conf не помешает проверить его утилитой testparm:

testparm

samba

Перезагружаем службу:

service smbd restart

Добавим сервер в домен:

net ads join -U v.pupkin -D ILAB.LOCAL

В случае успеха увидим что-то типа:

Using short domain name — DOMAIN
Joined 'SERVER' to realm 'domain.local'

У меня надпись немного другая:

samba

Сервер в домен добавился, но не прописался в DNS. В моём случае это нормально, потому как сервер прописан в DNS другой зоны, отличной от доменной. В AD сразу переношу его из папки Computers в нужный мне организационный юнит.

samba

Дадим 10 минут на распространение DNS зон, проверяем:

samba

Шара доступна.

Теги

 

Похожие материалы