Pull to refresh

Сквозная авторизация из Windows в Linux

Reading time4 min
Views8.2K
Захотелось мне как-то попадать на линуксовую машину через PuTTY не вводя пароль. Оказывается это можно сделать. Правда немного сложнее чем хотелось бы.
Итак.

Мы будем настраивать SSH доступ на хосте sshhost, который входит в домен kerberos DOMAN.LOCAL
Обратите внимание на заглавные буквы. Для кербероса это критично, поэтому везде где имеем с ним дело пишем имя домена заглавными.

Входные данные.
KDC (Key Distribution Centre), DNS сервер и контроллер AD совпадают: dc1.domain.local. Правами админа в нашем домене обладет пользователь Administrator. На машине sshhost установлена Gentoo Linux


Кое-какие приготовления:
Хост должен разрешаться в полное имя, поэтому
1) проверям настройки DNS дваждыы, а лучше трижды.
2) Делаем прямой и обратный резолв нашего хоста (с сервера Kerberos)
3) обязательно выносим FQDN нашего хоста на первое место в файле hosts
# nano -w /etc/hosts
127.0.0.1 sshhost.domain.local sshhost localhost

# nano -w /etc/conf.d/hostname
HOSTNAME="sshhost"


настраиваем сихронизацию времени.
# emerge ntp
# nano -w /etc/conf.d/ntp-client

NTPCLIENT_CMD="ntpdate"
NTPCLIENT_OPTS="-s -b -u dc1.domain.local"


ну и, чтобы не возвращаться к этому вопросу:
# rc-update add ntp-client default

USE-флаги:
# nano -w /etc/make.conf
USE="unicode"

(для использования UTF надо его настроить: www.gentoo.org/doc/en/utf-8.xml)

устанавливаем:
# emerge sys-auth/pam_krb5 app-crypt/mit-krb5

Настройка Kerberos
создаем файл /etc/krb5.conf:
# nano -w /etc/krb5.conf
[libdefaults]
ticket_lifetime = 24000
default_realm = DOMAN.LOCAL
dns_lookup_kdc = true
dns_lookup_realm = true
default_tkt_enctypes = rc4-hmac des3-hmac-sha1 des-cbc-crc
default_tgs_enctypes = rc4-hmac des3-hmac-sha1 des-cbc-crc
[realms]
DOMAN.LOCAL = {
kdc = dc1.domain.local
admin_server = dc1.domain.local
kpasswd_server = dc1.domain.local
default_domain = DOMAN.LOCAL
}
[domain_realm]
.domain.local = DOMAN.LOCAL
domain.local = DOMAN.LOCAL
[logging]
default = FILE:/var/log/krb5lib.log


тут же можно проверить:
# kinit Administrator
Password for Administrator@DOMAIN.LOCAL
#


Если ничего не сказало, скорей всего все замечательно.
Проверить можно командой klist
# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: Administrator@DOMAIN.LOCAL

Valid starting Expires Service principal
00/00/00 17:48:09 00/00/00 00:28:09 krbtgt/DOMAIN.LOCALU@DOMAIN.LOCAL


Все отлично! Мы получили тикет от Kerberos-сервера.

Устанавливаем Самбу
# USE="kerberos ldap ads winbind" emerge net-fs/samba

Настраиваем:
# nano -w /etc/samba/smb.conf
[global]
workgroup = DOMAN
netbios name = SSHHOST
server string = Samba Server %v
load printers = no
log file = /var/log/samba/log.%m
max log size = 50
hosts allow = 192.168.1. 127.
hosts deny = 0.0.0.0/0
encrypt passwords = yes
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
dns proxy = no
smb ports = 139
security = ADS
realm = DOMAN.LOCAL
password server = dc1.domain.local
# winbind separator = /
idmap uid = 10000-20000
idmap gid = 10000-20000
winbind enum users = yes
winbind enum groups = yes
template homedir = /home/%D/%U
template shell = /bin/bash
client use spnego = yes
client ntlmv2 auth = yes
winbind use default domain = yes
restrict anonymous = 2
domain master = no
local master = no
preferred master = no
os level = 0
disable netbios = no
dos charset = ASCII
unix charset = UTF8
display charset = UTF8
use kerberos keytab = true


Содаем директорию для домашних каталогов пользователей домена:
# mkdir /home/DOMAIN

продолжаем издеваться над самбой. добавляем демон winbind:
# nano -w /etc/conf.d/samba
daemon_list="smbd nmbd winbind"


Стартуем:
# /etc/init.d/samba start

Присоединяемся к домену:
# net ads join -U Administrator
вводим пароль администратора и видим:
Using short domain name -- DOMAIN
Joined 'SSHHOST' to realm 'DOMAIN.LOCAL'
Мы в домене!


тут мне портебовалось перезагрузиться

можно проверить как работает:
# wbinfo -u
Выведет список всех пользователей домена

настраиваем авторизацию:
# mv /etc/pam.d/system-auth{,-old}
# ls -s /etc/pam.d/system-auth-winbind /etc/pam.d/system-auth


правим /etc/nsswitch.conf
# nano -w /etc/nsswitch.conf
passwd: compat winbind
shadow: compat winbind
group: compat winbind


проверим аутентификацию:
# getent passwd
видим passwd с доменными пользователями? Значит все работает.

Здесь можно уже проверить сможет ли доменный пользователь войти в систему:
# ssh -l domainuser sshhost.domain.local

Добавляем в автозагрузку:
# rc-update add samba default

теперь сгенерируем файл keytab:
# net ads keytab create
ничего не выдало? так и надо, у нас должен появится файл /etc/krb5.keytab. Это наш «постоянный» пропуск в домен.
Используя keytab мы можем запрашивать тикеты для нашего хоста не вводя пароль:
# kinit -k -t /etc/krb5.keytab SSHHOST$
Можно добавитмь эту строку к cron.

Настроим OpenLDAP
# nano -w /etc/openldap/ldap.conf
BASE dc=DOMAIN, dc=LOCAL
URI ldap://dc1.domain.local
HOST dc1
SIZELIMIT 12
TIMELIMIT 15
DEREF never


пересоберем OpenSSH
# USE="kerberos ldap" emerge --newuse openssh

включим опции в /etc/ssh/sshd_config
# nano -w /etc/ssh/sshd_config
GSSAPIAuthentication yes


Перезапустим
# /etc/init.d/sshd restart

Готово!



простой PuTTY не поддерживает GSSAPI/SSPI. Так что нужен патченый
«Из коробки» заработал клиент от Certified Security Solutions: www.centrify.com/resources/putty.asp
для этого портебовалась установка MIT Kerberos for Windows: sweb.cz/v_t_m/#putty

Другие клиенты можно посмотреть на этой странице: www.chiark.greenend.org.uk/~sgtatham/putty/links.html

Если будете вводить логин вручную, то пишите его так как он выставлен в переменной %UserName%
Tags:
Hubs:
+7
Comments11

Articles