На сцСнС вновь Π»Π°ΡƒΡ€Π΅Π°Ρ‚Ρ‹ ΠΌΠ΅ΠΆΠ΄ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½Ρ‹Ρ… конкурсов SSH ΠΈ sudo. Под рукодством заслуТСнного Π΄ΠΈΡ€ΠΈΠΆΠ΅Ρ€Π° Active Directory

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ‡Π΅ΡΠΊΠΈ слоТилось, Ρ‡Ρ‚ΠΎ sudo ΠΏΡ€Π°Π²Π° Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ содСрТимым Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ· /etc/sudoers.d ΠΈ visudo, Π° авторизация ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Π°ΠΌ вСлась с использованиСм ~/.ssh/authorized_keys. Однако с ростом инфраструктуры Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ этими ΠΏΡ€Π°Π²Π°ΠΌΠΈ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎ. На сСгодняшний дСнь Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСсколько:

  • БистСма управлСния ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ β€” Chef, Puppet, Ansible, Salt
  • Active Directory + sssd
  • Π Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Π΅ извращСния Π² Π²ΠΈΠ΄Π΅ скриптов ΠΈ Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ рСдактирования Ρ„Π°ΠΉΠ»ΠΎΠ²

На ΠΌΠΎΠΉ ΡΡƒΠ±ΡŠΠ΅ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ взгляд, ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ управлСния являСтся всС-Ρ‚Π°ΠΊΠΈ связка Active Directory + sssd. ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π²ΠΎΡ‚ Π² Ρ‡Π΅ΠΌ:

  • Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π•Π΄ΠΈΠ½Ρ‹ΠΉ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.
  • Π Π°Π·Π΄Π°Ρ‡Π° ΠΏΡ€Π°Π² sudo сводится ΠΊ добавлСнию ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π³Ρ€ΡƒΠΏΠΏΡƒ бСзопасности.
  • Π’ случаС Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Linux-систСм Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ОБ ΠΏΡ€ΠΈ использовании систСм ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ.

БСгодняшняя ΡΡŽΠΈΡ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ посвящСна ΠΈΠΌΠ΅Π½Π½ΠΎ связкС Active Directory + sssd для управлСния ΠΏΡ€Π°Π²Π°ΠΌΠΈ sudo ΠΈ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ΠΌ ssh ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π² Π΅Π΄ΠΈΠ½ΠΎΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ.
Π˜Ρ‚Π°ΠΊ, Π·Π°Π» застыл Π² напряТСнном ΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΠΈ, Π΄ΠΈΡ€ΠΈΠΆΠ΅Ρ€ поднял ΠΏΠ°Π»ΠΎΡ‡ΠΊΡƒ, оркСстр приготовился.
ΠŸΠΎΠ΅Ρ…Π°Π»ΠΈ.

Π”Π°Π½ΠΎ:
β€” Π”ΠΎΠΌΠ΅Π½ Active Directory testopf.local Π½Π° Windows Server 2012 R2.
β€” Linux хост ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Centos 7
β€” НастроСнная авторизация с использованиСм sssd
Оба Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ вносят измСнСния Π² схСму Active Directory, поэтому провСряСм всС Π½Π° тСстовом ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ‚ΠΎΠΌ вносим измСнСния Π² Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ инфраструктуру. Π₯ΠΎΡ‡Ρƒ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ β€” всС измСнСния Ρ‚ΠΎΡ‡Π΅Ρ‡Π½Ρ‹Π΅ ΠΈ, ΠΏΠΎ сути, Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ лишь Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΈ классы.

ДСйствиС 1: ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ sudo ролями Ρ‡Π΅Ρ€Π΅Π· Active Directory.

