Файловый сервер Samba в AD на Debian 11

Краткое руководство по установке и первоначальной настройке файлового сервера Samba с интеграцией с контроллером домена Active Directory на ОС Debian GNU/Linux 11.6.

В первую очередь необходимо указать FDQN в файле /etc/hostname

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# hostnamectl set-hostname fileserver.homenet.local
# hostnamectl set-hostname fileserver.homenet.local
# hostnamectl set-hostname fileserver.homenet.local

и поправить строчку в файле /etc/hosts:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
127.0.1.1 fileserver.homenet.local fileserver
127.0.1.1 fileserver.homenet.local fileserver
127.0.1.1	fileserver.homenet.local fileserver

Проверим командой:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# hostnamectl status
# hostnamectl status
# hostnamectl status

После этого устанавливаем службу ntp для синхронизации времени с контроллером домена

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# apt install ntp ntpdate
# apt install ntp ntpdate
# apt install ntp ntpdate

Служба запустится автоматически после установки.

Затем открываем файл /etc/ntp.conf и перед списком pool указываем сервер контроллера домена:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
server dc1.homenet.local
server dc1.homenet.local
server dc1.homenet.local

Перезапускаем службу ntp

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# systemctl restart ntp
# systemctl restart ntp
# systemctl restart ntp

и сверяем дату и время

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# date
# date
# date

Переходим к настройке Kerberos. Устанавливаем пакет krb5-user

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# apt install krb5-user
# apt install krb5-user
# apt install krb5-user

открываем файл /etc/krb5.conf и приводим его к следующему виду:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = HOMENET.LOCAL
dns_lookup_kdc = false
dns_lookup_realm = false
forwardable = true
ticket_lifetime = 24h
[realms]
HOMENET.LOCAL = {
kdc = dc1.homenet.local
default_domain = HOMENET.LOCAL
admin_server = dc1.homenet.local
}
[domain_realm]
.homenet.local = HOMENET.LOCAL
homenet.local = HOMENET.LOCAL
[logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] default_realm = HOMENET.LOCAL dns_lookup_kdc = false dns_lookup_realm = false forwardable = true ticket_lifetime = 24h [realms] HOMENET.LOCAL = { kdc = dc1.homenet.local default_domain = HOMENET.LOCAL admin_server = dc1.homenet.local } [domain_realm] .homenet.local = HOMENET.LOCAL homenet.local = HOMENET.LOCAL
[logging]
	default = FILE:/var/log/krb5libs.log
	kdc = FILE:/var/log/krb5kdc.log
	admin_server = FILE:/var/log/kadmind.log

[libdefaults]
	default_realm = HOMENET.LOCAL
	dns_lookup_kdc = false
	dns_lookup_realm = false
	forwardable = true
	ticket_lifetime = 24h

[realms]
	HOMENET.LOCAL = {
		kdc = dc1.homenet.local
		default_domain = HOMENET.LOCAL
		admin_server = dc1.homenet.local
	}

[domain_realm]
	.homenet.local = HOMENET.LOCAL
	homenet.local = HOMENET.LOCAL

Проверяем работу kerberos

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# kinit administrator@HOMENET.LOCAL
# kinit administrator@HOMENET.LOCAL
# kinit administrator@HOMENET.LOCAL

потребуется ввести пароль

здесь administrator — учётная запись с правами администратора контроллера домена

Проверяем:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# klist
# klist
# klist

консоль должна показать примерно такое:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@HOMENET.LOCAL
Valid starting Expires Service principal
10.02.2023 00:27:51 10.02.2023 10:27:51 krbtgt/HOMENET.LOCAL@HOMENET.LOCAL
renew until 11.02.2023 00:27:45
Ticket cache: FILE:/tmp/krb5cc_0 Default principal: administrator@HOMENET.LOCAL Valid starting Expires Service principal 10.02.2023 00:27:51 10.02.2023 10:27:51 krbtgt/HOMENET.LOCAL@HOMENET.LOCAL renew until 11.02.2023 00:27:45
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@HOMENET.LOCAL

