Назад | Перейти на главную страницу

Samba 4: домен присоединен, но все пользователи никому не сопоставлены, а общие ресурсы недоступны для клиентов Windows

У меня есть Debian / Jessie Samba 4.2.14, работающая как член AD. ADC - это сервер Windows2008R2. Присоединение прошло без проблем.

# net ads testjoin
Join is OK

wbinfo -u и wbinfo -g отлично работают и, как и ожидалось, предоставляет список пользователей и групп из AD. wbinfo -i <user> тоже работает:

# wbinfo -i TESTAD\\testuser
TESTAD\testuser:*:4294967295:4294967295:testuser:/home/TESTAD/testuser:/bin/false

Редактировать: здесь что-то не так, потому что wbinfo -i сопоставляет всех пользователей и группы с идентификатором 4294967295, который, как заметил @TheSkunk, 2 ^ 32-1.

Изменить 2: wbinfo --sid-to-uid TESTAD\\testuser терпит неудачу. Конечно, я должен явно настроить некоторые idmap параметры (значения по умолчанию явно не работают), но как?

Изменить 3: Я добавил эти 2 строки в smb.conf:

idmap config * : backend = tdb
idmap config * : range = 10000-30000

А теперь ẁbinfo -i TESTDOMAIN \ testuserreports a valid id, and a different one for each and every user. However I still have the same problems (all users mapping to nobody,мне быandgetent` незнание пользователей AD и т. д.).

тем не мение getent passwd TESTAD\\testuser не удается:

# getent passwd TESTAD\\testuser
# echo $? 
2

я может подключиться на сервер с любой учетной записью AD, используя smbclient:

# smbclient //srv1/data -U TESTAD\\testuser
Enter TESTAD\testuser's password: 
Domain=[TESTAD] OS=[Windows 6.1] Server=[Samba 4.2.14-Debian]
smb: \> ls
  .                                   D        0  Fri Feb 17 16:23:04 2017
  ..                                  D        0  Wed Feb  1 16:47:02 2017
  test.txt                            N        5  Fri Feb 17 14:38:21 2017
  popo                                D        0  Fri Feb 17 16:23:04 2017

                117125466112 blocks of size 1024. 117052392484 blocks available
smb: \> 

Однако соединение отображается на nobody/nogroup, а созданные файлы принадлежат nobody слишком. Машины Windows не могут подключиться с помощью какой-либо учетной записи AD. Однако, если я создам локальную учетную запись с smbpasswd -a <user>, они могут подключиться с его помощью. Однако их параметры подключения, файлы и т. Д. Сопоставляются с nobody хотя учетная запись тоже существует локально.

Вот текущий smb.conf (как можно ближе к дефолту):

[global]
        workgroup = TESTAD
        realm = TESTAD.lan
        server role = member server
        security = ADS
        map to guest = Bad User
        obey pam restrictions = Yes
        pam password change = Yes
        passwd program = /usr/bin/passwd %u
        passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
        unix password sync = Yes
        syslog = 0
        log file = /var/log/samba/log.%m
        max log size = 1000
        dns proxy = No
        usershare allow guests = Yes
        panic action = /usr/share/samba/panic-action %d
        idmap config * : backend = tdb
        inherit permissions = Yes
        inherit acls = Yes


[DATA]
        path = /mnt/raid/
        read only = No
        guest ok = Yes

вот /etc/nsswitch.conf (Я пробовал добавлять и удалять winbindd из тени, никаких изменений):

# cat /etc/nsswitch.conf 
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat winbind
group:          compat winbind
shadow:         compat winbind
gshadow:        files

hosts:          files mdns4_minimal [NOTFOUND=return] dns wins
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

Я не понимаю, почему аутентификация никогда не проходит через winbind. Я в отчаянии, есть идеи?

Я обнаружил основную проблему: отсутствующий пакет. К сожалению, сделать это непросто: вот окончательная рабочая конфигурация (спасибо Роуленду Пенни с samba.org):

убедитесь, что вы установили все необходимые пакеты (отсутствующим был libnss-winbind):

apt-get install samba acl attr quota fam winbind libpam-winbind \
libpam-krb5 libnss-winbind krb5-config krb5-user ntp dnsutils ldb-tools

прекратить услуги

service smbd stop
service nmbd stop
service winbind stop

настройте правильный smb.conf (в частности, параметры idmap):

[global]
    workgroup = TESTAD
    security = ADS
    realm = TESTAD.LAN

    dedicated keytab file = /etc/krb5.keytab
    kerberos method = secrets and keytab
    server string = Data %h

    winbind use default domain = yes
    winbind expand groups = 4
    winbind nss info = rfc2307
    winbind refresh tickets = Yes
    winbind offline logon = yes
    winbind normalize names = Yes

    ## map ids outside of domain to tdb files.
    idmap config *:backend = tdb
    idmap config *:range = 2000-9999
    ## map ids from the domain  the ranges may not overlap !
    idmap config TESTAD : backend = rid
    idmap config TESTAD : range = 10000-999999
    template shell = /bin/bash
    template homedir = /home/TESTAD/%U

    domain master = no
    local master = no
    preferred master = no
    os level = 20
    map to guest = bad user
    host msdfs = no

    # user Administrator workaround, without it you are unable to set privileges
    username map = /etc/samba/user.map

    # For ACL support on domain member
    vfs objects = acl_xattr
    map acl inherit = Yes
    store dos attributes = Yes

    # Share Setting Globally
    unix extensions = no
    reset on zero vc = yes
    veto files = /.bash_logout/.bash_profile/.bash_history/.bashrc/
    hide unreadable = yes

    # disable printing completely
    load printers = no
    printing = bsd
    printcap name = /dev/null
    disable spoolss = yes

В этой конфигурации требуется дополнительный файл /etc/samba/user.map, содержащий следующую строку:

!root = TESTAD\Administrator TESTAD\administrator Administrator administrator

Не забудьте правильно заполнить /etc/krb5.conf:

[libdefaults]
    default_realm = TESTAD.LAN
    dns_lookup_realm = false
    dns_lookup_kdc = true

Будьте осторожны, krb5.conf должен принадлежать пользователю root и быть доступным для чтения всем (644 права).

Отредактируйте /etc/nsswitch.conf и добавьте winbind в строки passwd и group:

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat files winbind
group:          compat files winbind
shadow:         compat files 

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

Теперь присоединяйтесь к домену:

# net ads join -U Administrator
Using short domain name -- TESTAD
Joined 'DEBMEMBER' to dns domain 'TESTAD.example.com'

Наконец запускаем службы:

service smbd start
service nmbd start
service winbind start

getent passwd теперь должны работать с пользователями AD:

# getent passwd testuser
testuser:*:11107:10513:testuser:/home/TESTAD/testuser:/bin/bash

ПРЕДОСТЕРЕЖЕНИЕ Поскольку я ранее присоединился к AD, не установив необходимые библиотеки, мне пришлось перезагрузить систему, чтобы после этой настройки система могла правильно аутентифицировать пользователей!

4294967295 означает 2 ^ 32 - это переполнение счетчика GID или UID, созданного программой winbind deamon для перевода xid из AD. Это не имеет ничего общего с гостевым картированием ... Если вы используете idmap config YOUR_DOMAIN: backend = ad , объявление означает, что информация не только хранится локально, более того, она реплицируется во время выполнения всем клиентам, а также сохраняется на них (но где это, это моя задача в настоящее время выяснить). ad означает, что если клиент потеряется, вы сохранили всю информацию о сопоставлении uid / gid на других. Если вы восстановите свой клиент, все сопоставления снова будут такими же. Проблема в том, что если у вас есть это переполнение один раз, вы не можете легко избавиться от него, потому что все клиенты реплицируют его (запускает windbind) и, возможно (сейчас я пытаюсь это выяснить), также DC.

Вот часть, которую я использую для этого (работает нормально, но у меня есть другая проблема с idmaps через рекламу):

winbind nss info = rfc2307
idmap config * : backend = tbd
idmap config * : range = 1000-2999

idmap config MY_DOMAIN : backend =  ad
idmap config MY_DOMAIN : schema_mode = rfc2307
idmap config MY_DOMAIN : range = 3000-30000
idmap_ldb:use rfc2307 = yes

winbind refresh tickets = yes
winbind use default domain = yes
winbind enum users  = yes
winbind enum groups = yes

winbind cache time = 60  #higher might make you wait long for updates 

Сам приземлившись здесь, в поисках хороших инструкций, подумал, что мне стоит добавить обновление в этот пост ...

В дальнейшем мы стремимся использовать sssd вместо того winbind для интеграции Active Directory в Linux. Хотя sssd не предлагает все возможности winbind, он использует аутентификацию Kerberos вместо аутентификации NT Lan Manager (NTLM). Ссылка: Руководство по интеграции Red Hat с Windows, глава 4.2

Мы стараемся сократить использование NTLM-аутентификации в пользу Kerberos, поскольку последний считается более безопасным протоколом.

С учетом сказанного, мы настроили наш файловый ресурс SAMBA следующим образом: -

  1. Установить realmd, samba, sssd и все зависимости. Может больше?
  2. Присоединиться к сфере: realm join <domain name>

    Эта команда будет использовать учетные данные домена для присоединения машины к домену. Затем это автоматически настроит nsswitch.conf, /etc/sssd/sssd.conf и /etc/krb5.conf, а также получить машинную клавиатуру, в /etc/krb5.keytab.

  3. Убедитесь, что файловая система смонтирована с acl вариант в /etc/fstab, например

    UUID=foo-bar-baz /mnt/share ext4 defaults,acl 0 0

  4. Настроить самбу правильно. Вариантов так много, что это немного мрачное искусство. YMMV, но у меня работает следующее. Что-нибудь внутри < и > необходимо настроить для вашей собственной сети.

#/etc/samba/smb.conf
[global]
    # SMB settings
    security = ads
    workgroup = <workgroup>
    netbios name = <server name>
    server string = Samba %v on %L (%h)

    # NMB settings
    local master = no
    dns proxy = no

    # Authentication / Kerberos settings
    realm = <realm / domain name>
    password server = *
    kerberos method = secrets and keytab
    dedicated keytab file = /etc/krb5.keytab
    encrypt passwords = yes
    client use spnego = yes
    client signing = yes

    # ID mapping
    idmap config * : backend = autorid
    idmap config * : range = 1000000-1999999

    # Windows Extended ACLs
    vfs objects = acl_xattr
    map acl inherit = yes
    nt acl support = yes
    # This next one apparently incurs a significant performance hit without
    # additional functionality, but can help compatibility.
    # It adds the DOS Read-only, Archive and Hidden bits to file attributes.
    # store dos attributes = yes

[share]
    comment = <My Share>
    path = </mnt/share>
    valid users = @"<Domain Group>", <domain_user>
    # ... Other share-specific options

  1. Установите пользователя или группу домена в качестве группы для файлового объекта Unix. Удалить доступ всем.
> chown root:"Domain Users" /mnt/share
> chmod 770 /mnt/share
  1. Теперь, надеюсь, вы сможете получить доступ к общему файловому ресурсу с подключенного к домену ПК с Windows и установить для него разрешения с помощью свойств папки Windows.

Если каким-то образом вы заблокировали себя из общего ресурса (как это сделал я сам), разрешения Windows можно просмотреть и изменить с помощью следующих команд Linux: -

# get ACL permissions
> getfacl /mnt/share
# Set This Folder Only access on a share.
> setfacl -m group:"<domain>\<group>":rwx /mnt/share
# Set This Folder, Subdirectories and Files permissions on a folder
> set facl -m default:group:"<domain>\<group>":rwx /mnt/share

У меня была ошибка «client_input_channel_req: канал 0 rtype exit-status reply 0» на новом server02, на server01 нет. В моем случае решением было добавить две строки, которые по ошибке я не добавил в /etc/samba/smb.conf:

шаблон оболочки = / bin / bash

домашний каталог шаблона = / home /% D /% u

Теперь пользователи домена авторизованы на server02.

Наилучшие пожелания.