мультипрокси на базе debian и squid с прозрачной доменной аутентификацией / хабр

Debian windows domain

Годится не только для debian-based дистрибутивов, но, думаю, и для большинства Unix-систем, где есть samba, kerberos и winbind. Задачка несложная, ввести рабочую станцию (или сервер, неважно) в домен Active Directory и получить возможность авторизации доменных пользователей как графически, так и по ssh. Мне для успешной настройки потребовались пакеты samba, winbind, krb5-user, krb5-config, nscd. Необходимые для доменной авторизации пользователей модули PAM (например, pam_winbind) были установлены автоматически как зависимости.

Исходные данные: имеется домен

example.org

(win2k3), рабочая станция

user-test

(Debian Sid), Администратор домена

admin

, пользователь домена

user

. В качестве системного DNS используются контроллеры домена (директивы nameserver в resolv.conf или dns-nameserver в interfaces).

Необходимые правки конфигов:

smb.conf:


[global]
workgroup = EXAMPLE
netbios name = user-test
server string = test debian pc
security = ADS
preferred master = no
disable spoolss = Yes
show add printer wizard = No
idmap config * : range = 15000-20000
#winbind separator =
winbind use default domain = Yes
template shell = /bin/bash
use sendfile = Yes
realm = example.org

log file = /var/log/samba/log.full
load printers = no
printing = bsd
printcap name = /dev/null

krb5.conf:


[libdefaults]
default_realm = EXAMPLE.ORG
krb4_config = /etc/krb.conf
krb4_realms = /etc/krb.realms
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
v4_instance_resolve = false
v4_name_convert = {
host = {
rcmd = host
ftp = ftp
}
plain = {
something = something-else
}
}
fcc-mit-ticketflags = true
[realms]
EXAMPLE.ORG = {
kdc = dc1.example.org
kdc = dc2.example.org
admin_server = dc1.example.org
}
[domain_realm]
.example.org = EXAMPLE.ORG
example.org = EXAMPLE.ORG
[login]
krb4_convert = true
krb4_get_tickets = false

nsswitch.conf:
#passwd:         compat
passwd:         files winbind
#group:          compat
group:          files winbind
#shadow:         compat
shadow:         files winbind
#hosts:          files dns
hosts:          files dns winbind

pam.d/common-auth:


auth    [success=2 default=ignore]      pam_unix.so nullok_secure
auth    [success=1 default=ignore]      pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass
auth    requisite                       pam_deny.so
auth    required                        pam_permit.so

pam.d/common-password:


password        [success=2 default=ignore]      pam_unix.so obscure sha512
password        [success=1 default=ignore]      pam_winbind.so use_authtok try_first_pass
password        requisite                       pam_deny.so
password        required                        pam_permit.so

pam.d/common-account:


account [success=2 new_authtok_reqd=done default=ignore]        pam_unix.so
account [success=1 new_authtok_reqd=done default=ignore]        pam_winbind.so
account requisite                       pam_deny.so
account required                        pam_permit.so

pam.d/common-session:


session         required                pam_mkhomedir.so skel=/etc/skel umask=0022
session         sufficient              pam_unix.so
session         sufficient              pam_sufficient.so

После правки коифигов и перезапуска сервисов присоединяемся к домену, предварительно синхронизировав время с контроллером домена (net time set dc1.example.org):


net ads join -Uadmin
admin’s password:
Using short domain name — EXAMPLE 

Joined ‘USER-TEST’ to realm ‘EXAMPLE.COM’

Проверим успешность ввода с помощью wbinfo:


root@user-test:~# wbinfo -t
checking the trust secret for domain EXAMPLE via RPC calls succeeded

Команды wbinfo -u и wbinfo -g должны показать список пользователей и групп Active Directory.

Базовая настройка

1. Устанавливаем ОС, настраиваем сетевые интерфейсы:

nano /etc/network/interfaces && /etc/init.d/networking restart

2. Обновляем пакеты с помощью двух команд:

# apt-get update && apt-get upgrade

3. Поскольку вводим машину в домен, устанавливаем необходимые для этого пакеты:

Настройка samba и ввод машины в домен

1. Для входа в домен нужно правильно настроить Samba. Настройки хранятся в /etc/samba/smb.conf:

Настройка samba сервера с авторизацией через active directory в debian | блог dоктора dобрянского

Постановка задачи такая:

Есть в сети сервер, выполняющий функции файлопомойки, под управлением Linux. Помимо сервера в сети есть виндовые машины, которые должны хранить файлы на этом сервере. У каждого пользователя на сервере должна быть личная папка и одна общая для всех пользователей.

Все вроде бы просто — поставил Самбу, наделал пользователей идентичных виндовым и радуйся жизни. Так в принципе оно и было какое-то время, но захотелось перемен — решил немного автоматизировать и упростить администрирование своей файлопомойки, т.к. юзеры растут как грибы и «надо шото делать».

Исходя из этого, было решено построить такую схему:

развернуть АД и прикрутить к нему файлсервер Samba с аутентификацией через Active Directory. При этом, когда пользователь впервые подключается к серверу, автоматически создается личная папка, которая доступна как шара только конкретному пользователю.