Для Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ схСмы Active Directory Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ послСдний Ρ€Π΅Π»ΠΈΠ· sudo β€” 1.8.27 Π½Π° сСгодняшний дСнь. РаспаковываСм, ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ Ρ„Π°ΠΉΠ» schema.ActiveDirectory ΠΈΠ· ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ./doc Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π΄ΠΎΠΌΠ΅Π½Π°. Из ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки с ΠΏΡ€Π°Π²Π°ΠΌΠΈ администратора ΠΈΠ· Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, ΠΊΡƒΠ΄Π° скопировали Ρ„Π°ΠΉΠ», запускаСм:
ldifde -i -f schema.ActiveDirectory -c dc=X dc=testopf,dc=local
(НС Π·Π°Π±Ρ‹Π²Π°Π΅ΠΌ ΠΏΠΎΠ΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ свои значСния)
ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ adsiedit.msc ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ ΠΊ контСксту ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ:
Π’ ΠΊΠΎΡ€Π½Π΅ Π΄ΠΎΠΌΠ΅Π½Π° создаСм ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ sudoers. (Π‘ΡƒΡ€ΠΆΡƒΠΈΠ½Ρ‹ ΡƒΠΏΠΎΡ€Π½ΠΎ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² этом ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π΄Π΅ΠΌΠΎΠ½ sssd ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ поиск Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ sudoRole ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Однако, послС Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π΄Π΅Π±Π°Π³Π° ΠΈ изучСния Π»ΠΎΠ³ΠΎΠ², Π±Ρ‹Π»ΠΎ выявлСно, Ρ‡Ρ‚ΠΎ поиск производится ΠΏΠΎ всСму Π΄Π΅Ρ€Π΅Π²Ρƒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°.)
Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π² ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΉ классу sudoRole. Имя ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½ΠΎ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ слуТит ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ для ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ.
Π‘Ρ€Π΅Π΄ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… доступных Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΈΠ· Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ схСмы основными ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:

  • sudoCommand β€” опрСдСляСт, ΠΊΠ°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹ ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ Π½Π° хостС.
  • sudoHost β€” опрСдСляСт для ΠΊΠ°ΠΊΠΈΡ… хостов примСняСтся данная Ρ€ΠΎΠ»ΡŒ. ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Π½ΠΎ ΠΊΠ°ΠΊ ALL, Ρ‚Π°ΠΊ ΠΈ для ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ хоста ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ. Π’Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ использованиС маски.
  • sudoUser β€” ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ, ΠΊΠ°ΠΊΠΈΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ sudo.
    Π’ случаС указания Π³Ρ€ΡƒΠΏΠΏΡ‹ бСзопасности, Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈΠΌΠ΅Π½ΠΈ добавляСм Π·Π½Π°ΠΊ β€œ%”. Если Π² ΠΈΠΌΠ΅Π½ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹, Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ Π½Π΅ ΠΎ Ρ‡Π΅ΠΌ. Будя ΠΏΠΎ Π»ΠΎΠ³Π°ΠΌ, Π·Π°Π΄Π°Ρ‡Ρƒ экранирования ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ² Π±Π΅Ρ€Π΅Ρ‚ Π½Π° сСбя ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ sssd.

На сцСнС вновь Π»Π°ΡƒΡ€Π΅Π°Ρ‚Ρ‹ ΠΌΠ΅ΠΆΠ΄ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½Ρ‹Ρ… конкурсов SSH ΠΈ sudo. Под рукодством заслуТСнного Π΄ΠΈΡ€ΠΈΠΆΠ΅Ρ€Π° Active Directory
рис 1. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ sudoRole Π² ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠΈ sudoers Π² ΠΊΠΎΡ€Π½Π΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°

На сцСнС вновь Π»Π°ΡƒΡ€Π΅Π°Ρ‚Ρ‹ ΠΌΠ΅ΠΆΠ΄ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½Ρ‹Ρ… конкурсов SSH ΠΈ sudo. Под рукодством заслуТСнного Π΄ΠΈΡ€ΠΈΠΆΠ΅Ρ€Π° Active Directory
рис 2. ЧлСнство Π² Π³Ρ€ΡƒΠΏΠΏΠ°Ρ… бСзопасности, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π² sudoRole-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ….

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ настройка производится Π½Π° сторонС Linux.
Π’ Ρ„Π°ΠΉΠ»Π΅ /etc/nsswitch.conf добавляСм Π² ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π° строку:

sudoers: files sss

Π’ Ρ„Π°ΠΉΠ»Π΅ /etc/sssd/sssd.conf Π² сСкции [sssd] Π² сСрвисы добавляСм sudo

cat /etc/sssd/sssd.conf | grep services
services = nss, pam, sudo

