Это старая версия документа!


Статья не дописана, продолжение следует!
Вход в систему пользователем домена


Или, другими словами, аутентификация и дальнейшая авторизация в системе Slackware 14.0 с использованием логина и пароля взятого с Activ Directory (AD).

Начало

Для того, чтобы осуществить задуманное, нам необходимо:

  • Собрать и установить РАМ;
  • Собрать и установить samba с поддержкой PAM;
  • Собрать и установить shadow с поддержкой РАМ;
  • Всё это дело настроить.
Файл Описание
pam-1.1.3-i486-1.txz Собранный пакет РАМ
shadow-4.1.5.1-i586-pam-1.tgz Собранный пакет shadow с поддержкой РАМ
samba-3.6.12-i486-1_slack14.0.txz Собранный пакет samba с поддержкой РАМ
samba_pam_slackbuild.tar.gz SlackBuild для сборки samba с поддержкой РАМ
pam.d.tar.gz Каталог pam.d со всеми рабочими настройками
confs_pam.tar.gz Файлы конфигураций (krb5.conf, login.defs, nsswitch.conf, pam.conf, resolv.conf, smb.conf)

Как собрать и где применить - ниже по статье.

Работать будем с контролером домена из ЭТОЙ СТАТЬИ.
Т.е.:

Домен TRANSIT
Контролер домена DC1.TRANSIT.LOCAL
IP контролера домена 192.168.10.188
IP шлюза и сервера времени 192.168.10.250
Тестовый компьютер со Slackware 14.0 Slack-test
IP тестового компьютер со Slackware 14.0 192.168.10.44
Администратор домена Administrator
Пользователь домена v_pupkin

В принципе, оно работает и с контролером домена на Windows 2003 (проверено).

Прежде чем начнёте, повторю высказывание Патрика по поводу РАМа:

«I think a better name for PAM might be SCAM, for Swiss Cheese Authentication Modules, and have never felt that the small amount of convenience it provides is worth the great loss of system security. We miss out on half a dozen security problems a year by not using PAM, but you can always install it yourself if you feel that you're missing out on the fun. (No, don't do that)»
Patrick.


Что на великом и могучем звучит, примерно, так:

«Я думаю, что лучшим названием для PAM может быть SCAM (Swiss Cheese Authentication Modules - Швейцарско сырный модуль аутентификации) и никогда не чувствовал, что небольшое количество удобств, которое он обеспечивает, стоит большой потери безопасности системы . Мы освободились от полдюжины проблем безопасности в год, не используя PAM, но вы всегда можете установить его самостоятельно, если чувствуете, что упускаете самое интересное. (Нет, не делайте этого)»
Патрик.

Собираем PAM

Начиная с версии 13.37, в дистрибутиве Slackware Linux в папке extra/source/pam, присутствует SlackBuild, который поможет нам собрать и в итоге получить готовый пакет pam-1.1.3-i486-1.txz.
Установим его:

# installpkg pam-1.1.3-i486-1.txz

и скопируем 2 библиотеки pam_smbpass.so и pam_winbind.so туда, где им положено быть.

# cp /etc/security/*.so /lib/security/ 

В принципе, у нас всё готово для сборки остальных пакетов. Соберем samba.

Собираем и настраиваем samba

Прежде чем начать собирать samba, нам необходимо собрать и установить керберос. Я тестировал с MIT Kerberos.
При помощи sbopkg правим слакбилд, info, собираем и устанавливаем последнюю версию MIT kerberos.

Для того, чтобы не искать программы от kerberos добавим их в /etc/profile:

.....
.....
# Set the default system $PATH:
PATH="/usr/local/bin:/usr/bin:/bin:/usr/games:/usr/kerberos/bin:/usr/kerberos/sbin"
.....
.....

Далее, для примера возьмем samba-3.6.12.
Скачаем SlackBuild samba_pam_slackbuild.tar.gz уже подправленный для сборки с РАМ или с http://mirror.yandex.ru/slackware/slackware-14.0/source/n/samba/, где нужно будет подправить SlackBuild в части ./configure.
Скачаем саму самбу samba-3.6.12.tar.gz и положим файл в каталог со SlackBuild'ом.
Если используете уже подправленный SlackBuid, то просто запустите его, если нет, то в части ./configure измените на нижеследующее:

./configure \
  --prefix=/usr \
  --libdir=/usr/lib${LIBDIRSUFFIX} \
  --bindir=/usr/bin \
  --sbindir=/usr/sbin \
  --mandir=/usr/man \
  --sysconfdir=/etc \
  --with-configdir=/etc/samba \
  --with-piddir=/var/run \
  --with-privatedir=/etc/samba/private \
  --localstatedir=/var \
  --with-lockdir=/var/cache/samba \
  --with-logfilebase=/var/log/samba \
  --with-acl-support \
  --with-automount \
  --with-quotas \
  --with-syslog \
  --with-utmp \
  --with-winbind \
  --with-ldap \
  --with-ads \
  --with-sendfile-support \
  --with-dnsupdate \
  --with-profiling-data \
  --with-fhs \
  --with-swatdir=/usr/share/swat \
  --with-pammodulesdir=/etc/security \
  --with-krb5=/usr/kerberos \
  --with-pam \
  --with-pam_smbpass \
  --enable-cups \
  --enable-external-libtalloc=no \
  --enable-static=no \
  --enable-shared=yes \
  --with-cifsmount \
  --with-cifsumount \
  --with-quotas \
  --with-libsmbclient \
  --build=$ARCH-slackware-linux

Для чистоты эксперимента я удалил установленную самбу и поставил вновь собранную.
Теперь необходимо её настроить для ввода в домен. Для этого правим нужные файлы.
В начале статьи есть файл confs_pam.tar.gz в котором уже собраны файлы с рабочими у меня настройками, но на всякий случай, я их дублирую прямо в статье. И так, по порядку:

/etc/krb5.conf

[logging]
 default = FILE10000:/var/log/krb5/krb5lib.log
# default = FILE:/var/log/krb5/krb5libs.log
 kdc = FILE:/var/log/krb5/krb5kdc.log
 admin_server = FILE:/var/log/krb5/kadmind.log

[libdefaults]
  default_realm = TRANSIT.LOCAL
  dns_lookup_realm = true
  dns_lookup_kdc = true
  ticket_lifetime = 24h
  forwardable = yes

[realms]
    TRANSIT.LOCAL = {
         kdc = dc1.transit.local:88
         admin_server = dc1.transit.local:750
         default_domain = transit.local
     }

[domain_realm]
 .transit.local = TRANSIT.LOCAL
  transit.local = TRANSIT.LOCAL

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

/etc/resolv.conf

search transit.local
nameserver 192.168.10.188

/etc/nsswitch.conf

# passwd:       files nis
# shadow:       files nis
# group:        files nis

passwd:         compat winbind
group:          compat winbind

hosts:          files dns
networks:       files

services:       files
protocols:      files
rpc:            files
ethers:         files
netmasks:       files
netgroup:       files
bootparams:     files

automount:      files
aliases:        files

/etc/smb.conf

[global]
interfaces = eth0 lo
hosts allow = 192.168.10. 127.
netbios name = Slack-test
server string = Slack_test
security = ADS
workgroup = TRANSIT
realm = TRANSIT.LOCAL
obey pam restrictions = yes
allow trusted domains = No
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
name resolve order = hosts wins bcast lmhosts
case sensitive = no
dns proxy = no
client use spnego = yes
client signing = yes
os level = 0
preferred master = No
local master = No
domain master = No
dns proxy = No
ldap ssl = no
strict locking = No
time server = no
auth methods = winbind
encrypt passwords = yes

winbind enum users = Yes
winbind enum groups = Yes
winbind use default domain = yes
winbind refresh tickets = yes

template shell = /bin/bash
template homedir = /home/%D/%U

log file = /var/log/samba/log.%m
max log size = 1024
log level = 3
display charset = koi8-r
unix charset = koi8-r
dos charset = cp866
nt acl support = yes

printcap name = /etc/printcap

Пробуем получить билетик:

# kinit Administrator
Password for Administrator@TRANSIT.LOCAL: 

# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: Administrator@TRANSIT.LOCAL

Valid starting       Expires              Service principal
11.03.2013 17:59:03  12.03.2013 03:59:03  krbtgt/TRANSIT.LOCAL@TRANSIT.LOCAL
        renew until 12.03.2013 18:01:50

Получили, теперь введем машину в домен:

# net ads join -U  Administrator
Enter Administrator's password:
Using short domain name -- TRANSIT
Joined 'SLACK-TEST' to dns domain 'transit.local'

Немного изменим файл /etc/rc.d/rc.samba добавив winbindd. В итоге он будет выглядеть так:

#
# /etc/rc.d/rc.samba
#
# Start/stop/restart the Samba SMB file/print server.
#
# To make Samba start automatically at boot, make this
# file executable:  chmod 755 /etc/rc.d/rc.samba
#

samba_start() {
  if [ -x /usr/sbin/smbd -a -x /usr/sbin/nmbd -a -r /etc/samba/smb.conf ]; then
    echo "Starting Samba:  /usr/sbin/smbd -D"
    /usr/sbin/smbd -D
    echo "                 /usr/sbin/nmbd -D"
    /usr/sbin/nmbd -D
    echo "                 /usr/sbin/winbindd -D"
    /usr/sbin/winbindd -D
  fi
}

samba_stop() {
  killall smbd nmbd winbindd
}