С настройкой АД все понятно (скучно). А вот с настройкой Самбы пришлось поиграться. Как сделать это в Debian lenny я и расскажу в данной статье.

Рассчитываем что контроллер домена и ДНС у нас уже настроены.

$ sudo apt-get install samba winbindd smbclient krb5-user

Winbind — это демон, который позволяет Самбе узнавать пользователей AD и общаться с ними как с локальными.

Kerberos используется для интеграции Samba в Active DIrectory. Открываем его конфиг и подставляем свои параметры (выделил красным):

$ sudo nano /etc/krb5.conf

[logging]

default = FILE:/var/log/krb5.log

kdc = FILE:/var/log/krb5kdc.log

[libdefaults]

default_realm = DOMAIN.COM

clockskew = 500 dns_lookup_realm = false dns_lookup_kdc = true ticket_lifetime = 324000

[realms]

DOMAIN.COM = {

kdc = DC.DOMAIN.COM

admin_server = DC.DOMAIN.COM

default_domain = DOMAIN.COM

}

[domain_realm]

.domain.com = DOMAIN.COM

[login]

krb4_convert = true

krb4_get_tickets = false

Проверяем правильность настроек:

$ kinit [email protected]

domain_user — пользователь с правами входа в домен. Если все правильно — команда завершиться без вывода на экран. У меня все прошло без ошибок, но вот самые распространенные из них:

kinit: krb5_get_init_creds: Client ([email protected]) unknown

Неправильный логин или пароль пользователя domain_user.

kinit: krb5_get_init_creds: unable to reach any KDC in realm (DOMAIN.FOO)

Стоит проверить правильность конфига и настройки ДНС.

kinit: krb5_get_init_creds: Clock  skew too great

Несоответствие времени на контроллере домена и на нашем сервере. Синхронизировать время с Active Directory можно командой:

$ sudo ntpdate DC.DOMAIN.COM

Теперь настроим Самбу и Winbind. Мой работающий конфиг ниже, можно просто скопировать его подставив свои данные (выделил красным):

 [global]
 obey pam restrictions = Yes
 log file = /var/log/samba/log.%m
 log level = 1
 socket options = TCP_NODELAY SO_SNDBUF=8192 SO_RCVBUF=8192

 encrypt passwords = yes 

 idmap uid = 10000-40000
 idmap gid = 10000-40000

 auth methods = winbind
 name resolve order = hosts bcast lmhosts
 case sensitive = no
 dns proxy = no
 netbios name = SAMBA
 server string = %v samba
 password server = dc.domain.com
 # обязательно указывать имя домена в верхнем регистре
 realm = DOMAIN.COM
 client use spnego = yes
 client signing = yes
 local master = no
 domain master = no
 preferred master = no
 workgroup = DOMAIN
 debug level = 2
# ads указывает что авторизация проходит на уровне домена
 security = ads
 template homedir = /home/samba/%U
 template shell = /bin/false
 unix charset = UTF-8
 dos charset = 866
 max log size = 50
 os level = 0
 follow symlinks = yes
 winbind separator = 
 winbind uid = 10000-20000
 winbind gid = 10000-20000
 winbind enum groups = yes
 winbind enum users = yes
# этот параметр поможет в корректном соблюдении прав доступа к папкам
 winbind use default domain = yes

 [Homes]
 valid users = @"DOMAIN smbusers"
 read only = no
 browseable = no
 create mask = 0700
 directory mask = 0700
 null passwords = no 

 [Public]
 path = /home/samba/public
 comment = Public directory
 browseable = yes
 readonly = no
 writable = yes
 guest ok = No
 create mask = 0777
 valid users = @"DOMAIN smbusers"
 read list = @"DOMAIN smbusers"
 write list = @"DOMAIN smbusers"

Внимание! Имя домена указывается в верхнем регистре.

Раздел [Homes] и расшаренные папки могут отличаться от указанных. В моем конфиге они настроены в соответствии с требованиями, описанными в начале статьи.

В моем случае smbusers  — группа в Active Directory, пользователи которой будут иметь доступ к общей папке и к личным папкам. Что бы домашняя директория создавалась автоматически в /home/samba/имя_пользователя, когда пользователь впервые подключается к серверу Samba, помимо настроек в /etc/samba/smb.conf, нужно прописать также определенную запись в /etc/pam.d/samba:

$ sudo echo "session required pam_mkhomedir.so umask=0077 skel=/etc/samba/skel/" >> /etc/pam.d/samba

umask=0077 — соответствует правам доступа 0700.

skel=/etc/samba/skel/ — путь к папке, содержимое которой будет скопировано в созданную директорию.

Далее открываем /etc/nsswitch.conf и редактируем указанные строки:

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

Рестартуем сервисы:

$ sudo /etc/init.d/winbindd restart

$ sudo /etc/init.d/samba restart

Вводим компьютер в домен:

$ net ads join -U domain_user

domain_user — пользователь домена, у которого достаточно привилегий для присоединения компьютера к домену.