Valid starting       Expires              Service principal
10.02.2023 00:27:51  10.02.2023 10:27:51  krbtgt/HOMENET.LOCAL@HOMENET.LOCAL
	renew until 11.02.2023 00:27:45

Значит всё сработало. Теперь удаляем полученный тикет

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# kdestroy
# kdestroy
# kdestroy

Далее устанавливаем Samba и winbind и входим в домен

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# apt install samba cifs-utils winbind libnss-winbind libpam-winbind
# apt install samba cifs-utils winbind libnss-winbind libpam-winbind
# apt install samba cifs-utils winbind libnss-winbind libpam-winbind

открываем файл конфигурации samba

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# nano /etc/samba/smb.conf
# nano /etc/samba/smb.conf
# nano /etc/samba/smb.conf

и приводим его к следующему виду:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
[global]
realm = HOMENET.LOCAL
workgroup = HOMENET
security = ads
encrypt passwords = yes
netbios name = fileserver
server string = %h, Samba server %v
domain master = no
local master = no
preferred master = no
os level = 0
domain logons = no
dns proxy = no
socket options = TCP_NODELAY
unix charset = UTF-8
dos charset = 866
idmap config * : backend = tdb
idmap config * : range = 3000-7999
idmap config HOMENET : backend = rid
idmap config HOMENET : range = 10000-999999
winbind enum users = yes
winbind enum groups = yes
winbind refresh tickets = yes
winbind use default domain = yes
winbind offline logon = yes
winbind cache time = 300
template homedir = /srv/share/users/%D/%U
template shell = /bin/bash
load printers = no
show add printer wizard = no
printcap name = /dev/null
disable spoolss = yes
log level = 0 vfs:1
[global] realm = HOMENET.LOCAL workgroup = HOMENET security = ads encrypt passwords = yes netbios name = fileserver server string = %h, Samba server %v domain master = no local master = no preferred master = no os level = 0 domain logons = no dns proxy = no socket options = TCP_NODELAY unix charset = UTF-8 dos charset = 866 idmap config * : backend = tdb idmap config * : range = 3000-7999 idmap config HOMENET : backend = rid idmap config HOMENET : range = 10000-999999 winbind enum users = yes winbind enum groups = yes winbind refresh tickets = yes winbind use default domain = yes winbind offline logon = yes winbind cache time = 300 template homedir = /srv/share/users/%D/%U template shell = /bin/bash load printers = no show add printer wizard = no printcap name = /dev/null disable spoolss = yes log level = 0 vfs:1
[global]
        realm = HOMENET.LOCAL
        workgroup = HOMENET

        security = ads
        encrypt passwords = yes

        netbios name = fileserver
        server string = %h, Samba server %v

        domain master = no
        local master = no
        preferred master = no
        os level = 0
        domain logons = no

        dns proxy = no

        socket options = TCP_NODELAY

        unix charset = UTF-8
        dos charset = 866

        idmap config * :              backend = tdb
        idmap config * :              range   = 3000-7999
        idmap config HOMENET : backend = rid
        idmap config HOMENET : range   = 10000-999999

        winbind enum users = yes
        winbind enum groups = yes
        winbind refresh tickets = yes
        winbind use default domain = yes
        winbind offline logon = yes
        winbind cache time = 300
        template homedir = /srv/share/users/%D/%U
        template shell = /bin/bash

        load printers = no
        show add printer wizard = no
        printcap name = /dev/null
        disable spoolss = yes

        log level = 0 vfs:1

Затем увеличиваем лимит одновременно открытых файлов до 16384. Для этого открываем /etc/security/limits.conf и в самом конце допишем такие строки:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
* - nofile 16384
root - nofile 16384
* - nofile 16384 root - nofile 16384
*               -       nofile          16384
root            -       nofile          16384

Проверяем конфигурацию Самбы утилитой testparm

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# testparm
# testparm
# testparm

