Страница 1 из 1

Файловый ресурс на Debian/SAMBA с доменной авторизацией

Добавлено: 16 ноя 2017, 01:48
xor
Файловый ресурс на Debian/SAMBA с доменной авторизацией
Порой есть необходимость организовать файловый доступ в домене, но нет желания выделять под это целый Windows сервер. Есть вариант развернуть Linux систему, включить ее в домен, она может быть и виртуальной и физической, диски при этом лучше функционально разделить на системный и диск для хранения данных.
Например имеем такую систему:
2core CPU
2Gb RAM
50Gb HDD  (системный, загрузочный)
1000Gb HDD  (для раздела под СХД)

Так же есть пара доменов, соединенных доверием: MAINDOM.ORG и TRUSTDOM.ORG
их доменные контроллеры: dc1.maindom.org, dc2.maindom.org, ads1.trustdom.org, ads2.trustdom.org

Начало
Устанавливается с нуля дистрибутив, файловую систему распределяйте на свой вкус, разве что HDD под данные стоит смонтировать обособленно, например в /srv/STORAGE1, но и это тоже опционально, по личным предпочтениям.
Далее необходимо облагородить свежую систему необходимыми пакетами:
apt-get install mc htop iftop net-tools samba winbind krb5-user krb5-config libpam-krb5 winbind libnss-winbind attr acl ntpdate

Теперь надо настроить синхронизацию времени с корпоративным ntp или доменным контроллером.
nano /etc/cron.daily/ntpdate

Код: Выделить всё

#! /bin/bash

ntpdate -s ntp.maindom.org
hwclock -w
chmod +x /etc/cron.daily/ntpdate
/etc/cron.daily/ntpdate

Настройка Kerberos
Необходимо сконфигурировать параметры подключения через Kerberos. Здесь и далее в конфигах будут приведены опции, которые обязательно добавить/заменить, и если в ваших дефолтных конфигах есть что-то еще, это вполне можно и оставить, а можно и удалить, на ваше усмотрение.
nano /etc/krb5.conf

Код: Выделить всё

[libdefaults]
	default_realm = MAINDOM.ORG
	dns_lookup_kdc = no     # Если хотите взаимодействовать с доверенными доменами, ставьте yes
	dns_lookup_realm = no   # Если хотите взаимодействовать с доверенными доменами, ставьте yes
	ticket_lifetime = 24h
	default_tgs_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
	default_tkt_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
	permitted_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5

# The following krb5.conf variables are only for MIT Kerberos.
	kdc_timesync = 1
	ccache_type = 4
	forwardable = true
	proxiable = true

# The following libdefaults parameters are only for Heimdal Kerberos.
	v4_instance_resolve = false
	v4_name_convert = {
		host = {
			rcmd = host
			ftp = ftp
		}
		plain = {
			something = something-else
		}
	}
	fcc-mit-ticketflags = true

[realms]
	MAINDOM.ORG = {
		kdc = dc1.maindom.org
		kdc = dc2.maindom.org
		admin_server = dc1.maindom.org
		admin_server = dc2.maindom.org
		default_domain = maindom.org
	}

[domain_realm]
	.maindom.org = MAINDOM.ORG
	maindom.org = MAINDOM.ORG
	.dc1.maindom.org = MAINDOM.ORG
	.dc2.maindom.org = MAINDOM.ORG

[login]
	krb4_convert = true
	krb4_get_tickets = false

