Linux в домене ActiveDirecory (Win2003) (+ACL, +Kerberos)

Всё ниже описанное происходило в домене Windows 2003 (контроллер) и Gentoo linux, как член домена. Полное имя домена domain.local, сокращённое domloc. Что бы всё это заработало убил недели 2, причём то работало, то нет. Пока осталась проблема использования ACL’ов (не могу выставлять права из консоли, только через винду, об этом ниже) Не хотят назначаться доменным юзерам и группам. Может в дальнейшем исправлю. Очень многое почерпнул в статье

Статья будет разбита на несколько этапов.

1) Установка времени и временной зоны.

Этот этап один из самых лёгких и самых важных. Если время будет отличаться больше, чем на 5 минут (значение по дефолту), то вы не сможете ни получить билет от kerberos, ни ввести комп в домен. Поэтому, ставим и настраиваем ntp.

#USE="openntpd" emerge -av net-misc/ntp

Потом настроил синхронизацию времени с локального ntp-сервера (в файле /etc/ntp.conf)

server 10.10.10.10.

прописал зону (в /etc/conf.d/clock)

CLOCK="UTC"
TIMEZONE="Europe/Kiev"
CLOCK_SYSTOHC="yes"

потом выполнил команду

#cp /usr/share/zoneinfo/Europe/Kiev /etc/localtime

и запустил сервис:

#/etc/init.d/ntp-client start

После этого сихронизировалось время. Добавил в автозагрузку скрипт ntp-client (делается это командой rc-update add ntp-client default)

2) Установка hostname и прочих hosts

Обязательно пропишите в /etc/hosts имя компа с доменным суффиксом

127.0.0.1 gentoo.domain.local localhost gentoo

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

Ставим пакет app-crypt/mit-krb5. На этом этапе могут возникнуть проблемы:

# emerge -av app-crypt/mit-krb5

These are the packages that would be merged, in order:

Calculating dependencies... done!
dev-util/pkgconfig-0.23  USE="-hardened" 1,009 kB
sys-devel/bc-1.06.95  USE="readline -libedit -static" 284 kB
sys-libs/e2fsprogs-libs-1.41.3-r1  USE="nls" 479 kB
app-crypt/mit-krb5-1.6.3-r6  USE="-doc -krb4" 11,636 kB
sys-libs/com_err ("sys-libs/com_err" is blocking sys-libs/e2fsprogs-libs-1.41.3-r1)
sys-libs/ss ("sys-libs/ss" is blocking sys-libs/e2fsprogs-libs-1.41.3-r1)

Total: 4 packages (4 new), Size of downloads: 13,406 kB
Conflict: 3 blocks (3 unsatisfied)

* Error: The above package list contains packages which cannot be
* installed at the same time on the same system.

('ebuild', '/', 'sys-libs/e2fsprogs-libs-1.41.3-r1', 'merge') pulled in by
>=sys-libs/e2fsprogs-libs-1.41.0 required by ('ebuild', '/', 'app-crypt/mit-krb5-1.6.3-r6', 'merge')

('installed', '/', 'sys-fs/e2fsprogs-1.40.8', 'nomerge') pulled in by
sys-fs/e2fsprogs required by system
sys-fs/e2fsprogs required by world
>=sys-fs/e2fsprogs-1.34 required by ('installed', '/', 'sys-apps/util-linux-2.13.1.1', 'nomerge')


For more information about Blocked Packages, please refer to the following
section of the Gentoo Linux x86 Handbook (architecture is irrelevant):

http://www.gentoo.org/doc/en/handbook/handbook-x86.xml?full=1#blocked

Ну что ж, подчиняемся и выполняем всё, что требует (перед этим пересобрал wget без поддержкиssl):

#emerge --unmerge sys-libs/com_err
#emerge --unmerge sys-libs/ss
#emerge --unmerge sys-fs/e2fsprogs

После этого можно ставить mit-krb5:

#emerge mit-krb5

Перехожу к настройке (ОЧЕНЬ ВАЖНО, ЧТО БЫ ИМЕНА ШЛИ В ВЕРХНЕМ РЕГИСТРЕ):

Файл /etc/krb5.conf

[libdefaults]
default_realm = DOMAIN.LOCAL
ticket_lifetime = 24000
dns_lookup_realm = false
dns_lookup_kdc = false
clockskew = 600

[realms]
DOMAIN.LOCAL = {
admin_server = 10.0.3.188
default_domain = DOMAIN.LOCAL
kdc = 10.0.3.188
kdc = 10.0.3.186
}