ПослС всСх ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ кэш sssd Π΄Π΅ΠΌΠΎΠ½Π°. АвтоматичСскоС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ производится Ρ€Π°Π· Π² 6 часов, Π½ΠΎ Π·Π°Ρ‡Π΅ΠΌ Π½Π°ΠΌ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΆΠ΄Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡƒΠΆΠ΅ сСйчас.

sss_cache -E

Π§Π°ΡΡ‚Π΅Π½ΡŒΠΊΠΎ случаСтся Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ очистка кэша Π½Π΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚. Π’ΠΎΠ³Π΄Π° останавливаСм сСрвис, чистим Π±Π°Π·Ρƒ, стартуСм сСрвис.

service sssd stop
rm -rf /var/lib/sss/db/*
service sssd start

ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ ΠΏΠΎΠ΄ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΈ провСряСм, Ρ‡Ρ‚ΠΎ Π΅ΠΌΡƒ доступно ΠΈΠ·-ΠΏΠΎΠ΄ sudo:

su user1
[user1@testsshad log]$ id
uid=1109801141(user1) gid=1109800513(domain users) groups=1109800513(domain users),1109801132(admins_)
[user1@testsshad log]$ sudo -l
[sudo] password for user1:
Matching Defaults entries for user1 on testsshad:
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin,
    env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
    env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
    env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
    env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
    env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
    secure_path=/sbin:/bin:/usr/sbin:/usr/bin

User user1 may run the following commands on testsshad:
    (root) /usr/bin/ls, /usr/bin/cat

Π’ΠΎ ΠΆΠ΅ самоС ΠΏΡ€ΠΎΠ΄Π΅Π»Ρ‹Π²Π°Π΅ΠΌ со Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ нашим ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ:

su user2
[user2@testsshad log]$ id
uid=1109801142(user2) gid=1109800513(domain users) groups=1109800513(domain users),1109801138(sudo_root)
[user2@testsshad log]$ sudo -l
Matching Defaults entries for user2 on testsshad:
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin,
    env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
    env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
    env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
    env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
    env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
    secure_path=/sbin:/bin:/usr/sbin:/usr/bin

User user2 may run the following commands on testsshad:
    (root) ALL

ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ позволяСт Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Ρ€ΠΎΠ»ΠΈ sudo для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π³Ρ€ΡƒΠΏΠΏ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.

Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈ использованиС ssh ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π² Active Directory

ΠŸΡ€ΠΈ нСбольшом Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΈ схСмы Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡ΠΈ ssh Π² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Active Directory ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΏΡ€ΠΈ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° Linux хостах.

Π”ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ настроСна авторизация Ρ‡Π΅Ρ€Π΅Π· sssd.
ДобавляСм Π½ΡƒΠΆΠ½Ρ‹ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ PowerShell скрипта.
AddsshPublicKeyAttribute.ps1Function New-AttributeID {
$Prefix=Β«1.2.840.113556.1.8000.2554Β»
$GUID=[System.Guid]::NewGuid().ToString()
$Parts=@()
$Parts+=[UInt64]::Parse($guid.SubString(0,4),Β«AllowHexSpecifierΒ»)
$Parts+=[UInt64]::Parse($guid.SubString(4,4),Β«AllowHexSpecifierΒ»)
$Parts+=[UInt64]::Parse($guid.SubString(9,4),Β«AllowHexSpecifierΒ»)
$Parts+=[UInt64]::Parse($guid.SubString(14,4),Β«AllowHexSpecifierΒ»)
$Parts+=[UInt64]::Parse($guid.SubString(19,4),Β«AllowHexSpecifierΒ»)
$Parts+=[UInt64]::Parse($guid.SubString(24,6),Β«AllowHexSpecifierΒ»)
$Parts+=[UInt64]::Parse($guid.SubString(30,6),Β«AllowHexSpecifierΒ»)
$oid=[String]::Format(«{0}.{1}.{2}.{3}.{4}.{5}.{6}.{7}»,$prefix,$Parts[0],
$Parts[1],$Parts[2],$Parts[3],$Parts[4],$Parts[5],$Parts[6])
$oid
}
$schemaPath = (Get-ADRootDSE).schemaNamingContext
$oid = New-AttributeID
$attributes = @{
lDAPDisplayName = ‘sshPublicKey’;
attributeId = $oid;
oMSyntax = 22;
attributeSyntax = Β«2.5.5.5Β»;
isSingleValued = $true;
adminDescription = ‘User Public key for SSH login’;
}

New-ADObject -Name sshPublicKey -Type attributeSchema -Path $schemapath -OtherAttributes $attributes
$userSchema = get-adobject -SearchBase $schemapath -Filter ‘name -eq Β«userΒ»’
$userSchema | Set-ADObject -Add @{mayContain = ‘sshPublicKey’}

ПослС добавлСния Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ слуТбу Active Directory Domain Services.
ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Active Directory. Π›ΡŽΠ±Ρ‹ΠΌ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ для Вас способом Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΠ°Ρ€Ρƒ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ для ssh ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.
ЗапускаСм PuttyGen, Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ ΠΊΠ½ΠΎΠΏΠΎΡ‡ΠΊΡƒ Β«GenerateΒ» ΠΈ судороТно Π΅Π»ΠΎΠ·ΠΈΠΌ ΠΌΡ‹ΡˆΡŒΡŽ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… пустой области.
По Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡŽ процСсса ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΈ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ, Π·Π°Π»ΠΈΡ‚ΡŒ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Π² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Active Directory ΠΈ Π½Π°ΡΠ»Π°ΠΆΠ΄Π°Ρ‚ΡŒΡΡ процСссом. Однако ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ· ΠΎΠΊΠ½Π° «Public key for pasting into OpenSSH authorized_keys file:«.
На сцСнС вновь Π»Π°ΡƒΡ€Π΅Π°Ρ‚Ρ‹ ΠΌΠ΅ΠΆΠ΄ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½Ρ‹Ρ… конкурсов SSH ΠΈ sudo. Под рукодством заслуТСнного Π΄ΠΈΡ€ΠΈΠΆΠ΅Ρ€Π° Active Directory
ДобавляСм ΠΊΠ»ΡŽΡ‡ Π² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.
Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ 1 β€” GUI:
На сцСнС вновь Π»Π°ΡƒΡ€Π΅Π°Ρ‚Ρ‹ ΠΌΠ΅ΠΆΠ΄ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½Ρ‹Ρ… конкурсов SSH ΠΈ sudo. Под рукодством заслуТСнного Π΄ΠΈΡ€ΠΈΠΆΠ΅Ρ€Π° Active Directory
Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ 2 β€” PowerShell:
get-aduser user1 | set-aduser -add @{sshPublicKey = 'AAAAB...XAVnX9ZRJJ0p/Q=='}
Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚: ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ с Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΌ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ sshPublicKey, настроСнный ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Putty для Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Π°ΠΌ. ΠžΡΡ‚Π°Π΅Ρ‚ΡΡ ΠΎΠ΄ΠΈΠ½ нСбольшой ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠ°ΠΊ ΠΆΠ΅ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΄Π΅ΠΌΠΎΠ½ sshd Π²Ρ‹Ρ‚ΡΠ³ΠΈΠ²Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹ΠΉ Π½Π°ΠΌ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ ΠΈΠ· Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π‘ этим ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ справляСтся нСбольшой скрипт, Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹ΠΉ Π½Π° просторах бурТуйского ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π°.

cat /usr/local/bin/fetchSSHKeysFromLDAP
#!/bin/sh
ldapsearch -h testmdt.testopf.local -xb "dc=testopf,dc=local" '(sAMAccountName='"${1%@*}"')' -D [email protected] -w superSecretPassword 'sshPublicKey' | sed -n '/^ /{H;d};/sshPublicKey:/x;$g;s/n *//g;s/sshPublicKey: //gp'