Проверим работу winbindd:

$ wbinfo -u

$ wbinfo -g

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

Что бы проверить воспринимаются ли доменные пользователи как локальные, можно воспользоваться командой:

$ id domain_user

Должны получить что-то типа:

uid=10002(domain_user) gid=10006(пользователи домена),10008(smbusers),10003(BUILTIN users)

Вот и все.

Теперь, при подключении к нашему серверу с винды под доменной учетной записью domain_user, мы должны видеть 2 расшаренные папки — «domain_user» и «Public». При этом папка domain_user будет создана в /home/samba если не существовала ранее.

Настройка авторизации через kerberos

1. В первую очередь правим файл /etc/krb5.conf. Нашем случае он выглядит так:

Настройка маршрутизации

1. Создаем таблицу маршрутизации, добавляем новые таблицы в /etc/iproute2/rt_tables, номер берется из головы, но не дублирующийся:

257     <table_name2>
256     <table_name1>

2. Добавляем правила для наших таблиц:

ip route add 192.168.1.0/24 dev eth0  proto kernel  scope link  src <local_ip> table table_name1
ip route add default gw <gateway_ip1> table table_name1
ip route add 192.168.1.0/24 dev eth0  proto kernel  scope link  src <local_ip> table table_name2
ip route add default gw <gateway_ip2> table table_name2
ip rule add from xxx.xxx.xxx.xx1 table table_name1
ip rule add from xxx.xxx.xxx.xx2 table table_name2
ip route flush cache

Установка и настройка squid 3

1. Устанавливаем пакет SQUID 3:

  # apt-get install squid3

2. Настраиваем SQUID с помощью файла /etc/squid3/squid.conf:

Шаг 1. обновите свой apt

Нач­ни­те с обнов­ле­ния вашей систе­мы Ubuntu / Debian Linux.

sudo apt -y update

Это важ­но, посколь­ку уста­нов­ка может завер­шить­ся ошиб­кой, если сер­вер уста­нов­лен толь­ко что.

Для Ubuntu 20.04 | 18.04 добавь­те сле­ду­ю­щие репо­зи­то­рии в файл sources.list

Шаг 3. установите необходимые пакеты

Для при­со­еди­не­ния систе­мы Ubuntu 20.04 | 18.04 / Debian 10 к доме­ну Active Directory (AD) тре­бу­ет­ся ряд пакетов.

sudo apt updatesudo apt -y install realmd libnss-sss libpam-sss sssd sssd-tools adcli samba-common-bin oddjob oddjob-mkhomedir packagekit

Толь­ко после успеш­ной уста­нов­ки зави­си­мо­стей вы може­те при­сту­пить к обна­ру­же­нию доме­на Active Directory в Debian 10 / Ubuntu 20.04 / 18.04.

Шаг 4. откройте для себя домен active directory в debian 10 / ubuntu 20.04 | 18.04

Коман­да realm discover воз­вра­ща­ет пол­ную кон­фи­гу­ра­цию доме­на и спи­сок паке­тов, кото­рые долж­ны быть уста­нов­ле­ны для реги­стра­ции систе­мы в домене.

Шаг 5. присоединитесь к ubuntu 20.04 | 18.04 / debian 10 к домену active directory (ad)

Учет­ная запись адми­ни­стра­то­ра AD тре­бу­ет­ся для инте­гра­ции ваше­го ком­пью­те­ра Linux с доме­ном Windows Active Directory. Про­верь­те и под­твер­ди­те учет­ную запись адми­ни­стра­то­ра AD и пароль.

Коман­да realm join настро­ит локаль­ный ком­пью­тер для исполь­зо­ва­ния с ука­зан­ным доме­ном, настро­ив как локаль­ные систем­ные служ­бы, так и запи­си в домене иден­ти­фи­ка­ции. У коман­ды есть несколь­ко пара­мет­ров, кото­рые мож­но про­ве­рить с помощью:

Шаг 6. контроль доступа — ограничьте до пользователя / группы

Доступ к заре­ги­стри­ро­ван­но­му сер­ве­ру мож­но огра­ни­чить, раз­ре­шив толь­ко опре­де­лен­ных поль­зо­ва­те­лей и группы.

Огра­ни­че­ние для пользователей

Что­бы раз­ре­шить поль­зо­ва­те­лю доступ через SSH и кон­соль, исполь­зуй­те команду:

Шаг 7. настройте доступ через sudo

По умол­ча­нию у поль­зо­ва­те­лей доме­на не будет раз­ре­ше­ния на повы­ше­ние при­ви­ле­гий до root. Поль­зо­ва­те­лям дол­жен быть предо­став­лен доступ на осно­ве имен поль­зо­ва­те­лей или групп.

Давай­те сна­ча­ла созда­дим файл раз­ре­ше­ний sudo.

Шаг 8. проверьте доступ по ssh

Полу­чи­те доступ к сер­ве­ру уда­лен­но, посколь­ку поль­зо­ва­те­лю AD раз­ре­ше­но вхо­дить в систему.

Похожее:  IT Crowd | Настраиваем MikroTik

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

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