в консоли получим ответ:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Server role: ROLE_DOMAIN_MEMBER
Press enter to see a dump of your service definitions
Load smb config files from /etc/samba/smb.conf Loaded services file OK. Server role: ROLE_DOMAIN_MEMBER Press enter to see a dump of your service definitions
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Server role: ROLE_DOMAIN_MEMBER

Press enter to see a dump of your service definitions

жмём Enter и консоль покажет такую выгрузку:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# Global parameters
[global]
disable spoolss = Yes
dns proxy = No
domain master = No
dos charset = 866
load printers = No
local master = No
os level = 0
preferred master = No
printcap name = /dev/null
realm = HOMENET.LOCAL
security = ADS
server string = %h server
show add printer wizard = No
template homedir = /srv/share/users/%D/%U
template shell = /bin/bash
winbind enum groups = Yes
winbind enum users = Yes
winbind offline logon = Yes
winbind refresh tickets = Yes
winbind use default domain = Yes
workgroup = HOMENET
idmap config homenet : range = 10000-999999
idmap config homenet : backend = rid
idmap config * : range = 3000-7999
idmap config * : backend = tdb
# Global parameters [global] disable spoolss = Yes dns proxy = No domain master = No dos charset = 866 load printers = No local master = No os level = 0 preferred master = No printcap name = /dev/null realm = HOMENET.LOCAL security = ADS server string = %h server show add printer wizard = No template homedir = /srv/share/users/%D/%U template shell = /bin/bash winbind enum groups = Yes winbind enum users = Yes winbind offline logon = Yes winbind refresh tickets = Yes winbind use default domain = Yes workgroup = HOMENET idmap config homenet : range = 10000-999999 idmap config homenet : backend = rid idmap config * : range = 3000-7999 idmap config * : backend = tdb
# Global parameters
[global]
	disable spoolss = Yes
	dns proxy = No
	domain master = No
	dos charset = 866
	load printers = No
	local master = No
	os level = 0
	preferred master = No
	printcap name = /dev/null
	realm = HOMENET.LOCAL
	security = ADS
	server string = %h server
	show add printer wizard = No
        template homedir = /srv/share/users/%D/%U
	template shell = /bin/bash
	winbind enum groups = Yes
	winbind enum users = Yes
	winbind offline logon = Yes
	winbind refresh tickets = Yes
	winbind use default domain = Yes
	workgroup = HOMENET
	idmap config homenet :	range = 10000-999999
	idmap config homenet :	backend = rid
	idmap config * :	range = 3000-7999
	idmap config * : backend = tdb

После этого не помешает перезагрузить машину

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# shutdown -r now
# shutdown -r now
# shutdown -r now

Теперь подключим Самбу к домену

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# net ads join -U administrator@homenet.local
# net ads join -U administrator@homenet.local
# net ads join -U administrator@homenet.local

вводим пароль и консоль покажет такой результат:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Using short domain name -- HOMENET
Joined 'FILESERVER' to dns domain 'homenet.local'
Using short domain name -- HOMENET Joined 'FILESERVER' to dns domain 'homenet.local'
Using short domain name -- HOMENET
Joined 'FILESERVER' to dns domain 'homenet.local'

Это значит, что в DNS контроллера домена homenet.local добавлена A-запись fileserver.

Для того, чтобы мы могли видеть и пользоваться учётными записями и группами домена, настроим службу winbind. Для этого открываем файл /etc/nsswitch.conf и изменим параметры passwd и group:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
passwd: files winbind
group: files winbind
passwd: files winbind group: files winbind
passwd:         files winbind
group:          files winbind

Перезапускаем службу winbind

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# systemctl restart winbind
# systemctl restart winbind
# systemctl restart winbind

Теперь нам необходимо проверить доверительные отношения с контроллером домена

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# wbinfo -t
# wbinfo -t
# wbinfo -t

