Файловый ресурс на Debian/SAMBA с доменной авторизацией
Добавлено: 16 ноя 2017, 01:48
Файловый ресурс на 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
chmod +x /etc/cron.daily/ntpdate
/etc/cron.daily/ntpdate
Настройка Kerberos
Необходимо сконфигурировать параметры подключения через Kerberos. Здесь и далее в конфигах будут приведены опции, которые обязательно добавить/заменить, и если в ваших дефолтных конфигах есть что-то еще, это вполне можно и оставить, а можно и удалить, на ваше усмотрение.
nano /etc/krb5.conf
Создаем файлики логов
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
Теперь правим конфиг самбы.
nano /etc/samba/smb.conf
Пока так. Теперь рестарт самбы и включение в домен.
/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
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 вывод самбы из домена
Порой есть необходимость организовать файловый доступ в домене, но нет желания выделять под это целый 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
/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
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 вывод самбы из домена