ВыставляСм Π½Π° Π½Π΅Π³ΠΎ ΠΏΡ€Π°Π²Π° 0500 для root.

chmod 0500  /usr/local/bin/fetchSSHKeysFromLDAP

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для Π±ΠΈΠ½Π΄Π° ΠΊ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ учСтная запись администратора. Π’ Π±ΠΎΠ΅Π²Ρ‹Ρ… условиях Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ учСтная запись с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΏΡ€Π°Π².
МСня Π»ΠΈΡ‡Π½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ смущал ΠΌΠΎΠΌΠ΅Π½Ρ‚ пароля Π² чистом Π²ΠΈΠ΄Π΅ Π² скриптС, нСсмотря Π½Π° выставлСнныС ΠΏΡ€Π°Π²Π°.
Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ:

  • Π‘ΠΎΡ…Ρ€Π°Π½ΡΡŽ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»:
    echo -n Supersecretpassword > /usr/local/etc/secretpass

  • Π’Ρ‹ΡΡ‚Π°Π²Π»ΡΡŽ ΠΏΡ€Π°Π²Π° Π½Π° Ρ„Π°ΠΉΠ» 0500 для root
    chmod 0500 /usr/local/etc/secretpass

  • МСняю ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ запуска ldapsearch: ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -w superSecretPassword мСняю Π½Π° -y /usr/local/etc/secretpass

