Хотя я могу найти проблемы с разрешениями для Samba, используя локальных пользователей Linux здесь и через поиск Google, я не могу найти решение моей конкретной проблемы. У меня нет опыта работы с Samba, так что весь этот процесс был настоящим приключением, но теперь я выдергиваю волосы. Я очень признателен за некоторые идеи. Я включаю все, что делал, на случай, если это понадобится другим, и, надеюсь, помочь кому-то мне помочь.
У меня единственный домен Windows Server 2016 Active Directory. Корневое имя - 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 поддерживает расширенные ACL, но я на всякий случай проверил. Там написано, что он есть.
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.
РЕДАКТИРОВАТЬ: Если вы используете две обратные косые черты в комментариях, они заменяются на одну обратную косую черту. Это выглядело так, как будто вы сделали одну обратную косую черту перед именем сервера.