Устанавливаем samba и winbind:
sudo apt-get install samba libnss-winbind
Базовая настройка smb.conf:
[global]
workgroup = DOMAIN
security = ads
realm = DOMAIN.COM
idmap config *:backend = tdb
idmap config *:range = 70001-80000
idmap config DOMAIN:backend = rid
idmap config DOMAIN:schema_mode = rfc2307
idmap config DOMAIN:range = 500-40000
winbind nss info = rfc2307
[test]
path = /share
read only = no
Для входа доменными учётными записями на компьютер (ssh,shell,gui), добавить в [global]:
template shell = /bin/bash
и установить libpam-winbind:
sudo apt install libpam-winbind
Ввести в домен:
sudo net ads join -U administrator
Проверяем (!!! Понадобится перезагрузка):
sudo wbinfo -t
Должно быть:
checking the trust secret for domain DOMAIN via RPC calls succeeded
Разрешить использовать winbind для аутентификации, редактируем /etc/nsswitch.conf:
passwd: files winbind group: files winbind
Регистрация в DNS домена:
net ads dns register -U administrator FQDN IP
В некоторых ситуациях, полезно иметь доступ без проверки подлинности на сервере Samba, где имя пользователя и пароль клиентом игнорируется. Для предоставления доступа к директории public_data, в smb.conf добавляются:
[global] map to guest = bad user
[public] path = /public_data guest ok = yes
чтобы разрешить запись:
[public] path = /public_data guest ok = yes read only = no
Доступ на запись к дирректории в файловой системе должны иметь все:
chmod -R a+rX /public_data
Также можно изменить гостевого пользователя для доступа к файловой системе:
[global] guest account = samba_guest map to guest = bad user
Отметить [*] Create home directory on login после ввода команды:
pam-auth-update
При установленном libpam-winbind
Для того чтобы доменные пользователи не входили на локальный сервер ограничиваем доступ в /etc/security/access.conf, например, разрешаем доступ только cron и пользователям входящим в группу sudo:
+ : ALL : cron - : ALL EXCEPT (sudo) : ALL
и добавляем модуль так, чтобы он стоял самым первым в /etc/pam.d/common-account:
account required pam_access.so
Квота применяется только на группы или пользователей.
Если нет возможности использовать такое ограничение квот, то необходимо смотреть в сторону LVM.
sudo apt-get install cifs-utils
Из командной строки:
sudo mount -t cifs //192.168.0.100/share /mnt -o rw,username=guest
с правами доступа 777:
sudo mount -t cifs //192.168.0.100/share /mnt -o rw,file_mode=0777,dir_mode=0777
Автомонтирование fstab:
//172.16.0.102/linux /mnt/smb cifs auto,user,username=user,domain=domain.com,password=password,rw
Монтирование с файлом аутентификаци:
sudo mount -t cifs //192.168.0.100/share /mnt -o ro,credentials=/root/.credentials
Apr 11 21:38:53 samba smbd[7964]: Unable to connect to CUPS server localhost:631 - Bad file descriptor
Отключаем CUPS сервер в smbd.conf:
load printers = no
show add printer wizard = no
printcap name = /dev/null
disable spoolss = yes
Jul 24 07:17:03 fs smbd_audit: process_usershare_file: stat of /var/lib/samba/usershares/�������� �������� failed. Permission denied Jul 24 07:17:03 fs smbd_audit: [2014/07/24 07:17:03.836485, 0] ../source3/param/loadparm.c:4365(process_usershare_file) Jul 24 07:17:03 fs smbd_audit: process_usershare_file: stat of /var/lib/samba/usershares/�������� �������� failed. No such file or directory
Проверяем конфиг самбы:
sudo testparm -sv | grep usershare
Если следующие значения другие, то меняем:
usershare allow guests = No usershare max shares = 0
Сообщает при запуске команды:
sudo testparm
Это количество одновременно открытых файлов у нас это 1024, проверить можно с помощью:
ulimit -n
Для того чтобы увеличить:
ulimit -n 16384 echo "* - nofile 16384" | sudo tee -a /etc/security/limits.conf
http://smb-conf.ru/samba-4-oshibka-rlimit_max-increasing-rlimit_max.html
Добавляем в /etc/smbd.conf в секцию [global]:
unix charset = UTF8 dos charset = CP1251
| Variable | Definition |
|---|---|
| Client variables | |
%a | Client's architecture (e.g., Samba, WfWg, WinNT, Win95, or UNKNOWN) |
%I | Client's IP address (e.g., 192.168.220.100) |
%m | Client's NetBIOS name |
%M | Client's DNS name |
| User variables | |
%g | Primary group of %u |
%G | Primary group of %U |
%H | Home directory of %u |
%u | Current Unix username |
%U | Requested client username (not always used by Samba) |
| Share variables | |
%p | Automounter's path to the share's root directory, if different from %P |
%P | Current share's root directory |
%S | Current share's name |
| Server variables | |
%d | Current server process ID |
%h | Samba server's DNS hostname |
%L | Samba server's NetBIOS name |
%N | Home directory server, from the automount map |
%v | Samba version |
| Miscellaneous variables | |
%R | The SMB protocol level that was negotiated |
%T | The current date and time |
map to guest = never |Bad User|Bad Password|Bad Uid - Этот параметр может принимать 4 различных значения, которые сообщают демону smbd что делать с запросами, которые не удалось аутентифицировать в UNIX.
Обратите внимание на то, что этот параметр требует наличие параметра «Guest» в параметрах открытой для доступа директории. Это потому что в этих режимах имя запрошенного ресурса не посылается серверу до тех пор пока сервер не аутентифицирует клиента, таким образом сервер не может делать выводы об аутентификации во время присоединения к ресурсу клиентов-гостей.
Этот параметр определяет UNIX имя пользователя, который будет назначен пользователем по умолчанию для всех пользователей подключеных к этому сервису.
Это имя пользователя будет использоваться только для установленных соединений. Таким образом, клиенту все еще необходимо подключиться как пользователь и предоставить действительный пароль. При подключении, все операции с файлами будут выполняться от «forced user», независимо от того под каким именем подключился пользователь.
Это определяет имя группы UNIX, которое будет назначено как первичная группа по умолчанию для всех пользователей, соединяющихся с этим сервисом.
Если имя группы в этом параметре имеет символ «+» перед именем группы, то текущий пользователь, обращающийся к общему ресурсу имеет только первичное значение по умолчанию группы, назначенное на эту группу. Это позволяет администратору решать, что только пользователи, которые уже находятся в специфической группе, создадут файлы с монопольным использованием группы, установленным на эту группу. Это дает более тонкую степень детализации назначения монопольного использования.
winbind separator = '\' - Определить символ, используемый при перечислении имен в формате имя_домена\пользователь
winbind use default domain = no |yes - Использовать имена пользователей AD не указывая имя домена и символ-разделитель
winbind cache time = 300 - Сколько секунд кэшировать информацию о пользователях и группах. Это не относится к запросам на проверку подлинности, они всегда оценивается в реальном времени, если опция winbind offline logon не включена.
winbind enum users = no |yes - На крупных доменах для подавления перечисления пользователей через системные вызовы setpwent(), getpwent(), endpwent().
winbind enum groups = no |yes - На крупных доменах для подавления перечисления групп через системные вызовы setgrent(), getgrent(), endgrent().
winbind rpc only = no |yes - Использовать RPC вместо LDAP для получения информации с контроллера домена.
winbind offline logon = false |true - Хранить пользовательские Credentials от успешных входов, в локальном кэше в зашифрованном виде.
winbind nss info = template | sfu | sfu20 | rfc2307 - Как получать информацию от Name Service Information для создания пользовательских домашних каталогов и login shell. В настоящее время доступны следующие значения параметра:
winbind normalize names = no |yes - Заменять или нет пробелы в имени пользователя, группы на символ подчеркивания. Например, имя “Domain Users”, будет заменено на “domain_users”.
Проверить конфигурационный файл можно командой:
sudo testparm
или для конкретного конф файла:
sudo tesparm -s
Используем утилиту smbclient для проверки работоспособности сервера. Параметр -L используется для вывода списка ресурсов сервера. Ключ -N используется для анонимного подключения к серверу:
smbclient -L FS -N
Проверить пользователей можно командой:
smbclient //FS/public -U user1%secret
Для проверки с windows машины:
net view \\FS
и
net use \\FS\public /user:user1
Для теста мы будем использовать утилиту Samba — nmblookup. У каждого Samba-сервера есть особое имя, _Samba_, на которое они откликаются всегда. Послав запрос по этому имени, мы можем проверить работоспособность nmbd. Ключ -U используется для того, чтобы отправить запрос на конкретный адрес.
nmblookup -U 127.0.0.1 __Samba__
Проверим, может ли nmbd зарегистрировать имя FS:
nmblookup -U 127.0.0.1 FS
Для провекрки не занято ли имя проверяем широковещательным запросом:
nmblookup -B 192.168.10.255 FS
Утилита, использующаяся в Windows для NetBIOS-запросов — nbtstat.exe — имеет еще несколько опций, которых нет в nmblookup. Одна из них (-n) позволяет «спросить» у NetBIOS-интерфейса, какие имена он успешно зарегистрировал:
nbtstat -n
Для входа доменными учётными записями должны быть видны пользователи и группы домена в winbind:
wbinfo -u wbinfo -g
для debug (не prod), в системе при установленных в smbd.conf:
winbind enum users = yes winbind enum groups = yes
getent passwd getent group
Уровни детализации логов:
| Уровень | Описание |
|---|---|
| 0 | Критические ошибки (не удалось открыть файл, разрыв соединения) |
| 1 | Информация о соединении и сессии |
| 2,4 | Отладочная информация для системного администрирования |
| 5,6,7,8,9 | Отладочная информация для разработчиков различного уровня детализации |
| 10 | Полная отладочная информация для разработчиков |
Чтобы узнать текущий уровень логирования smbd:
sudo smbcontrol smbd debuglevel
Если мы хотим увеличить уровень логирования до 10:
sudo smbcontrol smbd debug 10
В конфигурационном файле smb.confв секции [global]:
log level = 10 log file = /var/log/samba/log.%m
лог будет записываться в файл /var/log/samba/log.FS
Для логирования аудита в отдельный файл создаем /etc/rsyslog.d/49-samba_audit.conf:
:msg, contains, "|dir|open|" stop :msg, contains, "|file|open|" stop :syslogtag, contains, "smbd_audit" /var/log/smbd_audit.log & stop
и для ротации добавляем в /etc/logrotate.d/samba строчку:
/var/log/smbd_audit.log
перед строчкой:
/var/log/samba/log.smbd {
Перезапускаем службу:
sudo service rsyslog restart
Пример конфигурации full_audit для share:
vfs objects = full_audit full_audit:prefix = %u|%I|%S full_audit:success = create_file ftruncate mkdirat pwrite removexattr renameat sendfile unlinkat write
Сбрать образ:
docker build -t samba-anon samba
Запустить:
docker run --name samba -p 445:445 -v samba-data/shared:/data/shared -d samba-anon
Запустить со своим конфигом:
d run -v /data/docker/samba/etc_samba/smb.conf:/etc/samba/smb.conf \ -v /data/docker/patientaccount/data/:/data/patientaccount \ -p 445:445 --name samba -d samba-anon
https://www.samba.org
https://wiki.samba.org/index.php/Setup_a_Samba_AD_Member_Server - Setup a Samba AD Member Server
https://wikival.bmstu.ru/doku.php?id=%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_samba - Файловый сервер SAMBA (ad,winbind,kerberos)
http://wiki.linuxformat.ru/wiki/LXF123:Samba - LinuxFormat. Samba: Linux и Active Directory
http://wiki.linuxformat.ru/wiki/LXF124:Samba - LinuxFormat. Samba: ACL и Печать
http://smb-conf.ru - Всё о Samba