Содержание
Samba
Samba 4 AD Domain Member
Устанавливаем 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
Регистрация в DNS домена:
net ads dns register -U administrator FQDN IP
Public Samba Server
В некоторых ситуациях, полезно иметь доступ без проверки подлинности на сервере 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
Ошибки
Unable to connect to CUPS server
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
process_usershare_file: stat of /var/lib/samba/usershares/�������� �������� failed.
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
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Сообщает при запуске команды:
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
Conversion error: Incomplete multibyte sequence
Добавляем в /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 |
smbd
map to guest (G)
map to guest = never |Bad User|Bad Password|Bad Uid - Этот параметр может принимать 4 различных значения, которые сообщают демону smbd что делать с запросами, которые не удалось аутентифицировать в UNIX.
- Never– Означает, что запросы с неправильным паролем будут отклонены. Это значение по умолчанию.
- Bad User– Означает, что запросы с неправильным паролем будут отклонены, если такое имя пользователя существует. Если не существует, то такие запросы будут считаться как попытки зайти гостем (guest account).
- Bad Password– Означает, что запросы с неправильным паролем будут обработаны как попытка зайти гостем. Обратите внимание на то, что это может стать источником проблем, т.к. если пользователь ошибется при вводе пароля, то он все равно пройдет авторизацию, но в качестве гостя и не будут знать причину по которой у них нет доступа к файлам, к которым по-идее доступ должен быть. Они не получат окно с сообщением о том что ввели неправильный пароль. Техподдержка возненавидит Вас, если вы поставите ЭТО значение параметра.
- Bad Uid– Применимо только в тех случаях когда Самба сконфигурирована в режиме доменной безопасности (security = {domain|ads}) и означает что пользовательские учетки, которые прошли аутентификацию, но не имеют действительной учетки Unix (и smbd не может создать таковую) следует считать гостевыми пользователями. Это было поведением по умолчанию в Сабме 2.х . Обратите внимание на то, что если имеется сервер winbindd, эта опция никогда не потребуется, потому что библиотека nss_winbind экспортирует доменные группы и пользователей Windows через интерфейс Name Service Switch.
Обратите внимание на то, что этот параметр требует наличие параметра «Guest» в параметрах открытой для доступа директории. Это потому что в этих режимах имя запрошенного ресурса не посылается серверу до тех пор пока сервер не аутентифицирует клиента, таким образом сервер не может делать выводы об аутентификации во время присоединения к ресурсу клиентов-гостей.
force user (S)
Этот параметр определяет UNIX имя пользователя, который будет назначен пользователем по умолчанию для всех пользователей подключеных к этому сервису.
Это имя пользователя будет использоваться только для установленных соединений. Таким образом, клиенту все еще необходимо подключиться как пользователь и предоставить действительный пароль. При подключении, все операции с файлами будут выполняться от «forced user», независимо от того под каким именем подключился пользователь.
force group (S)
Это определяет имя группы UNIX, которое будет назначено как первичная группа по умолчанию для всех пользователей, соединяющихся с этим сервисом.
Если имя группы в этом параметре имеет символ «+» перед именем группы, то текущий пользователь, обращающийся к общему ресурсу имеет только первичное значение по умолчанию группы, назначенное на эту группу. Это позволяет администратору решать, что только пользователи, которые уже находятся в специфической группе, создадут файлы с монопольным использованием группы, установленным на эту группу. Это дает более тонкую степень детализации назначения монопольного использования.
winbind
winbind separator (G)
winbind separator = '\' - Определить символ, используемый при перечислении имен в формате имя_домена\пользователь
winbind use default domain (G)
winbind use default domain = no |yes - Использовать имена пользователей AD не указывая имя домена и символ-разделитель
winbind cache time (G)
winbind cache time = 300 - Сколько секунд кэшировать информацию о пользователях и группах. Это не относится к запросам на проверку подлинности, они всегда оценивается в реальном времени, если опция winbind offline logon не включена.
winbind enum users (G)
winbind enum users = no |yes - На крупных доменах для подавления перечисления пользователей через системные вызовы setpwent(), getpwent(), endpwent().
winbind enum groups (G)
winbind enum groups = no |yes - На крупных доменах для подавления перечисления групп через системные вызовы setgrent(), getgrent(), endgrent().
winbind rpc only (G)
winbind rpc only = no |yes - Использовать RPC вместо LDAP для получения информации с контроллера домена.
winbind offline logon (G)
winbind offline logon = false |true - Хранить пользовательские Credentials от успешных входов, в локальном кэше в зашифрованном виде.
winbind nss info (G)
winbind nss info = template | sfu | sfu20 | rfc2307 - Как получать информацию от Name Service Information для создания пользовательских домашних каталогов и login shell. В настоящее время доступны следующие значения параметра:
- template - по умолчанию, используются шаблоны для login shell и home directory.
- <sfu | sfu20 | rfc2307> - Когда samba запущена в «security = ads» и Ваш Active Directory Domain Controller поддерживает Microsoft “Services for Unix” (SFU) LDAP схему, winbind может получить атрибуты login shell и home directory непосредственно от Вашего Directory Server. Для SFU 3.0 или 3.5 выбрать «sfu», если используется SFU 2.0, то «sfu20». Обратите внимание, что получение UID и GID с вашего ADS-Server требует использования idmap backend = ad или также idmap config DOMAIN:backend = ad.
winbind normalize names (G)
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
Netbios
Для теста мы будем использовать утилиту 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
Для входа доменными учётными записями должны быть видны пользователи и группы домена в 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
Rsyslog
Для логирования аудита в отдельный файл создаем /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
Сбрать образ:
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
