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 разрешено входить в систему.