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

Не удается подключиться к общему ресурсу Samba, присоединенному к AD на RHEL 7.3 из Windows

Хотя я могу найти проблемы с разрешениями для Samba, используя локальных пользователей Linux здесь и в поиске Google, я не могу найти решение моей конкретной проблемы. У меня нет опыта работы с Samba, так что весь этот процесс был настоящим приключением, но теперь я выдергиваю волосы. Я очень признателен за некоторые идеи. Я включаю все, что делал, на случай, если это понадобится другим, и надеюсь помочь кому-то мне.

У меня один домен Active Directory Windows Server 2016. Корневое имя - ad.company.com. Мне нужен коммерчески поддерживаемый сервер Linux с общим ресурсом SMB, который разрешает доступ для чтения к одним группам домена и доступ на запись к другим. Почему Linux? Он будет разговаривать с другими машинами Linux и будет использовать многие инструменты Linux. Наша текущая установка на другом клиенте хорошо работает таким образом, но она не была настроена нами и использует RHEL 5.

Я выбрал сервер RHEL 7.3, так как наша компания больше всего знакома с этим дистрибутивом. Я установил минимальную установку с ISO сервера. Хэш для ISO показывает, что он не поврежден. Я успешно смонтировал раздел ext4 в / mnt / share. Я настроил сервер так, чтобы имя хоста было в пространстве имен корневого домена, установил DNS-сервер на PDC, установил суффикс поиска как домен (ad.company.com) и установил его со статическим IP-адресом. Все это было сделано в установщике. Машина может легко разрешить имена хостов серверов Windows в домене. Серверы Windows могут разрешить имя хоста компьютера Linux. IP-адреса можно пинговать в обоих направлениях.

Поскольку это начальная конфигурация, все ниже было сделано под root.

Я установил следующие пакеты.

yum install nano
yum install net-tools
yum install nmap
yum install ntp ntpdate ntp-doc
yum install krb5-workstation
yum install samba
yum install samba-winbind
yum install samba-winbind-clients

Я установил сервер NTP как PDC. /etc/ntp.conf

driftfile /var/lib/ntp/drift

restrict default nomodify notrap nopeer noquery

restrict 127.0.0.1 
restrict ::1

server pdc.ad.company.com iburst prefer
restrict pdc.ad.company.com mask 255.255.255.255 nomodify notrap nopeer noquery

includefile /etc/ntp/crypto/pw

keys /etc/ntp/keys

disable monitor

Я настроил клиент KRB5 для подключения к домену AD. /etc/krb5.conf

includedir /etc/krb5.conf.d/

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 ticket_lifetime = 600
 default_realm = AD.COMPANY.COM
 default_tkt_enctypes = rc4-hmac 
 default_tgs_enctypes = rc4-hmac 
 dns_lookup_realm = false
 dns_lookup_kdc = true

[realms]
 AD.COMPANY.COM = {
  kdc = pdc.ad.company.com
  admin_server = pdc.ad.company.com
 }

[domain_realm]
 .ad.company.com = AD.COMPANY.COM
 ad.company.com = AD.COMPANY.COM

Протестировал подключение к PDC. Это было успешно.

kinit admin@AD.COMPANY.COM

Я настроил samba для подключения к домену, использовал расширенные атрибуты ACL и сделал доступным общий ресурс под названием «share». /etc/samba/smb.conf

[global]
    security = ADS
    workgroup = AD
    realm = AD.COMPANY.COM
    idmap config * : backend = tbd
    idmap config * :range = 3000-7999
    vfs objects = acl_xattr
    map acl inherit = yes
    store dos attributes = yes

    passdb backend = tdbsam

    printing = cups
    printcap name = cups
    load printers = yes
    cups options = raw
    log level = 1

[share]
    path = /mnt/share
    read only = no

[homes]
    comment = Home Directories
    valid users = %S, %D%w%S
    browseable = No
    read only = No
    inherit acls = Yes

[printers]
    comment = All Printers
    path = /var/tmp
    printable = Yes
    create mask = 0600
    browseable = No

[print$]
    comment = Printer Drivers
    path = /var/lib/samba/drivers
    write list = root
    create mask = 0664
    directory mask = 0775

Я настроил nsswitch на использование winbind.
/etc/nsswitch.conf

passwd:     files winbind
shadow:     files sss
group:      files winbind

hosts:      files dns myhostname

bootparams: nisplus [NOTFOUND=return] files

ethers:     files
netmasks:   files
networks:   files
protocols:  files
rpc:        files
services:   files sss

netgroup:   files sss

publickey:  nisplus

automount:  files
aliases:    files nisplus

Я запустил windbindd, smbd и nmbd.

winbindd
smbd
nmbd

Я настроил их на запуск при загрузке.

systemctl enable smb nmb winbind

Я перезагрузился, затем протестировал windbind, чтобы проверить соединение с доменом. Это удалось.

wbinfo --ping-dc

В одном из прочитанных мною документов сказано, что ext4 поддерживает расширенные списки контроля доступа, но я на всякий случай проверил. Он говорит, что он есть.

smbd -b | grep HAVE_LIBACL

Я предоставил разрешение на предоставление привилегии AD.COMPANY.COM\Domain Admins.

net rpc rights grant "AD\Domain Admins" SeDiskOperatorPrivilege -U "AD\administrator"

Затем я протестировал, чтобы убедиться, что он застрял.

net rpc rights list privileges SeDiskOperatorPrivilege -U "AD\administrator"

Я использовал testparm для проверки синтаксиса файла smb.conf. Он проанализировал весь файл без ошибок.

testparm /etc/samba/smb.conf

Следующее, что нужно сделать, - это подключиться к общему ресурсу в качестве администратора домена и настроить ACL. Вот где я наткнулся на загвоздку. И в Windows Server 2016, и в Windows 10 я не могу подключиться к серверу через проводник. я пытался \\linuxserver, \\linuxserver\share, \\192.168.1.75, и \\192.168.1.75\share. Во всех случаях Windows сообщает мне: «Сетевой путь не найден». Он не запрашивает у меня учетные данные и не сообщает, что у меня нет разрешений. Как будто он вообще этого не видит.

Вот что я сделал до сих пор для устранения неполадок. Я могу успешно пропинговать сервер Linux по имени хоста и IP. Я убедился, что smbd, nmbd и windbindd работают.

ps -eo 'tty,pid,comm' | grep smbd
ps -eo 'tty,pid,comm' | grep nmbd
ps -eo 'tty,pid,comm' | grep winbindd

Я убедился, что smbd прослушивает порт 445.

netstat -plnt
nmap -sT -O localhost

Я отключил SMB2 и SMB3 через сеанс администратора Powershell на компьютере с Windows, чтобы посмотреть, могу ли я использовать SMB1.

Set-SmbServerConfiguration -EnableSMB2Protocol $false

Я проверил, что параметр застрял, перезагрузился, а затем попытался с тем же результатом.

Get-SmbServerConfiguration | Select EnableSMB1Protocol, EnableSMB2Protocol

Я перезагрузил сервер Linux для хорошей меры.

Ух! Спасибо, что прочитали все!

Ты действительно сделал \linuxserver\share вместо того \\linuxserver\share ? В Redhat 7.x вы можете запустить realm join и это обрабатывает почти всю настройку AD.

РЕДАКТИРОВАТЬ: если вы используете две обратные косые черты в комментариях, они снова заменяются на одну обратную косую черту. Это выглядело так, как будто вы сделали одну обратную косую черту перед именем сервера.