[domain_realm]
.domain.local = DOMAIN.LOCAL
domain.local = DOMAIN.LOCAL

[logging]
default = FILE:/var/log/kerberos/krb5libs.log
kdc = FILE:/var/log/kerberos/krb5kdc.log
admin_server = FILE:/var/log/kerberos/kadmind.log

[appdefaults]
pam = {
debug = true
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}

[kdc]
profile = /etc/kdc.conf

[login]
krb4_convert = false
krb4_get_tickets = false

Файл /etc/kdc.conf

[kdcdefaults]
kdc_ports = 750,88

[realms]
DOMAIN.LOCAL = {
database_name = /var/lib/krb5kdc/principal
admin_keytab = FILE:/etc/krb5.keytab
#               acl_file = /var/lib/krb5kdc/kadm5.acl
key_stash_file = /var/lib/krb5kdc/.k5.DOMAIN.LOCAL
kdc_ports = 750,88
max_life = 10h 0m 0s
max_renewable_life = 7d 0h 0m 0s
default_principal_flags = +preauth
master_key_type = des-cbc-crc
supported_enctypes = rc4-hmac:normal des-cbc-crc:normal des3-cbc-raw:normal des3-cbc-sha1:normal des-cbc-crc:afs3
}

Теперь начиается самое важное и интересное! Создание ключей и базы kerberos.

Создаем принципиалы и ключи.

Для начала следует создать новую базу данных и наполнить ее принципиалами. Здесь возможно несколько вариантов, один из них вызов kadmin с ключом –l. Можно использовать специальные утилиты.

$ sudo kdb5_util create -s
Loading random data
Initializing database ‘/var/lib/krb5kdc/principal’ for realm ‘DOMAIN.LOCAL’,
master key name ‘K/M@DOMAIN.LOCAL’
You will be prompted for the database Master Password.
It is important that you NOT FORGET this password.
Enter KDC database master key:
Re-enter KDC database master key to verify:

Новая база создана (у меня создалась в каталоге /var/lib/krb5kdc). Утилита попросит ввести пароль, не забудьте его. Создадим принципиал, который потребуется для административных целей:

$ sudo kadmin.local -q “addprinc admin/admin”
Authenticating as principal root/admin@DOMAIN.LOCAL with password.
Enter password for principal “admin/admin@DOMAIN.LOCAL”:
Re-enter password for principal “admin/admin@DOMAIN.LOCAL”:
Principal “admin/admin@DOMAIN.LOCAL” created.
Authenticating as principal root/admin@DOMAIN.LOCAL with password.
Enter password for principal “admin/admin@DOMAIN.LOCAL”:
Re-enter password for principal “admin/admin@DOMAIN.LOCAL”:
Principal “admin/admin@DOMAIN.LOCAL” created.

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

$ sudo kadmin.local -p admin/admin
Authenticating as principal admin/admin with password.

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

kadmin.local: addprinc -randkey host/domain.local
Principal “host/domain.local@DOMAIN.LOCAL” created.

теперь пользователь

kadmin.local: addprinc gentoo
Enter password for principal “gentoo@DOMAIN.LOCAL”:
Re-enter password for principal “gentoo@DOMAIN.LOCAL”:
Principal “gentoo@DOMAIN.LOCAL” created.

добавим принципиал компьютера в файл keytab в котором хранятся собственные принципиалы

kadmin.local: ktadd host/domain.local
Entry for principal host/domain.local with kvno 3, encryption type Triple DES cbc mode with HMAC/sha1 added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal host/domain.local with kvno 3, encryption type DES cbc mode with CRC-32 added to keytab WRFILE:/etc/krb5.keytab.

Теперь запускаем сервисы kerberos и kerberos-admin:

/etc/init.d/mit-krb5kdc start
/etc/init.d/mit-krb5kadmind start

Теперь пробуем получить бителик kerberos (используя доменную учётку, обладающую правами администратора):

localhost init.d # kinit admin
Password for admin@059.LOCAL:
kinit(v5): Clock skew too great while getting initial credential

Если видите такую надпись, значит у вас не синхронизировано время. Если ошибок нет, значит билетик вы получили. Посмотреть его можно командой klist:

gentoo conf.d # klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: admin@DOMAIN.LOCAL

Valid starting     Expires            Service principal
07/03/09 14:22:50  07/03/09 21:02:50  krbtgt/DOMAIN.LOCAL@DOMAIN.LOCAL

4) Установка и настройка samb’ы