[logging]
default = FILE:/var/log/kerberos/krb5libs.log
kdc = FILE:/var/log/kerberos/krb5kdc.log
admin_server = FILE:/var/log/kerberos/kadmind.log
Создаем файлики логов
mkdir -p /var/log/kerberos
touch /var/log/kerberos/krb5libs.log
touch /var/log/kerberos/krb5kdc.log
touch /var/log/kerberos/kadmind.log
chmod 666 /var/log/kerberos/*

Запросим тикет у домена (administrator - учетная запись доменного администратора):
kinit administrator
И проверим что получили:
klist

Настройка SAMBA
Сперва поправим nsswitch
nano /etc/nsswitch.conf

Код: Выделить всё

passwd:         compat winbind
group:          compat winbind
shadow:         compat winbind

hosts:          files dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis
Теперь правим конфиг самбы.
nano /etc/samba/smb.conf

Код: Выделить всё

#======================= Global Settings =======================

[global]
## Browsing/Identification ###
   workgroup = MAINDOM
   netbios name = fs1
   security = ADS
   realm = MAINDOM.ORG
   server string = %h server
   wins support = no
   dns proxy = no
#### Networking ####
   socket options = TCP_NODELAY SO_KEEPALIVE IPTOS_LOWDELAY
#### Debugging/Accounting ####
   log file = /var/log/samba/log.%m
   max log size = 1000
   log level = 1
   panic action = /usr/share/samba/panic-action %d
####### Authentication #######
   encrypt passwords = true
   client signing = yes
   client use spnego = yes
   client ntlmv2 auth = yes
   server role = auto
   passdb backend = tdbsam
   obey pam restrictions = no
   unix password sync = no
   passwd program = /usr/bin/passwd %u
   passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
   pam password change = yes
   map to guest = bad user
   guest account = nobody
########## Domains ###########
   domain logons = no
   preferred master = no
   local master = no
   domain master = auto
############ Misc ############
   allow trusted domains = yes
   winbind use default domain = no
   winbind enum users  = yes
   winbind enum groups = yes
   winbind refresh tickets = yes
   winbind sealed pipes = false
   idmap config *:backend = tdb
   idmap config *:range = 1000000-1999999
   idmap config *:base_rid = 0
   idmap config MAINDOM:backend = rid
   idmap config MAINDOM:range = 10000-999999
   idmap config MAINDOM:base_rid = 0
   idmap config TRUSTDOM:backend = rid
   idmap config TRUSTDOM:range = 2000000-2999999
   idmap config TRUSTDOM:base_rid = 0
   template homedir = /home/%D/%U
   template shell = /bin/bash
   dos filetime resolution = no
   store dos attributes = yes
   inherit acls = yes
   map acl inherit = yes
   force unknown acl user = yes
   acl allow execute always = yes
   vfs objects = acl_xattr
   mangled names = yes
   create mask = 0777
   directory mask = 0777
   oplocks = yes
   locking = yes
   use sendfile = yes
   aio read size = 16384
   aio write size = 16384
   case sensitive = auto
   host msdfs = no
   smb2 leases = yes
   durable handles = yes
   kernel share modes = no
   posix locking = no
   time server = no
   map archive = no
   map system = no
   map hidden = no
   map read only = no
   usershare allow guests = no
   load printers = no
   show add printer wizard = no
   disable spoolss = yes
   printing = bsd
   printcap name = /dev/null
   unix extensions = no
   wide links = yes
Пока так. Теперь рестарт самбы и включение в домен.
/etc/init.d/samba restart рестарт самбы после конфига
net ads info инфо о домене
net ads join -U Administrator подключение к домену
/etc/init.d/winbind restart рестарт винбинда после подключения к домену
getent passwd смотрим аккаунты из домена
wbinfo -u пользователи домена
wbinfo -g группы домена

Теперь прописываем в самбе общий сетевой ресурс.
nano /etc/samba/smb.conf

Код: Выделить всё

#======================= Share Definitions =======================
[FILESTORE]
comment = Domain file storage
path = /srv/STORAGE1/FILESTORE
browsable = yes
oplocks = yes
public = yes
invalid users = "guest"
read list = 
write list = "root",@"MAINDOM\Domain Admins",@"TRUSTDOM\dom_group1","MAINDOM\misterX","TRUSTDOM\usr1"
valid users = "root",@"MAINDOM\Domain Admins",@"TRUSTDOM\dom_group1","MAINDOM\misterX","TRUSTDOM\usr1"
inherit permissions = yes
smb encrypt = disabled
mangled names = yes
#admin users = 
#admin only = 
strict allocate = yes
#streams_depot:check_valid = yes
#shadow:snapdir = /share/CACHEDEV1_DATA/_.share/BACKUPS/.snapshot
#shadow:basedir = /share/CACHEDEV1_DATA/BACKUPS
#shadow:sort = desc
#shadow:format = @GMT-%Y.%m.%d-%H:%M:%S
mkdir -p /srv/STORAGE1/FILESTORE создадим каталог (-p создать весь путь, если он не существует)
chmod 0770 /srv/STORAGE1/FILESTORE права доступа к каталогу
chown root:"MAINDOM\Domain Admins" /srv/STORAGE1/FILESTORE ставим владельца

smbcontrol all reload-config релоад конфига самбы без рестарта
net rpc rights grant "MAINDOM\domain admins" SeDiskOperatorPrivilege -U Administrator даем привелегии на изменение NTFS разрешений для DomainAdmins
net rpc rights list privileges SeDiskOperatorPrivilege -U Administrator смотрим то, что дали ранее

Теперь после всех этих манипуляций должен стать доступен расшаренный ресурс по адресу \\fs1.maindom.org\FILESTORE. На него можно назначать привелегии для доступа, используя NTFS Security функционал в Windows, все назначенные ACL будут сохраняться в атрибутах файловой системы в Linux сервере.

Некоторые полезные команды
smbstatus просмотр подключенных к SMB ресурсам пользователей.
getfacl /srv/STORAGE1/FILESTORE смотрим acl атрибуты файла/каталога
setfacl -bd /srv/STORAGE1/FILESTORE если в списке разрешений NTFS присутствуют косячные sid, этой командой можно очистить список выданных ACL
getfacl /srv/STORAGE1/FILESTORE/ снова смотрим чего получилось
net ads leave -U Administrator вывод самбы из домена