консоль должна вывести такую строчку:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
checking the trust secret for domain HOMENET via RPC calls succeeded
checking the trust secret for domain HOMENET via RPC calls succeeded
checking the trust secret for domain HOMENET via RPC calls succeeded

Это значит, что Active Directory доверяет Самбе.

После этого мы можем увидеть список пользователей домена

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# wbinfo -u
# wbinfo -u
# wbinfo -u

а также групп

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# wbinfo -g
# wbinfo -g
# wbinfo -g

Если консоль всё это выводит, значит всё настроено правильно. Если нет, то перезагрузим машину

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# shutdown -r now
# shutdown -r now
# shutdown -r now

и повторим эти команды, должно будет работать.

Далее можно начинать открывать ресурсы для пользователей. Для этого создадим директорию /srv/share/

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# mkdir /srv/share/
# mkdir /srv/share/
# mkdir /srv/share/

назначим ей владельца — группу sambashare и дадим полные права

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# chown :sambashare /srv/share/
# chmod 777 /srv/share/
# chown :sambashare /srv/share/ # chmod 777 /srv/share/
# chown :sambashare /srv/share/
# chmod 777 /srv/share/

в этой директории создадим директорию test

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# mkdir /srv/share/test/
# mkdir /srv/share/test/
# mkdir /srv/share/test/

и зададим владельца уже пользователя домена vasya_petrov

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# chown vasya_petrov /srv/share/test/
# chmod 777 /srv/share/test/
# chown vasya_petrov /srv/share/test/ # chmod 777 /srv/share/test/
# chown vasya_petrov /srv/share/test/
# chmod 777 /srv/share/test/

снова откроем файл /etc/samba/smb.conf и пропишем эту директорию в шарах:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
[Test Folder]
writeable = yes
read list = @sales fedya_ivanov
valid users = vasya_petrov @buh "@Администраторы домена"
path = /srv/share/test
[Test Folder] writeable = yes read list = @sales fedya_ivanov valid users = vasya_petrov @buh "@Администраторы домена" path = /srv/share/test
[Test Folder]
	writeable = yes
	read list = @sales fedya_ivanov
	valid users = vasya_petrov @buh "@Администраторы домена"
	path = /srv/share/test

и перезапускаем службы самбы

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# systemctl restart smbd
# systemctl restart nmbd
# systemctl restart smbd # systemctl restart nmbd
# systemctl restart smbd
# systemctl restart nmbd

Теперь на другой машине в домене homenet.local открываем

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
\\fileserver\
\\fileserver\
\\fileserver\ 

и увидим шару Test Folder

Здесь получается, что у группы sales и пользователя fedya_ivanov права только на чтение, а у пользователя vasya_petrov и групп buh и Администраторы домена — права на чтение и запись.

Файловый сервер Samba в AD на Debian 11: 3 комментария

  1. Отличная статья!
    Кратко и по делу. Завелось все с первого разу.
    Добавил себе в закладки.
    Спасибо.

  2. Присоединюсь к предыдущему оратору — статья ОГОНЬ!
    Правда у меня возникла проблема. На первом Debian’е завелось сразу, а вот на втором почему-то в DC не удалось DNS самбы прописать. Выдает ошибку:
    root@deb:/etc# net ads join -U admin@homenet.local
    Enter admin@homenet.local‘s password:
    Using short domain name — HOMENET
    Joined ‘DEB’ to dns domain ‘homenet.local’
    DNS Update for deb.homenet.local failed: ERROR_DNS_UPDATE_FAILED
    DNS update failed: NT_STATUS_UNSUCCESSFUL
    Пришлось руками в DC прописывать DNS. Где копать?

  3. это ерундовая ошибка, такое периодически бывает, когда несколько контроллеров домена: один глюкнул, можно прописать в /etc/krb5.conf другой контроллер, например dc2.homenet.local или dc3.homenet.local или dcn.homenet.local — в зависимости от того, как они у вас нумеруются. там то и весь смысл этой ошибки, что он просто не смог прописаться в dns.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *