๊ตญ์ œ ๋Œ€ํšŒ SSH์™€ sudo์˜ ์šฐ์Šน์ž๊ฐ€ ๋‹ค์‹œ ๋ฌด๋Œ€์— ์˜ฌ๋ž์Šต๋‹ˆ๋‹ค. ์ €๋ช…ํ•œ Active Directory ์ง€ํœ˜์ž๊ฐ€ ์ฃผ๋„ํ•ฉ๋‹ˆ๋‹ค.

์—ญ์‚ฌ์ ์œผ๋กœ sudo ๊ถŒํ•œ์€ ๋‹ค์Œ ํŒŒ์ผ์˜ ๋‚ด์šฉ์— ๋”ฐ๋ผ ๊ฒฐ์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. /etc/sudoers.d ะธ ์‹œ๊ฐ ์žฅ์• ์ธ, ํ‚ค ์Šน์ธ์€ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ~/.ssh/authorized_keys. ๊ทธ๋Ÿฌ๋‚˜ ์ธํ”„๋ผ๊ฐ€ ์„ฑ์žฅํ•จ์— ๋”ฐ๋ผ ์ด๋Ÿฌํ•œ ๊ถŒํ•œ์„ ์ค‘์•™์—์„œ ๊ด€๋ฆฌํ•˜๋ ค๋Š” ์š•๊ตฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜๋‚ ์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์†”๋ฃจ์…˜ ์˜ต์…˜์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ตฌ์„ฑ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ - ์š”๋ฆฌ์‚ฌ, ์ธํ˜•, ์ฑ…์ž„๊ฐ์žˆ๋Š”, ์†Œ๊ธˆ
  • Active Directory์˜ + SSD
  • ์Šคํฌ๋ฆฝํŠธ ๋ฐ ์ˆ˜๋™ ํŒŒ์ผ ํŽธ์ง‘ ํ˜•ํƒœ์˜ ๋‹ค์–‘ํ•œ ์™œ๊ณก

๋‚ด ์ฃผ๊ด€์ ์ธ ์˜๊ฒฌ์œผ๋กœ๋Š” ์ค‘์•™ ์ง‘์ค‘์‹ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์ตœ์„ ์˜ ์„ ํƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์กฐํ•ฉ์ž…๋‹ˆ๋‹ค Active Directory์˜ + SSD. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์˜ ์žฅ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ง„์ •ํ•œ ๋‹จ์ผ ์ค‘์•™ ์‚ฌ์šฉ์ž ๋””๋ ‰ํ„ฐ๋ฆฌ์ž…๋‹ˆ๋‹ค.
  • ๊ถŒ๋ฆฌ์˜ ๋ถ„๋ฐฐ sudo๋Š” ํŠน์ • ๋ณด์•ˆ ๊ทธ๋ฃน์— ์‚ฌ์šฉ์ž๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ๋‹ค์–‘ํ•œ Linux ์‹œ์Šคํ…œ์˜ ๊ฒฝ์šฐ ๊ตฌ์„ฑ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•  ๋•Œ OS๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•œ ์ถ”๊ฐ€ ๊ฒ€์‚ฌ๋ฅผ ๋„์ž…ํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ค๋Š˜์˜ ์Šค์œ„ํŠธ๋Š” ํŠนํžˆ ์—ฐ๊ฒฐ์— ์ „๋…ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค Active Directory์˜ + SSD ๊ถŒ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด sudo๋Š” ๊ทธ๋ฆฌ๊ณ  ์ €์žฅ SSH ๋‹จ์ผ ์ €์žฅ์†Œ์˜ ํ‚ค.
๊ทธ๋ž˜์„œ ํ™€์€ ๊ธด์žฅ๋œ ์นจ๋ฌต ์†์— ์–ผ์–ด๋ถ™์—ˆ๊ณ  ์ง€ํœ˜์ž๋Š” ์ง€ํœ˜๋ด‰์„ ๋“ค์—ˆ๊ณ  ์˜ค์ผ€์ŠคํŠธ๋ผ๋Š” ์ค€๋น„๋ฅผ ๋งˆ์ณค์Šต๋‹ˆ๋‹ค.
์–ด์„œ.