samba_restart() {
  samba_stop
  sleep 2
  samba_start
}

case "$1" in
'start')
  samba_start
  ;;
'stop')
  samba_stop
  ;;
'restart')
  samba_restart
  ;;
*)
  # Default is "start", for backwards compatibility with previous
  # Slackware versions.  This may change to a 'usage' error someday.
  samba_start
esac

дадим ему права на запуск и запустим samba:

# chmod 755 /etc/rc.d/rc.samba
# /etc/rc.d/rc.samba start
Starting Samba:  /usr/sbin/smbd -D
                 /usr/sbin/nmbd -D
                 /usr/sbin/winbindd -D
 

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

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

# wbinfo -u
v_pupkin
administrator
dns-dc1
krbtgt
guest

# wbinfo -g
.....
.....
domain admins
domain guests
schema admins
domain users
dnsadmins

# wbinfo -a administrator
Enter administrator's password:
plaintext password authentication succeeded
Enter administrator's password:
challenge/response password authentication succeeded

А теперь нужно убедиться, что программа getent покажет нам локальных и доменных пользователей и группы одновременно:

# getent passwd
root:x:0:0::/root:/bin/bash
.....
.....
apache:x:80:80:User for Apache:/srv/httpd:/bin/false
messagebus:x:81:81:User for D-BUS:/var/run/dbus:/bin/false
haldaemon:x:82:82:User for HAL:/var/run/hald:/bin/false
pop:x:90:90:POP:/:/bin/false
nobody:x:99:99:nobody:/:/bin/false
v_pupkin:*:10000:10000:Пупкин Василий Иванович:/home/TRANSIT/v_pupkin:/bin/bash
administrator:*:10001:10000:Administrator:/home/TRANSIT/administrator:/bin/bash
dns-dc1:*:10002:10000:dns-dc1:/home/TRANSIT/dns-dc1:/bin/bash
krbtgt:*:10003:10000:krbtgt:/home/TRANSIT/krbtgt:/bin/bash
guest:*:10004:10001:Guest:/home/TRANSIT/guest:/bin/bash

# getent group
root:x:0:root
bin:x:1:root,bin
daemon:x:2:root,bin,daemon
.....
.....
domain admins:x:10013:administrator
domain guests:x:10001:
schema admins:x:10014:administrator
domain users:x:10000:
dnsadmins:x:10015:

Отлично! Всё необходимое мы проверили - работает! Теперь приступим к самлому серьёзному - установки shadow.

Собираем и устанавливаем shadow

После установки НЕ ПЕРЕЗАГРУЖАЙТЕСЬ !!! Дочитайте статью до конца, чтобы знать где искать ошибки. Перейдите в соседнюю консоль (Alt+F2(3,4,5,6) или из Х-ов Ctrl+Alt+F2(3,4,5,6)). 100500 раз проверьте, что у вас всё работает и работает так, как Вам необходимо! А именно команды login, logout, su, useradd, usermod, ssh и им подобные (подробный список программ которые будут заменены можно посмотреть непосредственно в пакете).

Скачаем последнюю версию, на сегодня, shadow, соберем с поддержкой РАМ и установим в систему.

# wget http://pkg-shadow.alioth.debian.org/releases/shadow-4.1.5.tar.gz
# tar xf shadow-4.1.5.tar.gz
# cd shadow-4.1.5.1
# ./configure \
--prefix=/usr \
--sysconfdir=/etc \
--mandir=/usr/man \
--docdir=/usr/doc/shadow-4.1.5.1 \
--disable-shared \
--without-libcrack \
--with-libpam
# make 
# make install DESTDIR=/tmp/shadow-4.1.5.1
# cd /tmp/shadow-4.1.5.1
# makepkg  -l y -c n /tmp/shadow-4.1.5.1-i586-pam-1.tgz
# upgradepkg --reinstall --install-new /tmp/shadow-4.1.5.1-i586-pam-1

Всё, shadow установлен, теперь нужно настроить РАМ и в соседней консоли проверить работоспособность.

Настройка и проверка работоспособности

Настройки РАМ находятся в каталоге /etc/pam.d. Изначально его нет, нужно создать. В этом каталоге находятся текстовые файлы с политиками. И именуются эти файлы, соответственно сервису, к которому политики применяются.
Т.е. для программы login, это login и т.д.
Вначале статьи есть архив каталога pam.d с моими рабочими файлами, можете взять их для примера и настроить под себя, или просто создать свои.

/etc/pam.conf содержит все политики PAM для вашей системы

http://www.freebsd.org/doc/ru/articles/pam/ http://rus-linux.net/lib.php?name=/MyLDP/sec/pam.html http://citforum.ru/operating_systems/articles/pam.shtml









Навигация
Печать/экспорт
QR Code
QR Code wiki:articles:pam (generated for current page)