Собирать самбу будем с поддержкой ads, acl, kerberos, winbind, остальное — по желанию:

#USE="acl ads winbind kerberos debug doc examples syslog ldap" emerge net-fs/samba

После установки приводим конфиг в такой вид:

workgroup = DOMLOC
netbios name = gentoo
server string = Samba Server %v
printcap name = /dev/null
load printers = no
printing = no
log file = /var/log/samba/log.%m
max log size = 50
log level = 3
map to guest = bad user
security = ads
password server = 10.0.3.188 10.0.3.186
encrypt passwords = yes
unix password sync = Yes
passwd program = /usr/bin/passwd %u
passwd chat = *New*UNIX*password* %n
*Re*ype*new*UNIX*password* %n
*passwd:*all*authentication*tokens*updated*successfully*
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
local master = no
os level = 33
domain master = no
preferred master = no
dns proxy = no
username map = /etc/samba/smbusers
default case = lower
case sensitive = no

dos charset = cp866
unix charset = utf-8

allow trusted domains = yes

idmap uid = 10000-20000
idmap gid = 10000-20000

winbind separator = /
winbind use default domain = yes

winbind uid = 10000-20000
winbind gid = 10000-20000
winbind enum groups = yes
winbind enum users = yes

realm = DOMAIN.LOCAL
client ntlmv2 auth = yes
auth methods = winbind
inherit acls = Yes
map acl inherit = Yes
nt acl support = yes
inherit permissions = yes
inherit owner = yes
admin users = @DOMLOC//admins
passdb backend = tdbsam
template shell = /bin/bash
valid users = @DOMLOC//admins @DOMLOC//managers
writable = yes
path = /share/test1

valid users = @DOMLOC//admins
writable = yes
path = /share/qw

Samb’y пока не запускаем!!!.

5) Вводим машину в домен.

На этом этапе я создал A и PTR записи в DNS’е для компа gentoo. Учётка admin должна иметь права для ввода компов в домен:

#net ads join -U admin
Using short domain name -- DOMLOC
Joined 'GENTOO' to realm 'DOMAIN.LOCAL'

Теперь можно запустить Samb’y

Если какие-то ошибки — смотрим их и исправляем. Например, если машина уже была введена в домен, то вывалиться такое:

#net ads join -U admin
admin's password:
Using short domain name -- DOMLOC
Failed to set servicePrincipalNames. Please ensure that
the DNS domain of this server matches the AD domain,
Or rejoin with using Domain Admin credentials.
Deleted account for 'GENTOO' in realm 'DOMAIN.LOCAL'
Failed to join domain: Type or value exist

Теперь пробуем посмотреть список доменных юзеров:

gentoo samba # wbinfo -u
Error looking up domain users

Посмотрел, а у меня не запущен winbind-демон. Ну что, погуглив, почитав, открыл файл/etc/conf.d/samba, увидел такую строчку:

#add "winbind" to the daemon_list if you also want winbind to start
daemon_list="smbd nmbd"

Ну что ж, делаем так, как написано:

daemon_list="smbd nmbd winbind"

Примечание: в debian’e winbind запускается отдельно, а не как часть пакета samba (/etc/init.d/winbind start)

Теперь перезапускаем самбу и проверяем, запущен ли winbind:

gentoo conf.d # ps aux | grep winbind
root      4550  0.0  1.6   9480  4188 ?        Ss   13:46   0:05 /usr/sbin/winbindd -D --debuglevel=10 --log-basename=/var/log/samba/winbind
root      4586  0.0  1.4   9236  3592 ?        S    13:46   0:06 /usr/sbin/winbindd -D --debuglevel=10 --log-basename=/var/log/samba/winbind
root      4591  0.0  0.8   9232  2028 ?        S    13:46   0:01 /usr/sbin/winbindd -D --debuglevel=10 --log-basename=/var/log/samba/winbind
root      4593  0.0  0.5   9084  1340 ?        S    13:46   0:00 /usr/sbin/winbindd -D --debuglevel=10 --log-basename=/var/log/samba/winbind
root      4594  0.0  0.5   9084  1384 ?        S    13:46   0:00 /usr/sbin/winbindd -D --debuglevel=10 --log-basename=/var/log/samba/winbind
root     26832  0.0  0.2   1748   612 pts/2    S+   17:40   0:00 grep --colour=auto winbind

Вот теперь проверим всё ли у нас впорядке:

#wbinfo -t
checking the trust secret via RPC calls succeeded

и заодно посмотрим список юзеров и групп доменных:

#wbinfo -u
manager1
manager2
manager3
manager4
manager5
manager6

