Хотя я могу найти проблемы с разрешениями для 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.
РЕДАКТИРОВАТЬ: если вы используете две обратные косые черты в комментариях, они снова заменяются на одну обратную косую черту. Это выглядело так, как будто вы сделали одну обратную косую черту перед именем сервера.