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, чтобы подсматривать параметры по умолчанию:
Указываем глобальные настройки:
[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/, создаю её.
Назначаю владельца и группу папки (пользователь и группа доменные!)
Добавляем секцию в /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 — только чтение
Пример конфига:
-
/etc/samba/smb.conf
[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
Перезагружаем службу:
service smbd restart
Добавим сервер в домен:
net ads join -U v.pupkin -D ILAB.LOCAL
В случае успеха увидим что-то типа:
Using short domain name — DOMAIN
Joined 'SERVER' to realm 'domain.local'
У меня надпись немного другая:
Сервер в домен добавился, но не прописался в DNS. В моём случае это нормально, потому как сервер прописан в DNS другой зоны, отличной от доменной. В AD сразу переношу его из папки Computers в нужный мне организационный юнит.
Дадим 10 минут на распространение DNS зон, проверяем:
Шара доступна.