#wbinfo -g
BUILTIN/administrators
BUILTIN/users
helpservicesgroup
telnetclients
dnsadmins
dnsupdateproxy
admins
manager

6) Авторизация через домен.

Что бы юзеры могли авторизироваться через домен, нужно указать, что используется авторизацияwinbind. Редактируем файл /etc/nsswitch.conf (добавляем слово winbind):

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

Тестируем:

#getent passwd
manager1:*:10024:10000:manager1:/home/DOMLOC/manager1:/bin/bash
manager2:*:10025:10000:manager2:/home/DOMLOC/manager2:/bin/bash
manager3:*:10026:10000:manager3:/home/DOMLOC/manager3:/bin/bash
manager4:*:10027:10000:manager4:/home/DOMLOC/manager4:/bin/bash
manager5:*:10028:10000:manager5:/home/DOMLOC/manager5:/bin/bash
manager6:*:10029:10000:manager6:/home/DOMLOC/manager6:/bin/bash

getent group
root::0:root
bin::1:root,bin,daemon
daemon::2:root,bin,daemon
sys::3:root,bin,adm
adm::4:root,adm,daemon
tty::5:
disk::6:root,adm
lp::7:lp
mem::8:
kmem::9:
wheel::10:root
floppy::11:root
mail::12:mail
news::13:news
uucp::14:uucp
man::15:man
console::17:
audio::18:
cdrom::19:
dialout::20:root
tape::26:root
video::27:root
cdrw::80:
usb::85:
users::100:games
nofiles:x:200:
smmsp:x:209:smmsp
portage::250:portage
utmp:x:406:
nogroup::65533:
nobody::65534:
sshd:x:22:
skeletor:x:1000:
ssmtp:x:1001:
ldap:x:439:
lpadmin:x:106:
ntp:x:123:
helpservicesgroup:x:10002:support_388945a0
telnetclients:x:10003:
managers:x:10016:manager1,manager2,manager3,manager4,manager6

Меняем дефолтную систему PAM-авторизации:

#cd /etc/pam.d
#mv system-auth system-auth-default
#ln -s system-auth-winbind system-auth

7) ACL-поддержка на уровне файловой системы

Добавим ключевое слово acl в опции монтирования в /etc/fstab для нужного нам раздела. Так же я добавлю слово bsdgroups, так как без него возникают некоторые проблемы у созданных файлов (меняется владелец и сбрасываются права доступа через samb’y) :

/dev/sdb1               /share           ext3            noatime,acl,bsdgroups               0 1

Перегружаем тачку, что бы изменения вступили в силу (в частности PAM-авторизации).

После перезагрузки нужно заново получить билет от kerberos:

#kinit admin
Password for admin@DOMAIN.LOCAL:

Всё. Настроим, например, доступ по ssh к этой машине только для доменной группы admins. Для этого внесём изменения в файл /etc/sshd/sshd_config:

# Kerberos options
KerberosAuthentication yes
KerberosOrLocalPasswd yes
KerberosTicketCleanup yes
AllowGroups admins

Перечитываем конфиг ssh и пробуем зайти:

#/etc/init.d/ssh reload

Если юзер первый раз заходит на сервак, то для него создасться домешняя папка :

login as: jonny
Using keyboard-interactive authentication.
Password:
Creating directory '/home/059DOM/jonny'.
Creating directory '/home/059DOM/jonny/.ssh'.
jonny@gentoo ~ $

Далее можно добавить группу admins в /etc/sudoers, что бы можно было выполнять рутовые команды. Вообщем, можно где разбежаться.

PS

Отдельное внимание хочу уделить возможности использования ACL. У меня так и не получилось нормально их юзать. Пробую из консоли назначить права, вылетает с ошибкой:

#gentoo conf.d # setfacl -m g:'DOMLOC/managers':rwx /share/test1/
setfacl: Option -m: Invalid argument near character 3

причём пробовал всевозможные варианты указывания группы и домена. Погуглив, понял, что не я один такой. Даже обновил пакет acl, но всё тщетно. Если пробовал назначать имя группы без домена, ошибки не возникает, но тогда нет доступа (поскольку система считае эту группу ЛОКАЛЬНОЙ, а не доменной). Есдинственное рабочее решение — это из винды давать доступ. Тогда всё работает, хотя, если посмотреть из консоли командой getfacl, то выводится только группа, без имени домена.

Оригинал статьи здесь.
Опубликовано с разрешения редакции журнала RootUA и газеты FOSS News

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

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