๊ฐ์•ˆํ•  ๋•Œ :
โ€” Active Directory ๋„๋ฉ”์ธ testopf.local ์œˆ๋„์šฐ ์„œ๋ฒ„ 2012 R2์—์„œ.
โ€” Centos 7์„ ์‹คํ–‰ํ•˜๋Š” Linux ํ˜ธ์ŠคํŠธ
โ€” ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์„ฑ๋œ ์ธ์ฆ SSD
๋‘ ์†”๋ฃจ์…˜ ๋ชจ๋‘ ์Šคํ‚ค๋งˆ๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. Active Directory์˜, ๋”ฐ๋ผ์„œ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ๋ชจ๋“  ๊ฒƒ์„ ํ™•์ธํ•œ ๋‹ค์Œ ์ž‘์—… ์ธํ”„๋ผ๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋Œ€์ƒ์œผ๋กœ ์ง€์ •๋˜์—ˆ์œผ๋ฉฐ ์‹ค์ œ๋กœ ํ•„์š”ํ•œ ์†์„ฑ๊ณผ ํด๋ž˜์Šค๋งŒ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค๋Š” ์ ์„ ๋ง์”€๋“œ๋ฆฌ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์ž‘์—… 1: ์ œ์–ด sudo๋Š” ์—ญํ• ์„ ํ†ตํ•ด Active Directory์˜.

ํšŒ๋กœ๋ฅผ ํ™•์žฅํ•˜๋ ค๋ฉด Active Directory์˜ ์ตœ์‹  ๋ฆด๋ฆฌ์Šค๋ฅผ ๋‹ค์šด๋กœ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค sudo๋Š” โ€” ์˜ค๋Š˜ ๊ธฐ์ค€์œผ๋กœ 1.8.27์ž…๋‹ˆ๋‹ค. ์••์ถ•์„ ํ’€๊ณ  ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜์„ธ์š” ์Šคํ‚ค๋งˆ.ActiveDirectory ./doc ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ๋„๋ฉ”์ธ ์ปจํŠธ๋กค๋Ÿฌ๋กœ. ํŒŒ์ผ์ด ๋ณต์‚ฌ๋œ ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์œผ๋กœ ๋ช…๋ น์ค„์—์„œ ๋‹ค์Œ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
ldifde -i -f schema.ActiveDirectory -c dc=X dc=testopf,dc=local
(๊ท€ํ•˜์˜ ๊ฐ’์„ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์‹ญ์‹œ์˜ค)
์˜คํ”ˆ adsiedit.msc ๊ธฐ๋ณธ ์ปจํ…์ŠคํŠธ์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
๋„๋ฉ”์ธ ๋ฃจํŠธ์— ๋””๋น„์ „ ์ƒ์„ฑ sudoers. (๋ถ€๋ฅด์ฃผ์•„์ง€๋Š” ์•…๋งˆ๊ฐ€ ์ด ๋ถ€๋Œ€์— ์žˆ๋‹ค๊ณ  ๊ณ ์ง‘์Šค๋Ÿฝ๊ฒŒ ์ฃผ์žฅํ•œ๋‹ค. SSD ํ•ญ๋ชฉ์„ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. sudoRole ์‚ฌ๋ฌผ. ๊ทธ๋Ÿฌ๋‚˜ ์ƒ์„ธ ๋””๋ฒ„๊น…์„ ์ผœ๊ณ  ๋กœ๊ทธ๋ฅผ ์‚ดํŽด๋ณธ ๊ฒฐ๊ณผ ๋””๋ ‰ํ† ๋ฆฌ ํŠธ๋ฆฌ ์ „์ฒด์— ๊ฑธ์ณ ๊ฒ€์ƒ‰์ด ์ด๋ฃจ์–ด์ง„ ๊ฒƒ์œผ๋กœ ๋“œ๋Ÿฌ๋‚ฌ์Šต๋‹ˆ๋‹ค.)
Division์˜ ํด๋ž˜์Šค์— ์†ํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ๊ฐœ์ฒด๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. sudoRole. ์ด๋ฆ„์€ ํŽธ๋ฆฌํ•œ ์‹๋ณ„์„ ์œ„ํ•ด์„œ๋งŒ ์‚ฌ์šฉ๋˜๋ฏ€๋กœ ์ž„์˜๋กœ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์Šคํ‚ค๋งˆ ํ™•์žฅ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์†์„ฑ ์ค‘ ์ฃผ์š” ์†์„ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • sudo๋ช…๋ น โ€” ํ˜ธ์ŠคํŠธ์—์„œ ์‹คํ–‰์ด ํ—ˆ์šฉ๋˜๋Š” ๋ช…๋ น์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
  • sudoHost โ€” ์ด ์—ญํ• ์ด ์ ์šฉ๋˜๋Š” ํ˜ธ์ŠคํŠธ๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“ , ๊ฐœ๋ณ„ ํ˜ธ์ŠคํŠธ์˜ ๊ฒฝ์šฐ ์ด๋ฆ„์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋งˆ์Šคํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • sudo์‚ฌ์šฉ์ž โ€” ์‹คํ–‰์ด ํ—ˆ์šฉ๋œ ์‚ฌ์šฉ์ž๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. sudo๋Š”.
    ๋ณด์•ˆ ๊ทธ๋ฃน์„ ์ง€์ •ํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋ฆ„ ์‹œ์ž‘ ๋ถ€๋ถ„์— "%" ๊ธฐํ˜ธ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฃน๋ช…์— ๊ณต๋ฐฑ์ด ์žˆ์–ด๋„ ๊ฑฑ์ •ํ•˜์ง€ ์•Š์œผ์…”๋„ ๋ฉ๋‹ˆ๋‹ค. ๋กœ๊ทธ์— ๋”ฐ๋ฅด๋ฉด ๊ณต๊ฐ„์„ ํƒˆ์ถœํ•˜๋Š” ์ž‘์—…์€ ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ์˜ํ•ด ์ธ๊ณ„๋ฉ๋‹ˆ๋‹ค. SSD.

๊ตญ์ œ ๋Œ€ํšŒ SSH์™€ sudo์˜ ์šฐ์Šน์ž๊ฐ€ ๋‹ค์‹œ ๋ฌด๋Œ€์— ์˜ฌ๋ž์Šต๋‹ˆ๋‹ค. ์ €๋ช…ํ•œ Active Directory ์ง€ํœ˜์ž๊ฐ€ ์ฃผ๋„ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ฆผ 1. ๋””๋ ‰ํ† ๋ฆฌ ๋ฃจํŠธ์— ์žˆ๋Š” sudoers ํ•˜์œ„ ๋ถ€๋ฌธ์˜ sudoRole ๊ฐ์ฒด

๊ตญ์ œ ๋Œ€ํšŒ SSH์™€ sudo์˜ ์šฐ์Šน์ž๊ฐ€ ๋‹ค์‹œ ๋ฌด๋Œ€์— ์˜ฌ๋ž์Šต๋‹ˆ๋‹ค. ์ €๋ช…ํ•œ Active Directory ์ง€ํœ˜์ž๊ฐ€ ์ฃผ๋„ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ฆผ 2. sudoRole ๊ฐ์ฒด์— ์ง€์ •๋œ ๋ณด์•ˆ ๊ทธ๋ฃน์˜ ๋ฉค๋ฒ„์‹ญ.

๋‹ค์Œ ์„ค์ •์€ Linux ์ธก์—์„œ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.
ํŒŒ์ผ์—์„œ /etc/nsswitch.conf ํŒŒ์ผ ๋์— ์ค„์„ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.

sudoers: files sss

ํŒŒ์ผ์—์„œ /etc/sssd/sssd.conf ์„น์…˜์—์„œ [SSD] ์„œ๋น„์Šค์— ์ถ”๊ฐ€ sudo๋Š”

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

๋ชจ๋“  ์ž‘์—…์ด ๋๋‚˜๋ฉด SSD ๋ฐ๋ชฌ ์บ์‹œ๋ฅผ ์ง€์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž๋™ ์—…๋ฐ์ดํŠธ๋Š” 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 ์—ญํ• ์„ ์ค‘์•™์—์„œ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Active Directory์— SSH ํ‚ค ์ €์žฅ ๋ฐ ์‚ฌ์šฉ

์ฒด๊ณ„๋ฅผ ์•ฝ๊ฐ„ ํ™•์žฅํ•˜๋ฉด SSH ํ‚ค๋ฅผ Active Directory ์‚ฌ์šฉ์ž ์†์„ฑ์— ์ €์žฅํ•˜๊ณ  Linux ํ˜ธ์ŠคํŠธ์—์„œ ์ธ์ฆํ•  ๋•Œ ์ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SSD๋ฅผ ํ†ตํ•œ ์ธ์ฆ์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
PowerShell ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•„์ˆ˜ ์†์„ฑ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
shPublicKeyAttribute.ps1์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.ํ•จ์ˆ˜ New-AttributeID {
$Prefix="1.2.840.113556.1.8000.2554"
$GUID=[System.Guid]::NewGuid().ToString()
$๋ถ€ํ’ˆ=@()
$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 = ์ƒˆ ์†์„ฑID
$์†์„ฑ = @{
lDAPDisplayName = 'sshPublicKey';
์†์„ฑID = $oid;
oMS ๊ตฌ๋ฌธ = 22;
attributeSyntax = "2.5.5.5";
isSingleValued = $true;
adminDescription = 'SSH ๋กœ๊ทธ์ธ์„ ์œ„ํ•œ ์‚ฌ์šฉ์ž ๊ณต๊ฐœ ํ‚ค';
}

New-ADObject -Name sshPublicKey -Type attributeSchema -Path $schemapath -OtherAttributes $attributes
$userSchema = get-adobject -SearchBase $schemapath -Filter 'name -eq "user"'
$user์Šคํ‚ค๋งˆ | Set-ADObject - @{mayContain = 'sshPublicKey'} ์ถ”๊ฐ€

ํŠน์„ฑ์„ ์ถ”๊ฐ€ํ•œ ํ›„์—๋Š” Active Directory ๋„๋ฉ”์ธ ์„œ๋น„์Šค๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
Active Directory ์‚ฌ์šฉ์ž๋กœ ๋„˜์–ด๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ท€ํ•˜์—๊ฒŒ ํŽธ๋ฆฌํ•œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ SSH ์—ฐ๊ฒฐ์„ ์œ„ํ•œ ํ‚ค ์Œ์„ ์ƒ์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
PuttyGen์„ ์‹คํ–‰ํ•˜๊ณ  "์ƒ์„ฑ" ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ ๋‹ค์Œ ๋นˆ ์˜์—ญ ๋‚ด์—์„œ ๋งˆ์šฐ์Šค๋ฅผ ๋ฏธ์นœ ๋“ฏ์ด ์›€์ง์ž…๋‹ˆ๋‹ค.
ํ”„๋กœ์„ธ์Šค๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ๊ณต๊ฐœ ํ‚ค์™€ ๊ฐœ์ธ ํ‚ค๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ณต๊ฐœ ํ‚ค๋ฅผ Active Directory ์‚ฌ์šฉ์ž ์†์„ฑ์— ์—…๋กœ๋“œํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฆ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ, ๊ณต๊ฐœํ‚ค๋Š” "OpenSSHauthorized_keys ํŒŒ์ผ์— ๋ถ™์—ฌ๋„ฃ๊ธฐ ์œ„ํ•œ ๊ณต๊ฐœ ํ‚ค:".
๊ตญ์ œ ๋Œ€ํšŒ SSH์™€ sudo์˜ ์šฐ์Šน์ž๊ฐ€ ๋‹ค์‹œ ๋ฌด๋Œ€์— ์˜ฌ๋ž์Šต๋‹ˆ๋‹ค. ์ €๋ช…ํ•œ Active Directory ์ง€ํœ˜์ž๊ฐ€ ์ฃผ๋„ํ•ฉ๋‹ˆ๋‹ค.
์‚ฌ์šฉ์ž ์†์„ฑ์— ํ‚ค๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
์˜ต์…˜ 1 - GUI:
๊ตญ์ œ ๋Œ€ํšŒ SSH์™€ sudo์˜ ์šฐ์Šน์ž๊ฐ€ ๋‹ค์‹œ ๋ฌด๋Œ€์— ์˜ฌ๋ž์Šต๋‹ˆ๋‹ค. ์ €๋ช…ํ•œ Active Directory ์ง€ํœ˜์ž๊ฐ€ ์ฃผ๋„ํ•ฉ๋‹ˆ๋‹ค.
์˜ต์…˜ 2 - ํŒŒ์›Œ์…ธ:
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์œผ๋กœ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

chmod 0500  /usr/local/bin/fetchSSHKeysFromLDAP

์ด ์˜ˆ์—์„œ๋Š” ๊ด€๋ฆฌ์ž ๊ณ„์ •์„ ์‚ฌ์šฉํ•˜์—ฌ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋ฐ”์ธ๋”ฉํ•ฉ๋‹ˆ๋‹ค. ์ „ํˆฌ ์ƒํ™ฉ์—์„œ๋Š” ์ตœ์†Œํ•œ์˜ ๊ถŒ๋ฆฌ๋ฅผ ๊ฐ€์ง„ ๋ณ„๋„์˜ ๊ณ„์ •์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ๊ถŒํ•œ ์„ค์ •์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์Šคํฌ๋ฆฝํŠธ์— ์ˆœ์ˆ˜ํ•œ ํ˜•ํƒœ๋กœ ํ‘œ์‹œ๋˜๋Š” ์ˆœ๊ฐ„ ๋งค์šฐ ํ˜ผ๋ž€์Šค๋Ÿฌ์› ์Šต๋‹ˆ๋‹ค.
์†”๋ฃจ์…˜ ์˜ต์…˜ :

  • ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ณ„๋„์˜ ํŒŒ์ผ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
    echo -n Supersecretpassword > /usr/local/etc/secretpass

  • ๋ฃจํŠธ์— ๋Œ€ํ•œ ํŒŒ์ผ ๊ถŒํ•œ์„ 0500์œผ๋กœ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
    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 ๊ทธ๋ฃน์˜ ๋ฉค๋ฒ„์‹ญ์„ ํ™•์ธํ•˜์—ฌ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.
์ง€ํœ˜๋ด‰์˜ ๋งˆ์ง€๋ง‰ ๋ฌผ๊ฒฐ - ํ™€์€ ๊ฒฝ๊ฑดํ•œ ์นจ๋ฌต ์†์— ์–ผ์–ด ๋ถ™์Šต๋‹ˆ๋‹ค.

๊ธ€์“ฐ๊ธฐ์— ์‚ฌ์šฉ๋œ ๋ฆฌ์†Œ์Šค:

Active Directory๋ฅผ ํ†ตํ•œ Sudo
Active Directory๋ฅผ ํ†ตํ•œ SSH ํ‚ค
Powershell ์Šคํฌ๋ฆฝํŠธ, Active Directory ์Šคํ‚ค๋งˆ์— ์†์„ฑ ์ถ”๊ฐ€
sudo ์•ˆ์ • ๋ฆด๋ฆฌ์Šค

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€