Π€ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ Π°ΠΊΠΊΠΎΡ€Π΄ΠΎΠΌ Π² сСгодняшнСй ΡΡŽΠΈΡ‚Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ sshd_config

cat /etc/ssh/sshd_config | egrep -v -E "#|^$" | grep -E "AuthorizedKeysCommand|PubkeyAuthe"
PubkeyAuthentication yes
AuthorizedKeysCommand /usr/local/bin/fetchSSHKeysFromLDAP
AuthorizedKeysCommandUser root

Как слСдствиС, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ настроСнной Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Π°ΠΌ Π² ssh ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅:

  1. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΊ сСрвСру, указывая свой Π»ΠΎΠ³ΠΈΠ½.
  2. Π”Π΅ΠΌΠΎΠ½ sshd Ρ‡Π΅Ρ€Π΅Π· скрипт вытягиваСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° ΠΈΠ· Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² Active Directory ΠΈ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Π°ΠΌ.
  3. Π”Π΅ΠΌΠΎΠ½ sssd ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΡƒΡŽ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π° основании принадлСТности ΠΊ Π³Ρ€ΡƒΠΏΠΏΠ΅. Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅! Если таковая Π½Π΅ сконфигурирована, Ρ‚ΠΎ любой ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎΠΌΠ΅Π½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ доступ ΠΊ хосту.
  4. ΠŸΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ sudo происходит поиск Π΄Π΅ΠΌΠΎΠ½ΠΎΠΌ sssd Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Active Directory Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ Ρ€ΠΎΠ»Π΅ΠΉ. ΠŸΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Ρ€ΠΎΠ»Π΅ΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ΡΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΈ члСнство ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² Π³Ρ€ΡƒΠΏΠΏΠ΅ (Ссли sudoRoles настроСны Π½Π° использовании Π³Ρ€ΡƒΠΏΠΏ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ)

Π˜Ρ‚ΠΎΠ³.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΊΠ»ΡŽΡ‡ΠΈ хранятся Π² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Active Directory, Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ sudo β€” Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ, доступ ΠΊ хостам Linux ΠΏΠΎ Π΄ΠΎΠΌΠ΅Π½Π½Ρ‹ΠΌ ΡƒΡ‡Π΅Ρ‚Π½Ρ‹ΠΌ записям осущСствляСтся ΠΏΡƒΡ‚Π΅ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ принадлСТности ΠΊ Π³Ρ€ΡƒΠΏΠΏΠ΅ Active Directory.
Π€ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²Π·ΠΌΠ°Ρ… дириТСрской ΠΏΠ°Π»ΠΎΡ‡ΠΊΠΈ β€” ΠΈ Π·Π°Π» Π·Π°ΠΌΠΈΡ€Π°Π΅Ρ‚ Π² Π±Π»Π°Π³ΠΎΠ³ΠΎΠ²Π΅ΠΉΠ½ΠΎΠΉ Ρ‚ΠΈΡˆΠΈΠ½Π΅.

РСсуры, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈ написании:

Sudo via Active Directory
Ssh keys via Active Directory
Powershell script, adding an atribute to Active Directory Schema
sudo stable release

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com