Инструменты пользователя

Инструменты сайта


how-to:samba

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

http://wiki.samba.org/index.php/Samba/Domain_Member

Регистрация в 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

https://wiki.samba.org/index.php/Public_Samba_Server

Автоматическое создание домашней директории

Отметить [*] 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

Монтирование с файлом аутентификаци:

/root/.credentials

/root/.credentials

username=user
password=password
domain=domain.com


sudo mount -t cifs //192.168.0.100/share /mnt -o ro,credentials=/root/.credentials

/etc/fstab

/etc/fstab

//192.168.0.100/share /mnt cifs ro,auto,credentials=/root/.credentials 0 0

Ошибки

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

http://avz.org.ua/wp/2009/05/14/samba-cups-error/

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

http://unixforum.org/index.php?showtopic=133195

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

http://habrahabr.ru/post/173127/

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

Dockerfile

Dockerfile

# Version: 0.0.2
FROM alpine
LABEL maintainer "lioncub"
LABEL description "Samba Anonymous Server"
LABEL based "twistify/anonymous-samba"

RUN apk --no-cache add \
    samba \
    samba-common-tools \
  && mkdir -p /data/shared \
  && chmod 777 /data/shared \
  && chown nobody:nogroup /data/shared

COPY smb.conf /etc/samba/smb.conf

EXPOSE 445

# Start Samba
# F: run daemon in foreground
# S: log to stdout
# no-process-group: don't create a new process group
ENTRYPOINT ["smbd", "-FS", "--no-process-group"]

smb.conf

smb.conf

[global]
   security = user
   map to guest = Bad User

[shared]
path = /data/shared
   browseable = yes
   read only = no
   create mask = 666
   directory mask = 777
   guest ok = yes
   force user = nobody


Сбрать образ:

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://hub.docker.com/r/twistify/anonymous-samba/

Ссылки

how-to/samba.txt · Последнее изменение: 127.0.0.1