У меня есть 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,
мне быand
getent` незнание пользователей 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 следующим образом: -
realmd
, samba
, sssd
и все зависимости. Может больше?Присоединиться к сфере: realm join <domain name>
Эта команда будет использовать учетные данные домена для присоединения машины к домену. Затем это автоматически настроит nsswitch.conf
, /etc/sssd/sssd.conf
и /etc/krb5.conf
, а также получить машинную клавиатуру, в /etc/krb5.keytab
.
Убедитесь, что файловая система смонтирована с acl
вариант в /etc/fstab
, например
UUID=foo-bar-baz /mnt/share ext4 defaults,acl 0 0
Настроить самбу правильно. Вариантов так много, что это немного мрачное искусство. 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
> chown root:"Domain Users" /mnt/share
> chmod 770 /mnt/share
Если каким-то образом вы заблокировали себя из общего ресурса (как это сделал я сам), разрешения 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.
Наилучшие пожелания.