์ฝ˜ํ…์ธ  ๋Œ€ํ‘œ ์ด๋ฏธ์ง€ - ๐Ÿ” FreeIPA๋กœ ์‹œ์ž‘ํ•˜๋Š” ํ†ตํ•ฉ ID ๊ด€๋ฆฌ ์†”๋ฃจ์…˜ ๊ตฌ์ถ• ์™„๋ฒฝ ๊ฐ€์ด๋“œ

๐Ÿ” FreeIPA๋กœ ์‹œ์ž‘ํ•˜๋Š” ํ†ตํ•ฉ ID ๊ด€๋ฆฌ ์†”๋ฃจ์…˜ ๊ตฌ์ถ• ์™„๋ฒฝ ๊ฐ€์ด๋“œ

์˜คํ”ˆ์†Œ์Šค๋กœ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ์ธ์ฆ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค์–ด๋ณด์ž! ๐Ÿš€

์•ˆ๋…•! ๐Ÿ‘‹ ํ˜น์‹œ ํšŒ์‚ฌ์—์„œ ์ง์›๋“ค์˜ ๊ณ„์ •์„ ๊ด€๋ฆฌํ•˜๋А๋ผ ๋จธ๋ฆฌ ์•„ํ”ˆ ์  ์žˆ์–ด? ๊ฐ ์„œ๋ฒ„๋งˆ๋‹ค ๋‹ค๋ฅธ ๋น„๋ฐ€๋ฒˆํ˜ธ, ํ‡ด์‚ฌ์ž ๊ณ„์ • ์ •๋ฆฌ, ๊ถŒํ•œ ๊ด€๋ฆฌ... ์ƒ๊ฐ๋งŒ ํ•ด๋„ ๋ณต์žกํ•˜์ง€? ์˜ค๋Š˜์€ ์ด๋Ÿฐ ๊ณ ๋ฏผ์„ ํ•œ ๋ฐฉ์— ํ•ด๊ฒฐํ•ด์ค„ FreeIPA๋ผ๋Š” ๋ฉ‹์ง„ ์นœ๊ตฌ๋ฅผ ์†Œ๊ฐœํ•ด์ค„๊ฒŒ! ๐ŸŽ‰

FreeIPA๋Š” ๋ฆฌ๋ˆ…์Šค ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ์ž ๊ณ„์ •, ์ธ์ฆ, ๊ถŒํ•œ์„ ์ค‘์•™์—์„œ ํ†ตํ•ฉ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์˜คํ”ˆ์†Œ์Šค ์†”๋ฃจ์…˜์ด์•ผ. ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด ์œˆ๋„์šฐ์˜ Active Directory ๊ฐ™์€ ๊ฑฐ๋ผ๊ณ  ๋ณด๋ฉด ๋ผ. ๊ทผ๋ฐ ์™„์ „ ๋ฌด๋ฃŒ๊ณ , ๋ฆฌ๋ˆ…์Šค ํ™˜๊ฒฝ์— ์ตœ์ ํ™”๋˜์–ด ์žˆ์ง€! ๐Ÿ˜Ž

FreeIPA ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ์ธ์ฆ ์‹œ์Šคํ…œ ๊ถŒํ•œ ์ œ์–ด ํ†ตํ•ฉ ID ๊ด€๋ฆฌ ๋ณด์•ˆ ๊ฐ•ํ™”

๐Ÿค” FreeIPA๊ฐ€ ๋ญ๊ธธ๋ž˜?

FreeIPA๋Š” Free Identity, Policy, Audit์˜ ์•ฝ์ž์•ผ. ์ด๋ฆ„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ์‹ ์›(Identity), ์ •์ฑ…(Policy), ๊ฐ์‚ฌ(Audit) ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ํ†ตํ•ฉ ์†”๋ฃจ์…˜์ด์ง€. Red Hat์ด ์ฃผ๋„ํ•˜๋Š” ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋กœ, RHEL(Red Hat Enterprise Linux)์ด๋‚˜ CentOS, Fedora ๊ฐ™์€ ๋ ˆ๋“œํ–‡ ๊ณ„์—ด ๋ฆฌ๋ˆ…์Šค์—์„œ ํŠนํžˆ ์ž˜ ๋™์ž‘ํ•ด. ๐Ÿง

๊ทผ๋ฐ ๋‹จ์ˆœํžˆ ๊ณ„์ • ๊ด€๋ฆฌ๋งŒ ํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ์•ผ. FreeIPA๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ฐ•๋ ฅํ•œ ์˜คํ”ˆ์†Œ์Šค ๊ธฐ์ˆ ๋“ค์„ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด๋†“์€ ํ†ตํ•ฉ ํŒจํ‚ค์ง€๋ผ๊ณ  ๋ณด๋ฉด ๋ผ:

๐Ÿ”น 389 Directory Server (LDAP)
์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ ์„œ๋น„์Šค. ๋ชจ๋“  ๊ณ„์ • ์ •๋ณด๊ฐ€ ์—ฌ๊ธฐ์— ์ €์žฅ๋ผ.

๐Ÿ”น MIT Kerberos
๊ฐ•๋ ฅํ•œ ์ธ์ฆ ํ”„๋กœํ† ์ฝœ. ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ์‹ ์›์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค˜.

๐Ÿ”น SSSD (System Security Services Daemon)
ํด๋ผ์ด์–ธํŠธ ์‹œ์Šคํ…œ์—์„œ ์ค‘์•™ ์ธ์ฆ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๋Š” ๋ฐ๋ชฌ์ด์•ผ.

๐Ÿ”น Dogtag Certificate System
์ธ์ฆ์„œ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ. SSL/TLS ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰ํ•˜๊ณ  ๊ด€๋ฆฌํ•ด.

๐Ÿ”น BIND DNS
DNS ์„œ๋น„์Šค๋„ ํ†ตํ•ฉ๋˜์–ด ์žˆ์–ด์„œ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„ ๊ด€๋ฆฌ๊ฐ€ ์‰ฌ์›Œ.

๐Ÿ”น NTP (Network Time Protocol)
์‹œ๊ฐ„ ๋™๊ธฐํ™”๋„ ์ค‘์š”ํ•ด! Kerberos๋Š” ์‹œ๊ฐ„์— ๋ฏผ๊ฐํ•˜๊ฑฐ๋“ .

๐Ÿ’ก ์žฌ๋Šฅ๋„ท TIP
FreeIPA ๊ตฌ์ถ•์ด๋‚˜ ๋ฆฌ๋ˆ…์Šค ์„œ๋ฒ„ ๊ด€๋ฆฌ๊ฐ€ ์ฒ˜์Œ์ด๋ผ๋ฉด ์žฌ๋Šฅ๋„ท์—์„œ ์ „๋ฌธ๊ฐ€์˜ ๋„์›€์„ ๋ฐ›์•„๋ณด๋Š” ๊ฒƒ๋„ ์ข‹์€ ๋ฐฉ๋ฒ•์ด์•ผ! ์‹ค๋ฌด ๊ฒฝํ—˜์ด ํ’๋ถ€ํ•œ ์‹œ์Šคํ…œ ์—”์ง€๋‹ˆ์–ด๋“ค์ด ์ปจ์„คํŒ…๋ถ€ํ„ฐ ๊ตฌ์ถ•๊นŒ์ง€ ๋„์™€์ค„ ์ˆ˜ ์žˆ์–ด. ๐ŸŽ“

๐ŸŽฏ ์™œ FreeIPA๋ฅผ ์จ์•ผ ํ• ๊นŒ?

"๊ทธ๋ƒฅ ๊ฐ ์„œ๋ฒ„์— ๊ณ„์ • ๋งŒ๋“ค๋ฉด ๋˜๋Š” ๊ฑฐ ์•„๋ƒ?"๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜๋„ ์žˆ์–ด. ๋ฌผ๋ก  ์„œ๋ฒ„๊ฐ€ 2~3๋Œ€๋ผ๋ฉด ๊ทธ๋ ‡๊ฒŒ ํ•ด๋„ ๊ดœ์ฐฎ์•„. ๊ทผ๋ฐ ์„œ๋ฒ„๊ฐ€ 10๋Œ€, 20๋Œ€, 100๋Œ€๊ฐ€ ๋˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? ๐Ÿ˜ฑ

๐Ÿ”ฅ FreeIPA์˜ ํ•ต์‹ฌ ์žฅ์ ๋“ค

1๏ธโƒฃ ์ค‘์•™ ์ง‘์ค‘์‹ ๊ด€๋ฆฌ

๋ชจ๋“  ์‚ฌ์šฉ์ž ๊ณ„์ •์„ ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด. ์‹ ์ž…์‚ฌ์›์ด ๋“ค์–ด์˜ค๋ฉด? FreeIPA์—์„œ ํ•œ ๋ฒˆ๋งŒ ๊ณ„์ •์„ ๋งŒ๋“ค๋ฉด ๋ชจ๋“  ์„œ๋ฒ„์— ์ ‘๊ทผ ๊ฐ€๋Šฅ! ํ‡ด์‚ฌ์ž๊ฐ€ ์ƒ๊ธฐ๋ฉด? ํ•œ ๋ฒˆ์˜ ํด๋ฆญ์œผ๋กœ ๋ชจ๋“  ์ ‘๊ทผ ๊ถŒํ•œ์„ ์ฐจ๋‹จํ•  ์ˆ˜ ์žˆ์ง€. ์ด๊ฒŒ ์–ผ๋งˆ๋‚˜ ํŽธํ•œ์ง€ ๋ชฐ๋ผ! ๐ŸŽ‰

2๏ธโƒฃ Single Sign-On (SSO)

ํ•œ ๋ฒˆ ๋กœ๊ทธ์ธํ•˜๋ฉด ์—ฌ๋Ÿฌ ์‹œ์Šคํ…œ์— ์ž๋™์œผ๋กœ ์ธ์ฆ๋ผ. ์„œ๋ฒ„ A์— ๋กœ๊ทธ์ธํ–ˆ์œผ๋ฉด ์„œ๋ฒ„ B, C, D์—๋„ ๋ณ„๋„ ๋กœ๊ทธ์ธ ์—†์ด ์ ‘๊ทผ ๊ฐ€๋Šฅํ•ด. ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์ž…๋ ฅํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ๊ฑฐ์ง€! ๐Ÿ”‘

3๏ธโƒฃ ๊ฐ•๋ ฅํ•œ ๋ณด์•ˆ

Kerberos ์ธ์ฆ์€ ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ํ‰๋ฌธ์œผ๋กœ ์ „์†ก๋˜์ง€ ์•Š์•„. ํ‹ฐ์ผ“ ๊ธฐ๋ฐ˜ ์ธ์ฆ ๋ฐฉ์‹์ด๋ผ ํ›จ์”ฌ ์•ˆ์ „ํ•˜์ง€. ๊ฒŒ๋‹ค๊ฐ€ 2๋‹จ๊ณ„ ์ธ์ฆ(OTP)๋„ ์ง€์›ํ•ด์„œ ๋ณด์•ˆ์„ ๋”์šฑ ๊ฐ•ํ™”ํ•  ์ˆ˜ ์žˆ์–ด. ๐Ÿ›ก๏ธ

4๏ธโƒฃ ์„ธ๋ฐ€ํ•œ ๊ถŒํ•œ ๊ด€๋ฆฌ

Role-Based Access Control (RBAC)์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋ณ„, ๊ทธ๋ฃน๋ณ„๋กœ ์„ธ๋ฐ€ํ•˜๊ฒŒ ๊ถŒํ•œ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด. "๊ฐœ๋ฐœํŒ€์€ ๊ฐœ๋ฐœ ์„œ๋ฒ„๋งŒ", "์šด์˜ํŒ€์€ ์šด์˜ ์„œ๋ฒ„๋งŒ" ์ด๋Ÿฐ ์‹์œผ๋กœ ๋ง์ด์•ผ. ๐Ÿ“Š

5๏ธโƒฃ ๊ฐ์‚ฌ ๋กœ๊ทธ

๋ˆ„๊ฐ€ ์–ธ์ œ ์–ด๋””์— ์ ‘์†ํ–ˆ๋Š”์ง€ ๋ชจ๋“  ๊ธฐ๋ก์ด ๋‚จ์•„. ๋ณด์•ˆ ์‚ฌ๊ณ ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ถ”์ ์ด ๊ฐ€๋Šฅํ•˜๊ณ , ์ปดํ”Œ๋ผ์ด์–ธ์Šค ์š”๊ตฌ์‚ฌํ•ญ๋„ ์ถฉ์กฑํ•  ์ˆ˜ ์žˆ์ง€. ๐Ÿ“

6๏ธโƒฃ ์™„์ „ ๋ฌด๋ฃŒ!

์˜คํ”ˆ์†Œ์Šค๋‹ˆ๊นŒ ๋ผ์ด์„ ์Šค ๋น„์šฉ์ด ์ „ํ˜€ ์—†์–ด. ์ƒ์šฉ ์†”๋ฃจ์…˜์€ ์‚ฌ์šฉ์ž ์ˆ˜๋‚˜ ์„œ๋ฒ„ ์ˆ˜์— ๋”ฐ๋ผ ์—„์ฒญ๋‚œ ๋น„์šฉ์ด ๋“ค์ง€๋งŒ, FreeIPA๋Š” ๊ณต์งœ์•ผ! ๐Ÿ’ฐ

๐Ÿ—๏ธ FreeIPA ์•„ํ‚คํ…์ฒ˜ ์ดํ•ดํ•˜๊ธฐ

FreeIPA๋ฅผ ์ œ๋Œ€๋กœ ๊ตฌ์ถ•ํ•˜๋ ค๋ฉด ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒŒ ์ค‘์š”ํ•ด. ํฌ๊ฒŒ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๋กœ ๋‚˜๋‰˜์–ด.

๐Ÿ–ฅ๏ธ FreeIPA ์„œ๋ฒ„

์„œ๋ฒ„๋Š” ๋ชจ๋“  ์ธ์ฆ ์ •๋ณด์™€ ์ •์ฑ…์„ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์ค‘์‹ฌ์ด์•ผ. ์ผ๋ฐ˜์ ์œผ๋กœ ๊ณ ๊ฐ€์šฉ์„ฑ(HA)์„ ์œ„ํ•ด ์ตœ์†Œ 2๋Œ€ ์ด์ƒ์˜ ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒŒ ์ข‹์•„. ํ•˜๋‚˜๊ฐ€ ์ฃฝ์–ด๋„ ๋‹ค๋ฅธ ์„œ๋ฒ„๊ฐ€ ์„œ๋น„์Šค๋ฅผ ๊ณ„์†ํ•  ์ˆ˜ ์žˆ๊ฑฐ๋“ .

๋งˆ์Šคํ„ฐ ์„œ๋ฒ„ (Master Server)

์ฒ˜์Œ ์„ค์น˜ํ•˜๋Š” ์„œ๋ฒ„๊ฐ€ ๋งˆ์Šคํ„ฐ๊ฐ€ ๋ผ. ๋ชจ๋“  ์“ฐ๊ธฐ ์ž‘์—…์ด ์—ฌ๊ธฐ์„œ ์ด๋ฃจ์–ด์ง€๊ณ , ๋‹ค๋ฅธ ๋ณต์ œ ์„œ๋ฒ„๋“ค์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์ œํ•ด์ค˜.

๋ณต์ œ ์„œ๋ฒ„ (Replica Server)

๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์˜ ๋ณต์‚ฌ๋ณธ์ด์•ผ. ์ฝ๊ธฐ ์ž‘์—…์„ ๋ถ„์‚ฐ์‹œํ‚ค๊ณ , ๋งˆ์Šคํ„ฐ๊ฐ€ ๋‹ค์šด๋˜๋ฉด ๋Œ€์‹  ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ์–ด. ์ง€๋ฆฌ์ ์œผ๋กœ ๋ถ„์‚ฐ๋œ ํ™˜๊ฒฝ์—์„œ ํŠนํžˆ ์œ ์šฉํ•˜์ง€.

๐Ÿ’ป FreeIPA ํด๋ผ์ด์–ธํŠธ

์‹ค์ œ ์‚ฌ์šฉ์ž๋“ค์ด ๋กœ๊ทธ์ธํ•˜๋Š” ์„œ๋ฒ„๋‚˜ ์›Œํฌ์Šคํ…Œ์ด์…˜์ด์•ผ. FreeIPA ํด๋ผ์ด์–ธํŠธ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋ฉด ์ž๋™์œผ๋กœ ์„œ๋ฒ„์™€ ์—ฐ๊ฒฐ๋˜๊ณ , ์ค‘์•™ ์ธ์ฆ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ผ.

Master Server LDAP + Kerberos Replica Server ๋ณต์ œ๋ณธ Client 1 Web Server Client 2 DB Server Client 3 App Server ๋ณต์ œ ์ธ์ฆ ํ๋ฆ„ 1. ํด๋ผ์ด์–ธํŠธ ๋กœ๊ทธ์ธ ์š”์ฒญ 2. Kerberos ํ‹ฐ์ผ“ ๋ฐœ๊ธ‰ 3. SSO๋กœ ๋‹ค๋ฅธ ์„œ๋ฒ„ ์ ‘๊ทผ

๐Ÿš€ FreeIPA ์„œ๋ฒ„ ์„ค์น˜ํ•˜๊ธฐ

์ž, ์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ FreeIPA๋ฅผ ์„ค์น˜ํ•ด๋ณด์ž! ์—ฌ๊ธฐ์„œ๋Š” CentOS 8 / Rocky Linux 8 ๊ธฐ์ค€์œผ๋กœ ์„ค๋ช…ํ• ๊ฒŒ. RHEL 8๋„ ๊ฑฐ์˜ ๋™์ผํ•ด. ๐Ÿ˜Š

โš ๏ธ ์ฃผ์˜์‚ฌํ•ญ
FreeIPA ์„ค์น˜ ์ „์— ๊ผญ ํ™•์ธํ•ด์•ผ ํ•  ๊ฒƒ๋“ค์ด ์žˆ์–ด:
โ€ข ์ตœ์†Œ 2GB RAM (๊ถŒ์žฅ 4GB ์ด์ƒ)
โ€ข ์ตœ์†Œ 10GB ๋””์Šคํฌ ๊ณต๊ฐ„
โ€ข ๊ณ ์ • IP ์ฃผ์†Œ ์„ค์ •
โ€ข ํ˜ธ์ŠคํŠธ๋ช…(FQDN) ์ œ๋Œ€๋กœ ์„ค์ •
โ€ข ๋ฐฉํ™”๋ฒฝ ํฌํŠธ ์˜คํ”ˆ ํ•„์š”
โ€ข SELinux ํ™œ์„ฑํ™” ์ƒํƒœ ์œ ์ง€ (๋น„ํ™œ์„ฑํ™”ํ•˜์ง€ ๋ง ๊ฒƒ!)
1 ์‹œ์Šคํ…œ ์ค€๋น„ ๋ฐ ํ˜ธ์ŠคํŠธ๋ช… ์„ค์ •

FreeIPA๋Š” DNS์™€ ๋ฐ€์ ‘ํ•˜๊ฒŒ ์—ฐ๊ด€๋˜์–ด ์žˆ์–ด์„œ ํ˜ธ์ŠคํŠธ๋ช… ์„ค์ •์ด ์ •๋ง ์ค‘์š”ํ•ด. FQDN(Fully Qualified Domain Name) ํ˜•์‹์œผ๋กœ ์„ค์ •ํ•ด์•ผ ํ•ด.

# ํ˜ธ์ŠคํŠธ๋ช… ์„ค์ • (์˜ˆ: ipa.example.com)
hostnamectl set-hostname ipa.example.com

# ํ™•์ธ
hostnamectl

# /etc/hosts ํŒŒ์ผ ์ˆ˜์ •
echo "192.168.1.10 ipa.example.com ipa" >> /etc/hosts

# DNS ์„ค์ • ํ™•์ธ
cat /etc/resolv.conf
2 ์‹œ์Šคํ…œ ์—…๋ฐ์ดํŠธ ๋ฐ ํŒจํ‚ค์ง€ ์„ค์น˜
# ์‹œ์Šคํ…œ ์ „์ฒด ์—…๋ฐ์ดํŠธ
dnf update -y

# FreeIPA ์„œ๋ฒ„ ํŒจํ‚ค์ง€ ์„ค์น˜
dnf install -y ipa-server ipa-server-dns

# ์„ค์น˜ ํ™•์ธ
rpm -qa | grep ipa-server

ipa-server-dns๋Š” ํ†ตํ•ฉ DNS ์„œ๋ฒ„๋ฅผ ํฌํ•จํ•œ ํŒจํ‚ค์ง€์•ผ. DNS๋ฅผ ๋ณ„๋„๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ด ํŒจํ‚ค์ง€๋Š” ์ƒ๋žตํ•ด๋„ ๋ผ. ํ•˜์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ํ†ตํ•ฉ DNS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ํ›จ์”ฌ ํŽธํ•ด! ๐ŸŽฏ

3 ๋ฐฉํ™”๋ฒฝ ์„ค์ •

FreeIPA๋Š” ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ํฌํŠธ๋ฅผ ์—ด์–ด์ค˜์•ผ ํ•ด:

# ๋ฐฉํ™”๋ฒฝ์— FreeIPA ์„œ๋น„์Šค ์ถ”๊ฐ€
firewall-cmd --permanent --add-service=freeipa-ldap
firewall-cmd --permanent --add-service=freeipa-ldaps
firewall-cmd --permanent --add-service=dns

# ๊ฐœ๋ณ„ ํฌํŠธ๋กœ ์—ด๊ธฐ (์œ„ ์„œ๋น„์Šค ์ถ”๊ฐ€์™€ ๋™์ผํ•œ ํšจ๊ณผ)
firewall-cmd --permanent --add-port=80/tcp    # HTTP
firewall-cmd --permanent --add-port=443/tcp   # HTTPS
firewall-cmd --permanent --add-port=389/tcp   # LDAP
firewall-cmd --permanent --add-port=636/tcp   # LDAPS
firewall-cmd --permanent --add-port=88/tcp    # Kerberos
firewall-cmd --permanent --add-port=88/udp    # Kerberos
firewall-cmd --permanent --add-port=464/tcp   # Kerberos password
firewall-cmd --permanent --add-port=464/udp   # Kerberos password
firewall-cmd --permanent --add-port=53/tcp    # DNS
firewall-cmd --permanent --add-port=53/udp    # DNS
firewall-cmd --permanent --add-port=123/udp   # NTP

# ๋ฐฉํ™”๋ฒฝ ์žฌ์‹œ์ž‘
firewall-cmd --reload

# ์„ค์ • ํ™•์ธ
firewall-cmd --list-all
4 FreeIPA ์„œ๋ฒ„ ์„ค์น˜ ์‹คํ–‰

๋“œ๋””์–ด ๋ณธ๊ฒฉ์ ์ธ ์„ค์น˜์•ผ! ipa-server-install ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋Œ€ํ™”ํ˜•์œผ๋กœ ์„ค์ •์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด. ๐ŸŽŠ

# ํ†ตํ•ฉ DNS์™€ ํ•จ๊ป˜ ์„ค์น˜
ipa-server-install --setup-dns

# ๋˜๋Š” ๋ฌด์ธ ์„ค์น˜ (๋ชจ๋“  ์˜ต์…˜์„ ๋ช…๋ น์ค„์—์„œ ์ง€์ •)
ipa-server-install \
  --realm EXAMPLE.COM \
  --domain example.com \
  --ds-password MyDsPassword123! \
  --admin-password MyAdminPassword123! \
  --hostname ipa.example.com \
  --setup-dns \
  --forwarder 8.8.8.8 \
  --forwarder 8.8.4.4 \
  --no-reverse \
  --unattended

๋Œ€ํ™”ํ˜• ์„ค์น˜๋ฅผ ์„ ํƒํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์งˆ๋ฌธ๋“ค์ด ๋‚˜์™€:

๐Ÿ”น Do you want to configure integrated DNS?
ํ†ตํ•ฉ DNS๋ฅผ ์„ค์ •ํ•  ๊ฑฐ๋ƒ๋Š” ์งˆ๋ฌธ. yes๋ฅผ ์ถ”์ฒœ!

๐Ÿ”น Server host name
์„œ๋ฒ„์˜ FQDN. ์ž๋™์œผ๋กœ ๊ฐ์ง€๋˜์ง€๋งŒ ํ™•์ธ ํ•„์š”.

๐Ÿ”น Please confirm the domain name
๋„๋ฉ”์ธ ์ด๋ฆ„. ์˜ˆ: example.com

๐Ÿ”น Please provide a realm name
Kerberos realm ์ด๋ฆ„. ๋ณดํ†ต ๋„๋ฉ”์ธ์„ ๋Œ€๋ฌธ์ž๋กœ. ์˜ˆ: EXAMPLE.COM

๐Ÿ”น Directory Manager password
LDAP ๊ด€๋ฆฌ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ. ์ตœ์†Œ 8์ž ์ด์ƒ, ๋ณต์žกํ•˜๊ฒŒ!

๐Ÿ”น IPA admin password
FreeIPA ๊ด€๋ฆฌ์ž(admin) ๋น„๋ฐ€๋ฒˆํ˜ธ. ์ด๊ฒƒ๋„ ๊ฐ•๋ ฅํ•˜๊ฒŒ!

๐Ÿ”น Do you want to configure DNS forwarders?
์™ธ๋ถ€ DNS ํฌ์›Œ๋” ์„ค์ •. yes๋ฅผ ์„ ํƒํ•˜๊ณ  8.8.8.8 ๊ฐ™์€ ๊ณต๊ฐœ DNS ์ž…๋ ฅ.

๐Ÿ”น Do you want to search for missing reverse zones?
์—ญ๋ฐฉํ–ฅ DNS ์กด ์ž๋™ ์ƒ์„ฑ. ํ•„์š”ํ•˜๋ฉด yes.

์„ค์น˜๋Š” ๋ณดํ†ต 10~20๋ถ„ ์ •๋„ ๊ฑธ๋ ค. ์ปคํ”ผ ํ•œ ์ž” ํ•˜๋ฉด์„œ ๊ธฐ๋‹ค๋ ค! โ˜•

๐Ÿ’ก ์„ค์น˜ ์ค‘ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด?
โ€ข ํ˜ธ์ŠคํŠธ๋ช…์ด ์ œ๋Œ€๋กœ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธ
โ€ข /etc/hosts ํŒŒ์ผ์— FQDN์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋“ฑ๋ก๋˜์—ˆ๋Š”์ง€ ํ™•์ธ
โ€ข ๋ฐฉํ™”๋ฒฝ์ด๋‚˜ SELinux ๋•Œ๋ฌธ์ผ ์ˆ˜ ์žˆ์œผ๋‹ˆ ๋กœ๊ทธ ํ™•์ธ: /var/log/ipaserver-install.log
โ€ข ์ด๋ฏธ ์„ค์น˜๋œ ์ ์ด ์žˆ๋‹ค๋ฉด ์™„์ „ํžˆ ์ œ๊ฑฐ ํ›„ ์žฌ์„ค์น˜: ipa-server-install --uninstall
5 ์„ค์น˜ ์™„๋ฃŒ ๋ฐ ํ™•์ธ

์„ค์น˜๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์–ด:

==============================================================================
Setup complete

Next steps:
	1. You must make sure these network ports are open:
		TCP Ports:
		  * 80, 443: HTTP/HTTPS
		  * 389, 636: LDAP/LDAPS
		  * 88, 464: kerberos
		UDP Ports:
		  * 88, 464: kerberos
		  * 123: ntp

	2. You can now obtain a kerberos ticket using the command: 'kinit admin'
	   This ticket will allow you to use the IPA tools (e.g., ipa user-add)
	   and the web user interface.

Be sure to back up the CA certificates stored in /root/cacert.p12
These files are required to create replicas. The password for these
files is the Directory Manager password
==============================================================================

์ด์ œ Kerberos ํ‹ฐ์ผ“์„ ๋ฐ›์•„์„œ ๊ด€๋ฆฌ์ž๋กœ ์ธ์ฆํ•ด๋ณด์ž:

# Kerberos ํ‹ฐ์ผ“ ๋ฐ›๊ธฐ
kinit admin

# ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ (์„ค์น˜ ์‹œ ์„ค์ •ํ•œ admin ๋น„๋ฐ€๋ฒˆํ˜ธ)

# ํ‹ฐ์ผ“ ํ™•์ธ
klist

# FreeIPA ์ƒํƒœ ํ™•์ธ
ipactl status

# ๋ชจ๋“  ์„œ๋น„์Šค๊ฐ€ running ์ƒํƒœ์—ฌ์•ผ ํ•จ:
# Directory Service: RUNNING
# krb5kdc Service: RUNNING
# kadmin Service: RUNNING
# named Service: RUNNING
# httpd Service: RUNNING
# ipa-custodia Service: RUNNING
# pki-tomcatd Service: RUNNING
# ipa-otpd Service: RUNNING
# ipa-dnskeysyncd Service: RUNNING
# ipa: INFO: The ipactl command was successful

๐ŸŒ ์›น UI๋กœ FreeIPA ๊ด€๋ฆฌํ•˜๊ธฐ

FreeIPA์˜ ๊ฐ€์žฅ ํฐ ์žฅ์  ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐ”๋กœ ์ง๊ด€์ ์ธ ์›น ์ธํ„ฐํŽ˜์ด์Šค์•ผ! ๋ธŒ๋ผ์šฐ์ €๋กœ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด. ๐Ÿ–ฑ๏ธ

์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์—ด๊ณ  ๋‹ค์Œ ์ฃผ์†Œ๋กœ ์ ‘์†ํ•ด๋ด:
https://ipa.example.com (๋‹น์‹ ์˜ ์„œ๋ฒ„ ์ฃผ์†Œ๋กœ ๋ณ€๊ฒฝ)

์ฒ˜์Œ ์ ‘์†ํ•˜๋ฉด SSL ์ธ์ฆ์„œ ๊ฒฝ๊ณ ๊ฐ€ ๋œฐ ๊ฑฐ์•ผ. FreeIPA๊ฐ€ ์ž์ฒด ์„œ๋ช…ํ•œ ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด์•ผ. "๊ณ ๊ธ‰" โ†’ "๊ณ„์† ์ง„ํ–‰"์„ ํด๋ฆญํ•ด์„œ ์ ‘์†ํ•˜๋ฉด ๋ผ. (ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ๋Š” ๊ณต์ธ ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์ข‹์•„!)

๋กœ๊ทธ์ธ ํ™”๋ฉด์ด ๋‚˜์˜ค๋ฉด:
โ€ข Username: admin
โ€ข Password: (์„ค์น˜ ์‹œ ์„ค์ •ํ•œ admin ๋น„๋ฐ€๋ฒˆํ˜ธ)

๋กœ๊ทธ์ธํ•˜๋ฉด ๊น”๋”ํ•œ ๋Œ€์‹œ๋ณด๋“œ๊ฐ€ ๋‚˜ํƒ€๋‚˜! ์—ฌ๊ธฐ์„œ ํ•  ์ˆ˜ ์žˆ๋Š” ์ฃผ์š” ์ž‘์—…๋“ค์„ ์‚ดํŽด๋ณด์ž:

๐Ÿ‘ฅ ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ (Identity โ†’ Users)

์‚ฌ์šฉ์ž ์ถ”๊ฐ€ํ•˜๊ธฐ:

1. ์ƒ๋‹จ ๋ฉ”๋‰ด์—์„œ Identity โ†’ Users ํด๋ฆญ
2. + Add ๋ฒ„ํŠผ ํด๋ฆญ
3. ํ•„์ˆ˜ ์ •๋ณด ์ž…๋ ฅ:

โ€ข User login: ๋กœ๊ทธ์ธ ID (์˜ˆ: jsmith)
โ€ข First name: ์ด๋ฆ„ (์˜ˆ: John)
โ€ข Last name: ์„ฑ (์˜ˆ: Smith)
โ€ข New Password: ์ดˆ๊ธฐ ๋น„๋ฐ€๋ฒˆํ˜ธ
โ€ข Verify Password: ๋น„๋ฐ€๋ฒˆํ˜ธ ํ™•์ธ

4. ์„ ํƒ ์ •๋ณด (ํ•„์š”์‹œ):

โ€ข Email address: ์ด๋ฉ”์ผ
โ€ข Job Title: ์ง์ฑ…
โ€ข Manager: ์ƒ์‚ฌ
โ€ข Telephone Number: ์ „ํ™”๋ฒˆํ˜ธ
โ€ข Mobile Number: ํœด๋Œ€ํฐ ๋ฒˆํ˜ธ

5. Add ๋ฒ„ํŠผ ํด๋ฆญํ•˜๋ฉด ์‚ฌ์šฉ์ž ์ƒ์„ฑ ์™„๋ฃŒ! ๐ŸŽ‰

์ƒ์„ฑ๋œ ์‚ฌ์šฉ์ž๋Š” ์ฒซ ๋กœ๊ทธ์ธ ์‹œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ณ€๊ฒฝํ•˜๋„๋ก ๊ฐ•์ œํ•  ์ˆ˜ ์žˆ์–ด. ๋ณด์•ˆ์ƒ ์ด๊ฒŒ ์ข‹์ง€!

๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ ๊ทธ๋ฃน ๊ด€๋ฆฌ (Identity โ†’ Groups)

๊ทธ๋ฃน์„ ๋งŒ๋“ค๋ฉด ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๋ฅผ ๋ฌถ์–ด์„œ ํ•œ ๋ฒˆ์— ๊ถŒํ•œ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด. ์˜ˆ๋ฅผ ๋“ค์–ด "๊ฐœ๋ฐœํŒ€", "์šด์˜ํŒ€", "๊ด€๋ฆฌ์ž" ๊ฐ™์€ ๊ทธ๋ฃน์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€.

๊ทธ๋ฃน ์ƒ์„ฑ:

1. Identity โ†’ Groups โ†’ + Add
2. Group name: ๊ทธ๋ฃน ์ด๋ฆ„ (์˜ˆ: developers)
3. Description: ์„ค๋ช… (์˜ˆ: Development Team)
4. Add ํด๋ฆญ

๊ทธ๋ฃน์— ์‚ฌ์šฉ์ž ์ถ”๊ฐ€:

1. ์ƒ์„ฑํ•œ ๊ทธ๋ฃน ํด๋ฆญ
2. Add ๋ฒ„ํŠผ ํด๋ฆญ (Members ์„น์…˜)
3. ์ถ”๊ฐ€ํ•  ์‚ฌ์šฉ์ž ์„ ํƒ
4. > ๋ฒ„ํŠผ์œผ๋กœ ์ด๋™
5. Add ํด๋ฆญ

๐Ÿ–ฅ๏ธ ํ˜ธ์ŠคํŠธ ๊ด€๋ฆฌ (Identity โ†’ Hosts)

FreeIPA์— ๋“ฑ๋ก๋œ ๋ชจ๋“  ์„œ๋ฒ„(ํด๋ผ์ด์–ธํŠธ)๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด. ํ˜ธ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ํ•ด๋‹น ์„œ๋ฒ„๊ฐ€ FreeIPA ๋„๋ฉ”์ธ์— ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ผ.

ํ˜ธ์ŠคํŠธ ์ถ”๊ฐ€:

1. Identity โ†’ Hosts โ†’ + Add
2. Host name: ์„œ๋ฒ„ ์ด๋ฆ„ (์˜ˆ: web01.example.com)
3. IP address: IP ์ฃผ์†Œ (์„ ํƒ์‚ฌํ•ญ)
4. Add ํด๋ฆญ

ํ˜ธ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด One-Time Password (OTP)๊ฐ€ ์ƒ์„ฑ๋ผ. ์ด OTP๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์–ด.

๐Ÿ” HBAC (Host-Based Access Control)

HBAC๋Š” "๋ˆ„๊ฐ€ ์–ด๋–ค ์„œ๋ฒ„์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š”์ง€"๋ฅผ ์ œ์–ดํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์ด์•ผ. ์˜ˆ๋ฅผ ๋“ค์–ด:

โ€ข ๊ฐœ๋ฐœํŒ€์€ ๊ฐœ๋ฐœ ์„œ๋ฒ„์—๋งŒ SSH ์ ‘๊ทผ ๊ฐ€๋Šฅ
โ€ข ์šด์˜ํŒ€์€ ์šด์˜ ์„œ๋ฒ„์—๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
โ€ข DBA๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„์—๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ

HBAC ๊ทœ์น™ ๋งŒ๋“ค๊ธฐ:

1. Policy โ†’ Host-Based Access Control โ†’ HBAC Rules
2. + Add ํด๋ฆญ
3. Rule name: ๊ทœ์น™ ์ด๋ฆ„ (์˜ˆ: allow_developers_to_dev_servers)
4. Add ํด๋ฆญ

5. ๊ทœ์น™ ์ƒ์„ธ ์„ค์ •:

โ€ข Who: ์–ด๋–ค ์‚ฌ์šฉ์ž/๊ทธ๋ฃน? (์˜ˆ: developers ๊ทธ๋ฃน)
โ€ข Accessing: ์–ด๋–ค ํ˜ธ์ŠคํŠธ? (์˜ˆ: dev-server01, dev-server02)
โ€ข Via service: ์–ด๋–ค ์„œ๋น„์Šค? (์˜ˆ: sshd, login)
โ€ข From: ์–ด๋””์„œ? (๋ณดํ†ต Any Host๋กœ ์„ค์ •)

6. ๊ฐ ์„น์…˜์—์„œ Add ๋ฒ„ํŠผ์œผ๋กœ ํ•ญ๋ชฉ ์ถ”๊ฐ€
7. ๊ทœ์น™ ํ™œ์„ฑํ™”: Enabled ์ฒดํฌ๋ฐ•์Šค ์„ ํƒ

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด developers ๊ทธ๋ฃน์˜ ์‚ฌ์šฉ์ž๋“ค๋งŒ ๊ฐœ๋ฐœ ์„œ๋ฒ„์— SSH๋กœ ์ ‘์†ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ผ! ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋Š” ์ ‘๊ทผ์ด ์ฐจ๋‹จ๋˜์ง€. ๐Ÿšซ

๐Ÿ’ก ๊ธฐ๋ณธ HBAC ๊ทœ์น™ ์ฃผ์˜!
FreeIPA๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ allow_all์ด๋ผ๋Š” ๊ทœ์น™์ด ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์–ด. ์ด ๊ทœ์น™์€ ๋ชจ๋“  ์‚ฌ์šฉ์ž๊ฐ€ ๋ชจ๋“  ํ˜ธ์ŠคํŠธ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด. ๋ณด์•ˆ์„ ์œ„ํ•ด ์ด ๊ทœ์น™์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ  ํ•„์š”ํ•œ ๊ทœ์น™๋งŒ ๋งŒ๋“œ๋Š” ๊ฒŒ ์ข‹์•„!

๐Ÿ’ป ๋ช…๋ น์ค„๋กœ FreeIPA ๊ด€๋ฆฌํ•˜๊ธฐ

์›น UI๋„ ์ข‹์ง€๋งŒ, ์ง„์งœ ํŒŒ์›Œ์œ ์ €๋Š” ๋ช…๋ น์ค„์„ ์‚ฌ์šฉํ•˜์ง€! ๐Ÿ˜Ž FreeIPA๋Š” ipa ๋ช…๋ น์–ด๋กœ ๋ชจ๋“  ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ์–ด. ์Šคํฌ๋ฆฝํŠธ ์ž๋™ํ™”์—๋„ ์œ ์šฉํ•˜๊ณ !

๐Ÿ”‘ Kerberos ์ธ์ฆ

๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋จผ์ € Kerberos ํ‹ฐ์ผ“์„ ๋ฐ›์•„์•ผ ํ•ด:

# ๊ด€๋ฆฌ์ž๋กœ ์ธ์ฆ
kinit admin

# ํ‹ฐ์ผ“ ํ™•์ธ
klist

# ํ‹ฐ์ผ“ ์ •๋ณด ์ถœ๋ ฅ:
# Ticket cache: KCM:0
# Default principal: admin@EXAMPLE.COM
# 
# Valid starting     Expires            Service principal
# 12/15/23 10:00:00  12/16/23 10:00:00  krbtgt/EXAMPLE.COM@EXAMPLE.COM

# ํ‹ฐ์ผ“ ์‚ญ์ œ (๋กœ๊ทธ์•„์›ƒ)
kdestroy

๐Ÿ‘ค ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ๋ช…๋ น์–ด

# ์‚ฌ์šฉ์ž ์ถ”๊ฐ€
ipa user-add jsmith --first=John --last=Smith \
  --email=jsmith@example.com --password

# ์‚ฌ์šฉ์ž ๋ชฉ๋ก ๋ณด๊ธฐ
ipa user-find

# ํŠน์ • ์‚ฌ์šฉ์ž ๊ฒ€์ƒ‰
ipa user-find jsmith

# ์‚ฌ์šฉ์ž ์ƒ์„ธ ์ •๋ณด
ipa user-show jsmith

# ์‚ฌ์šฉ์ž ์ˆ˜์ •
ipa user-mod jsmith --title="Senior Developer"

# ์‚ฌ์šฉ์ž ๋น„ํ™œ์„ฑํ™”
ipa user-disable jsmith

# ์‚ฌ์šฉ์ž ํ™œ์„ฑํ™”
ipa user-enable jsmith

# ์‚ฌ์šฉ์ž ์‚ญ์ œ
ipa user-del jsmith

# ๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ •
ipa passwd jsmith

๐Ÿ‘ฅ ๊ทธ๋ฃน ๊ด€๋ฆฌ ๋ช…๋ น์–ด

# ๊ทธ๋ฃน ์ƒ์„ฑ
ipa group-add developers --desc="Development Team"

# ๊ทธ๋ฃน ๋ชฉ๋ก
ipa group-find

# ๊ทธ๋ฃน์— ์‚ฌ์šฉ์ž ์ถ”๊ฐ€
ipa group-add-member developers --users=jsmith,mjones

# ๊ทธ๋ฃน์—์„œ ์‚ฌ์šฉ์ž ์ œ๊ฑฐ
ipa group-remove-member developers --users=jsmith

# ๊ทธ๋ฃน ์ƒ์„ธ ์ •๋ณด
ipa group-show developers

# ๊ทธ๋ฃน ์‚ญ์ œ
ipa group-del developers

๐Ÿ–ฅ๏ธ ํ˜ธ์ŠคํŠธ ๊ด€๋ฆฌ ๋ช…๋ น์–ด

# ํ˜ธ์ŠคํŠธ ์ถ”๊ฐ€
ipa host-add web01.example.com --ip-address=192.168.1.20

# ํ˜ธ์ŠคํŠธ ๋ชฉ๋ก
ipa host-find

# ํ˜ธ์ŠคํŠธ ์ƒ์„ธ ์ •๋ณด
ipa host-show web01.example.com

# ํ˜ธ์ŠคํŠธ ์‚ญ์ œ
ipa host-del web01.example.com

# ํ˜ธ์ŠคํŠธ ๊ทธ๋ฃน ์ƒ์„ฑ
ipa hostgroup-add webservers --desc="Web Servers"

# ํ˜ธ์ŠคํŠธ ๊ทธ๋ฃน์— ํ˜ธ์ŠคํŠธ ์ถ”๊ฐ€
ipa hostgroup-add-member webservers --hosts=web01.example.com

๐Ÿ” HBAC ๊ทœ์น™ ๋ช…๋ น์–ด

# HBAC ๊ทœ์น™ ์ƒ์„ฑ
ipa hbacrule-add allow_devs_to_webservers

# ์‚ฌ์šฉ์ž/๊ทธ๋ฃน ์ถ”๊ฐ€
ipa hbacrule-add-user allow_devs_to_webservers --groups=developers

# ํ˜ธ์ŠคํŠธ/ํ˜ธ์ŠคํŠธ๊ทธ๋ฃน ์ถ”๊ฐ€
ipa hbacrule-add-host allow_devs_to_webservers --hostgroups=webservers

# ์„œ๋น„์Šค ์ถ”๊ฐ€
ipa hbacrule-add-service allow_devs_to_webservers --hbacsvcs=sshd

# ๊ทœ์น™ ํ™œ์„ฑํ™”
ipa hbacrule-enable allow_devs_to_webservers

# ๊ทœ์น™ ๋น„ํ™œ์„ฑํ™”
ipa hbacrule-disable allow_devs_to_webservers

# ๊ทœ์น™ ํ™•์ธ
ipa hbacrule-show allow_devs_to_webservers

# ๊ธฐ๋ณธ allow_all ๊ทœ์น™ ๋น„ํ™œ์„ฑํ™” (๋ณด์•ˆ ๊ฐ•ํ™”)
ipa hbacrule-disable allow_all

๐Ÿ”Œ FreeIPA ํด๋ผ์ด์–ธํŠธ ์„ค์ •ํ•˜๊ธฐ

์ด์ œ ์‹ค์ œ ์„œ๋ฒ„๋“ค์„ FreeIPA ๋„๋ฉ”์ธ์— ์ฐธ์—ฌ์‹œ์ผœ๋ณด์ž! ํด๋ผ์ด์–ธํŠธ ์„ค์ •์€ ์ •๋ง ๊ฐ„๋‹จํ•ด. ๐Ÿ˜Š

1 ํด๋ผ์ด์–ธํŠธ ํŒจํ‚ค์ง€ ์„ค์น˜

FreeIPA ํด๋ผ์ด์–ธํŠธ๋กœ ๋“ฑ๋กํ•  ์„œ๋ฒ„์—์„œ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ด:

# CentOS/RHEL/Rocky Linux
dnf install -y ipa-client

# Ubuntu/Debian
apt-get install -y freeipa-client

# ์„ค์น˜ ํ™•์ธ
rpm -qa | grep ipa-client  # CentOS/RHEL
dpkg -l | grep freeipa-client  # Ubuntu/Debian
2 ํด๋ผ์ด์–ธํŠธ ๋“ฑ๋ก

ํด๋ผ์ด์–ธํŠธ๋ฅผ FreeIPA ๋„๋ฉ”์ธ์— ๋“ฑ๋กํ•˜๋Š” ๊ฑด ํ•œ ์ค„ ๋ช…๋ น์–ด๋กœ ๋๋‚˜!

# ๊ธฐ๋ณธ ๋“ฑ๋ก (๋Œ€ํ™”ํ˜•)
ipa-client-install --mkhomedir

# ๋˜๋Š” ๋ชจ๋“  ์˜ต์…˜ ์ง€์ • (๋ฌด์ธ ์„ค์น˜)
ipa-client-install \
  --domain=example.com \
  --server=ipa.example.com \
  --realm=EXAMPLE.COM \
  --principal=admin \
  --password='YourAdminPassword' \
  --mkhomedir \
  --unattended

--mkhomedir ์˜ต์…˜์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ฒ˜์Œ ๋กœ๊ทธ์ธํ•  ๋•Œ ์ž๋™์œผ๋กœ ํ™ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ด์ค˜. ์ด๊ฑฐ ๊ผญ ๋„ฃ์–ด์•ผ ํ•ด!

๋Œ€ํ™”ํ˜• ์„ค์น˜๋ฅผ ์„ ํƒํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์งˆ๋ฌธ๋“ค์ด ๋‚˜์™€:

โ€ข Provide your IPA server name: FreeIPA ์„œ๋ฒ„ ์ฃผ์†Œ (์˜ˆ: ipa.example.com)
โ€ข Provide the domain name: ๋„๋ฉ”์ธ (์˜ˆ: example.com)
โ€ข Provide the realm name: Realm (์˜ˆ: EXAMPLE.COM)
โ€ข Continue to configure the system with these values? yes
โ€ข User authorized to enroll computers: admin
โ€ข Password for admin@EXAMPLE.COM: ๊ด€๋ฆฌ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ
3 ๋“ฑ๋ก ํ™•์ธ
# Kerberos ํ‹ฐ์ผ“ ๋ฐ›๊ธฐ
kinit admin

# ํ˜ธ์ŠคํŠธ ์ •๋ณด ํ™•์ธ
ipa host-show $(hostname)

# SSSD ์ƒํƒœ ํ™•์ธ
systemctl status sssd

# ์‚ฌ์šฉ์ž ์ •๋ณด ์กฐํšŒ ํ…Œ์ŠคํŠธ
id jsmith

# ์ถœ๋ ฅ ์˜ˆ์‹œ:
# uid=1234567890(jsmith) gid=1234567890(jsmith) groups=1234567890(jsmith),1234567891(developers)

์ด์ œ FreeIPA์— ๋“ฑ๋ก๋œ ์‚ฌ์šฉ์ž๋กœ ์ด ์„œ๋ฒ„์— ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์žˆ์–ด! ๐ŸŽ‰

4 SSH ๋กœ๊ทธ์ธ ํ…Œ์ŠคํŠธ

๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ๋‚˜ ๋กœ์ปฌ ๋จธ์‹ ์—์„œ SSH๋กœ ์ ‘์†ํ•ด๋ด:

# FreeIPA ์‚ฌ์šฉ์ž๋กœ SSH ์ ‘์†
ssh jsmith@web01.example.com

# ์ฒ˜์Œ ๋กœ๊ทธ์ธ ์‹œ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ ํ”„๋กฌํ”„ํŠธ๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์Œ
# ๋ณ€๊ฒฝ ํ›„ ์ •์ƒ์ ์œผ๋กœ ๋กœ๊ทธ์ธ๋จ

# ๋กœ๊ทธ์ธ ํ›„ Kerberos ํ‹ฐ์ผ“ ํ™•์ธ
klist

# ์ž๋™์œผ๋กœ ํ‹ฐ์ผ“์ด ๋ฐœ๊ธ‰๋˜์–ด ์žˆ์Œ!
# ์ด๊ฒŒ ๋ฐ”๋กœ SSO์˜ ๋งˆ๋ฒ•! โœจ

๐Ÿ”„ FreeIPA ๋ณต์ œ ์„œ๋ฒ„ ๊ตฌ์ถ•ํ•˜๊ธฐ

ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ๋Š” ๋‹จ์ผ ์„œ๋ฒ„๋กœ ์šด์˜ํ•˜๋ฉด ์•ˆ ๋ผ! ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋˜๋ฉด ๋ชจ๋“  ์ธ์ฆ์ด ๋ฉˆ์ถ”๊ฑฐ๋“ . ๊ทธ๋ž˜์„œ ๋ณต์ œ ์„œ๋ฒ„(Replica)๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ด. ๐Ÿ”„

๐Ÿ“‹ ๋ณต์ œ ์„œ๋ฒ„์˜ ์žฅ์ 

1๏ธโƒฃ ๊ณ ๊ฐ€์šฉ์„ฑ (High Availability)
๋งˆ์Šคํ„ฐ ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋˜์–ด๋„ ๋ณต์ œ ์„œ๋ฒ„๊ฐ€ ์„œ๋น„์Šค๋ฅผ ๊ณ„์† ์ œ๊ณตํ•ด.

2๏ธโƒฃ ๋ถ€ํ•˜ ๋ถ„์‚ฐ (Load Balancing)
์—ฌ๋Ÿฌ ์„œ๋ฒ„๊ฐ€ ์ธ์ฆ ์š”์ฒญ์„ ๋‚˜๋ˆ ์„œ ์ฒ˜๋ฆฌํ•˜๋‹ˆ๊นŒ ์„ฑ๋Šฅ์ด ์ข‹์•„์ ธ.

3๏ธโƒฃ ์ง€๋ฆฌ์  ๋ถ„์‚ฐ
์„œ์šธ, ๋ถ€์‚ฐ, ๋Œ€๊ตฌ์— ๊ฐ๊ฐ ๋ณต์ œ ์„œ๋ฒ„๋ฅผ ๋‘๋ฉด ๊ฐ€๊นŒ์šด ์„œ๋ฒ„์—์„œ ๋น ๋ฅด๊ฒŒ ์ธ์ฆ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด.

4๏ธโƒฃ ๋ฐฑ์—…
๋ฐ์ดํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ ์„œ๋ฒ„์— ๋ณต์ œ๋˜๋‹ˆ๊นŒ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋ฐฑ์—… ํšจ๊ณผ๋„ ์žˆ์ง€.

1 ๋ณต์ œ ์„œ๋ฒ„์šฉ ์‹œ์Šคํ…œ ์ค€๋น„

์ƒˆ๋กœ์šด ์„œ๋ฒ„๋ฅผ ์ค€๋น„ํ•˜๊ณ  ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์™€ ๋™์ผํ•˜๊ฒŒ ๊ธฐ๋ณธ ์„ค์ •์„ ํ•ด์ค˜:

# ํ˜ธ์ŠคํŠธ๋ช… ์„ค์ •
hostnamectl set-hostname ipa-replica.example.com

# /etc/hosts ์ˆ˜์ •
echo "192.168.1.11 ipa-replica.example.com ipa-replica" >> /etc/hosts

# DNS๋ฅผ ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„๋กœ ์„ค์ •
echo "nameserver 192.168.1.10" > /etc/resolv.conf

# ์‹œ์Šคํ…œ ์—…๋ฐ์ดํŠธ
dnf update -y

# FreeIPA ์„œ๋ฒ„ ํŒจํ‚ค์ง€ ์„ค์น˜
dnf install -y ipa-server ipa-server-dns
2 ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์—์„œ ๋ณต์ œ ์ค€๋น„

FreeIPA 4.3 ์ดํ›„ ๋ฒ„์ „์—์„œ๋Š” ๋ณต์ œ ํŒŒ์ผ์„ ๋ณ„๋„๋กœ ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์—†์–ด! ๋ฐ”๋กœ ๋ณต์ œ ์„œ๋ฒ„์—์„œ ์„ค์น˜ํ•˜๋ฉด ๋ผ. ํ•˜์ง€๋งŒ ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์—์„œ ๋ณต์ œ ์„œ๋ฒ„ ํ˜ธ์ŠคํŠธ๋ฅผ ๋ฏธ๋ฆฌ ๋“ฑ๋กํ•ด๋‘๋Š” ๊ฒŒ ์ข‹์•„:

# ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์—์„œ ์‹คํ–‰
kinit admin

# ๋ณต์ œ ์„œ๋ฒ„ ํ˜ธ์ŠคํŠธ ์ถ”๊ฐ€
ipa host-add ipa-replica.example.com --ip-address=192.168.1.11
3 ๋ณต์ œ ์„œ๋ฒ„ ์„ค์น˜

๋ณต์ œ ์„œ๋ฒ„์—์„œ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ด:

# ๋ณต์ œ ์„œ๋ฒ„ ์„ค์น˜ (DNS ํฌํ•จ)
ipa-replica-install \
  --setup-dns \
  --forwarder=8.8.8.8 \
  --forwarder=8.8.4.4 \
  --setup-ca

# ๋˜๋Š” ๋Œ€ํ™”ํ˜•์œผ๋กœ
ipa-replica-install --setup-dns --setup-ca

์„ค์น˜ ์ค‘์— ๊ด€๋ฆฌ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ๋ฌผ์–ด๋ณผ ๊ฑฐ์•ผ:

โ€ข Directory Manager password: ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์˜ DM ๋น„๋ฐ€๋ฒˆํ˜ธ
โ€ข IPA admin password: admin ๊ณ„์ • ๋น„๋ฐ€๋ฒˆํ˜ธ

์„ค์น˜๋Š” 10~15๋ถ„ ์ •๋„ ๊ฑธ๋ ค. ์™„๋ฃŒ๋˜๋ฉด ๋ณต์ œ ์„œ๋ฒ„๊ฐ€ ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์™€ ์ž๋™์œผ๋กœ ๋™๊ธฐํ™”๋ฅผ ์‹œ์ž‘ํ•ด!

4 ๋ณต์ œ ํ™•์ธ
# ๋ณต์ œ ์„œ๋ฒ„์—์„œ ํ™•์ธ
ipactl status

# ๋ณต์ œ ํ† ํด๋กœ์ง€ ํ™•์ธ
ipa topologysuffix-show domain

# ๋ณต์ œ ํ˜‘์•ฝ ํ™•์ธ
ipa-replica-manage list

# ์ถœ๋ ฅ ์˜ˆ์‹œ:
# ipa.example.com: master
# ipa-replica.example.com: master

# ๋ณต์ œ ์ƒํƒœ ํ™•์ธ
ipa-replica-manage list-ruv

# ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„ ๋ชฉ๋ก ํ™•์ธ
ipa server-find

์ด์ œ ๋‘ ์„œ๋ฒ„๊ฐ€ ์„œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐํ™”ํ•˜๊ณ  ์žˆ์–ด! ํ•œ ์„œ๋ฒ„์—์„œ ์‚ฌ์šฉ์ž๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋‹ค๋ฅธ ์„œ๋ฒ„์—๋„ ๋ณต์ œ๋ผ. ๐Ÿ˜Š

๐Ÿ’ก ๋ณต์ œ ์„œ๋ฒ„ ์šด์˜ ํŒ
โ€ข ์ตœ์†Œ 2๋Œ€ ์ด์ƒ์˜ ๋ณต์ œ ์„œ๋ฒ„๋ฅผ ์šด์˜ํ•˜๋Š” ๊ฒŒ ์ข‹์•„
โ€ข ๋ณต์ œ ์„œ๋ฒ„๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋„คํŠธ์›Œํฌ๋‚˜ ๋ฐ์ดํ„ฐ์„ผํ„ฐ์— ๋ฐฐ์น˜
โ€ข ์ •๊ธฐ์ ์œผ๋กœ ๋ณต์ œ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•ด์•ผ ํ•ด
โ€ข ๋ณต์ œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ipa-replica-manage๋กœ ํ•ด๊ฒฐ

๐Ÿ”’ ๋ณด์•ˆ ๊ฐ•ํ™”ํ•˜๊ธฐ

FreeIPA๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ณด์•ˆ์ด ์ž˜ ๋˜์–ด ์žˆ์ง€๋งŒ, ์ถ”๊ฐ€๋กœ ๊ฐ•ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•๋“ค์ด ์žˆ์–ด! ๐Ÿ›ก๏ธ

๐Ÿ” 2๋‹จ๊ณ„ ์ธ์ฆ (OTP) ์„ค์ •

๋น„๋ฐ€๋ฒˆํ˜ธ๋งŒ์œผ๋กœ๋Š” ๋ถ€์กฑํ•ด! 2๋‹จ๊ณ„ ์ธ์ฆ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ณด์•ˆ์ด ํ›จ์”ฌ ๊ฐ•ํ™”๋ผ. FreeIPA๋Š” TOTP (Time-based One-Time Password)๋ฅผ ์ง€์›ํ•ด. Google Authenticator ๊ฐ™์€ ์•ฑ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€!

์‚ฌ์šฉ์ž์—๊ฒŒ OTP ํ† ํฐ ์ถ”๊ฐ€:

# ์›น UI์—์„œ:
# 1. Identity โ†’ Users โ†’ ์‚ฌ์šฉ์ž ์„ ํƒ
# 2. Actions โ†’ Add OTP Token
# 3. QR ์ฝ”๋“œ๊ฐ€ ์ƒ์„ฑ๋จ
# 4. Google Authenticator ์•ฑ์œผ๋กœ QR ์ฝ”๋“œ ์Šค์บ”

# ๋ช…๋ น์ค„์—์„œ:
ipa otptoken-add --type=totp --owner=jsmith --desc="John's Phone"

# QR ์ฝ”๋“œ URL ์ƒ์„ฑ
ipa otptoken-show [ํ† ํฐID] --show-uri

์ด์ œ ์‚ฌ์šฉ์ž๋Š” ๋กœ๊ทธ์ธํ•  ๋•Œ "๋น„๋ฐ€๋ฒˆํ˜ธ+OTP์ฝ”๋“œ"๋ฅผ ์ž…๋ ฅํ•ด์•ผ ํ•ด. ์˜ˆ๋ฅผ ๋“ค์–ด ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ "MyPass123"์ด๊ณ  OTP ์ฝ”๋“œ๊ฐ€ "456789"๋ผ๋ฉด, ๋กœ๊ทธ์ธ ์‹œ "MyPass123456789"๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋ผ!

๐Ÿ”‘ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ •์ฑ… ๊ฐ•ํ™”

๊ฐ•๋ ฅํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ •์ฑ…์„ ์„ค์ •ํ•ด์„œ ์•ฝํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์–ด:

# ์ „์—ญ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ •์ฑ… ํ™•์ธ
ipa pwpolicy-show

# ๋น„๋ฐ€๋ฒˆํ˜ธ ์ •์ฑ… ์ˆ˜์ •
ipa pwpolicy-mod --minlength=12 --minclasses=3 --maxlife=90 --minlife=1

# ์˜ต์…˜ ์„ค๋ช…:
# --minlength: ์ตœ์†Œ ๊ธธ์ด (12์ž)
# --minclasses: ์ตœ์†Œ ๋ฌธ์ž ํด๋ž˜์Šค ์ˆ˜ (๋Œ€๋ฌธ์ž, ์†Œ๋ฌธ์ž, ์ˆซ์ž, ํŠน์ˆ˜๋ฌธ์ž ์ค‘ 3๊ฐ€์ง€)
# --maxlife: ์ตœ๋Œ€ ์œ ํšจ ๊ธฐ๊ฐ„ (90์ผ)
# --minlife: ์ตœ์†Œ ์‚ฌ์šฉ ๊ธฐ๊ฐ„ (1์ผ, ๋„ˆ๋ฌด ์ž์ฃผ ๋ณ€๊ฒฝ ๋ฐฉ์ง€)

# ํŠน์ • ๊ทธ๋ฃน์— ๋Œ€ํ•œ ๋ณ„๋„ ์ •์ฑ…
ipa pwpolicy-add admins --minlength=16 --minclasses=4 --maxlife=60

๐Ÿšช ๊ณ„์ • ์ž ๊ธˆ ์ •์ฑ…

๋ฌด์ฐจ๋ณ„ ๋Œ€์ž… ๊ณต๊ฒฉ(Brute Force)์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋กœ๊ทธ์ธ ์‹คํŒจ ์‹œ ๊ณ„์ •์„ ์ž ๊ทธ๋Š” ์ •์ฑ…:

# ๊ณ„์ • ์ž ๊ธˆ ์ •์ฑ… ์„ค์ •
ipa pwpolicy-mod --maxfail=5 --failinterval=300 --lockouttime=600

# ์˜ต์…˜ ์„ค๋ช…:
# --maxfail: ์ตœ๋Œ€ ์‹คํŒจ ํšŸ์ˆ˜ (5ํšŒ)
# --failinterval: ์‹คํŒจ ์นด์šดํŠธ ๋ฆฌ์…‹ ์‹œ๊ฐ„ (300์ดˆ = 5๋ถ„)
# --lockouttime: ์ž ๊ธˆ ์‹œ๊ฐ„ (600์ดˆ = 10๋ถ„)

# ์ž ๊ธด ๊ณ„์ • ํ•ด์ œ
ipa user-unlock jsmith

๐Ÿ” ๊ฐ์‚ฌ ๋กœ๊ทธ ํ™œ์„ฑํ™”

๋ชจ๋“  ๊ด€๋ฆฌ ์ž‘์—…์„ ๋กœ๊ทธ๋กœ ๋‚จ๊ฒจ์„œ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์–ด:

# ๊ฐ์‚ฌ ๋กœ๊ทธ ํ™•์ธ
tail -f /var/log/httpd/error_log
tail -f /var/log/dirsrv/slapd-EXAMPLE-COM/access

# 389 Directory Server ๊ฐ์‚ฌ ๋กœ๊ทธ ํ™œ์„ฑํ™”
ldapmodify -x -D "cn=Directory Manager" -W << EOF
dn: cn=config
changetype: modify
replace: nsslapd-auditlog-logging-enabled
nsslapd-auditlog-logging-enabled: on
EOF

# ๊ฐ์‚ฌ ๋กœ๊ทธ ์œ„์น˜
tail -f /var/log/dirsrv/slapd-EXAMPLE-COM/audit

๐ŸŒ SSL/TLS ์ธ์ฆ์„œ ๊ต์ฒด

ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ๋Š” ์ž์ฒด ์„œ๋ช… ์ธ์ฆ์„œ ๋Œ€์‹  ๊ณต์ธ ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์ข‹์•„:

# Let's Encrypt ์ธ์ฆ์„œ ๋ฐœ๊ธ‰ (certbot ์‚ฌ์šฉ)
dnf install -y certbot
certbot certonly --standalone -d ipa.example.com

# FreeIPA์— ์ธ์ฆ์„œ ์„ค์น˜
ipa-server-certinstall -w \
  /etc/letsencrypt/live/ipa.example.com/cert.pem \
  /etc/letsencrypt/live/ipa.example.com/privkey.pem \
  /etc/letsencrypt/live/ipa.example.com/chain.pem

# ์›น ์„œ๋ฒ„ ์žฌ์‹œ์ž‘
systemctl restart httpd

๐Ÿ”ง ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ ํ™œ์šฉํ•˜๊ธฐ

FreeIPA์˜ ์ง„์งœ ํŒŒ์›Œ๋Š” ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ๋“ค์— ์žˆ์–ด! ๋ช‡ ๊ฐ€์ง€ ์œ ์šฉํ•œ ๊ธฐ๋Šฅ๋“ค์„ ์†Œ๊ฐœํ• ๊ฒŒ. ๐Ÿš€

๐ŸŽซ ์„œ๋น„์Šค ๊ณ„์ • ๋ฐ Keytab

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ ์„œ๋น„์Šค๊ฐ€ ์ž๋™์œผ๋กœ ์ธ์ฆ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ์„œ๋น„์Šค ๊ณ„์ •์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด:

# ์„œ๋น„์Šค ์ถ”๊ฐ€ (์˜ˆ: HTTP ์„œ๋น„์Šค)
ipa service-add HTTP/web01.example.com

# Keytab ํŒŒ์ผ ์ƒ์„ฑ
ipa-getkeytab -s ipa.example.com \
  -p HTTP/web01.example.com \
  -k /etc/httpd/conf/httpd.keytab

# Keytab ํŒŒ์ผ ๊ถŒํ•œ ์„ค์ •
chown apache:apache /etc/httpd/conf/httpd.keytab
chmod 600 /etc/httpd/conf/httpd.keytab

# Keytab ๋‚ด์šฉ ํ™•์ธ
klist -kt /etc/httpd/conf/httpd.keytab

์ด์ œ Apache ์›น ์„œ๋ฒ„๊ฐ€ Kerberos ์ธ์ฆ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด! ์‚ฌ์šฉ์ž๊ฐ€ ์›น ํŽ˜์ด์ง€์— ์ ‘์†ํ•˜๋ฉด ์ž๋™์œผ๋กœ SSO๊ฐ€ ์ž‘๋™ํ•˜์ง€. ๐Ÿ˜Ž

๐Ÿ”— LDAP ํ†ตํ•ฉ

๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค์ด FreeIPA์˜ LDAP ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด. ์˜ˆ๋ฅผ ๋“ค์–ด GitLab, Jenkins, Nextcloud ๊ฐ™์€ ์„œ๋น„์Šค๋“ค์ด FreeIPA ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฑฐ์ง€!

LDAP ์—ฐ๊ฒฐ ์ •๋ณด:

โ€ข LDAP Server: ldap://ipa.example.com
โ€ข LDAPS Server: ldaps://ipa.example.com:636
โ€ข Base DN: dc=example,dc=com
โ€ข User DN: cn=users,cn=accounts,dc=example,dc=com
โ€ข Group DN: cn=groups,cn=accounts,dc=example,dc=com
โ€ข Bind DN: uid=admin,cn=users,cn=accounts,dc=example,dc=com
โ€ข User Filter: (uid=%s)
โ€ข Group Filter: (member=uid=%s,cn=users,cn=accounts,dc=example,dc=com)

๋Œ€๋ถ€๋ถ„์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ด ์ •๋ณด๋งŒ ์ž…๋ ฅํ•˜๋ฉด FreeIPA์™€ ์—ฐ๋™๋ผ!

๐ŸŒ DNS ๊ด€๋ฆฌ

FreeIPA์˜ ํ†ตํ•ฉ DNS๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ˜ธ์ŠคํŠธ ๊ด€๋ฆฌ๊ฐ€ ํ›จ์”ฌ ์‰ฌ์›Œ์ ธ:

# DNS ์กด ํ™•์ธ
ipa dnszone-find

# DNS ๋ ˆ์ฝ”๋“œ ์ถ”๊ฐ€
ipa dnsrecord-add example.com web01 --a-rec=192.168.1.20

# CNAME ๋ ˆ์ฝ”๋“œ ์ถ”๊ฐ€
ipa dnsrecord-add example.com www --cname-rec=web01.example.com.

# MX ๋ ˆ์ฝ”๋“œ ์ถ”๊ฐ€
ipa dnsrecord-add example.com @ --mx-rec="10 mail.example.com."

# DNS ๋ ˆ์ฝ”๋“œ ํ™•์ธ
ipa dnsrecord-show example.com web01

# DNS ๋ ˆ์ฝ”๋“œ ์‚ญ์ œ
ipa dnsrecord-del example.com web01 --a-rec=192.168.1.20

๐ŸŽญ Sudo ๊ทœ์น™

๋ˆ„๊ฐ€ ์–ด๋–ค ์„œ๋ฒ„์—์„œ sudo ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์–ด:

# Sudo ๊ทœ์น™ ์ƒ์„ฑ
ipa sudorule-add allow_admins_all

# ์‚ฌ์šฉ์ž/๊ทธ๋ฃน ์ถ”๊ฐ€
ipa sudorule-add-user allow_admins_all --groups=admins

# ํ˜ธ์ŠคํŠธ ์ถ”๊ฐ€ (๋ชจ๋“  ํ˜ธ์ŠคํŠธ)
ipa sudorule-mod allow_admins_all --hostcat=all

# ๋ช…๋ น์–ด ์ถ”๊ฐ€ (๋ชจ๋“  ๋ช…๋ น์–ด)
ipa sudorule-mod allow_admins_all --cmdcat=all

# ๊ทœ์น™ ํ™œ์„ฑํ™”
ipa sudorule-enable allow_admins_all

# ํŠน์ • ๋ช…๋ น์–ด๋งŒ ํ—ˆ์šฉํ•˜๋Š” ๊ทœ์น™
ipa sudorule-add allow_restart_httpd
ipa sudorule-add-user allow_restart_httpd --groups=webadmins
ipa sudorule-add-host allow_restart_httpd --hostgroups=webservers
ipa sudocmd-add /usr/bin/systemctl
ipa sudocmdgroup-add webserver_commands
ipa sudocmdgroup-add-member webserver_commands --sudocmds="/usr/bin/systemctl"
ipa sudorule-add-allow-command allow_restart_httpd --sudocmdgroups=webserver_commands

์ด์ œ ํด๋ผ์ด์–ธํŠธ์—์„œ sudo ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด FreeIPA์˜ ๊ทœ์น™์— ๋”ฐ๋ผ ๊ถŒํ•œ์ด ๋ถ€์—ฌ๋ผ!

๐Ÿ› ๋ฌธ์ œ ํ•ด๊ฒฐ (Troubleshooting)

FreeIPA๋ฅผ ์šด์˜ํ•˜๋‹ค ๋ณด๋ฉด ๊ฐ€๋” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ์–ด. ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋“ค๊ณผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์ž! ๐Ÿ”ง

โŒ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์„ ๋•Œ

์ฆ์ƒ: ํด๋ผ์ด์–ธํŠธ์—์„œ kinit์ด๋‚˜ id ๋ช…๋ น์–ด๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์Œ

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:

# 1. DNS ํ™•์ธ
nslookup ipa.example.com
dig _kerberos._tcp.example.com SRV

# 2. ๋ฐฉํ™”๋ฒฝ ํ™•์ธ
telnet ipa.example.com 389
telnet ipa.example.com 88

# 3. SSSD ์žฌ์‹œ์ž‘
systemctl restart sssd
systemctl status sssd

# 4. SSSD ์บ์‹œ ์‚ญ์ œ ํ›„ ์žฌ์‹œ์ž‘
systemctl stop sssd
rm -rf /var/lib/sss/db/*
systemctl start sssd

# 5. ๋กœ๊ทธ ํ™•์ธ
tail -f /var/log/sssd/sssd_example.com.log

โฐ ์‹œ๊ฐ„ ๋™๊ธฐํ™” ๋ฌธ์ œ

์ฆ์ƒ: "Clock skew too great" ์—๋Ÿฌ ๋ฐœ์ƒ

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:

# Kerberos๋Š” ์‹œ๊ฐ„์— ๋ฏผ๊ฐ! 5๋ถ„ ์ด์ƒ ์ฐจ์ด๋‚˜๋ฉด ์ธ์ฆ ์‹คํŒจ

# 1. ์‹œ๊ฐ„ ํ™•์ธ
date
timedatectl

# 2. NTP ๋™๊ธฐํ™”
systemctl enable chronyd
systemctl start chronyd
chronyc sources

# 3. ์ˆ˜๋™ ์‹œ๊ฐ„ ๋™๊ธฐํ™”
ntpdate ipa.example.com

# 4. ํƒ€์ž„์กด ์„ค์ •
timedatectl set-timezone Asia/Seoul

๐Ÿ”„ ๋ณต์ œ ๋™๊ธฐํ™” ๋ฌธ์ œ

์ฆ์ƒ: ๋ณต์ œ ์„œ๋ฒ„ ๊ฐ„ ๋ฐ์ดํ„ฐ๊ฐ€ ๋™๊ธฐํ™”๋˜์ง€ ์•Š์Œ

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:

# 1. ๋ณต์ œ ์ƒํƒœ ํ™•์ธ
ipa-replica-manage list
ipa-replica-manage list-ruv

# 2. ๋ณต์ œ ํ˜‘์•ฝ ์ƒํƒœ ํ™•์ธ
ipa-replica-manage list -v ipa-replica.example.com

# 3. ์ˆ˜๋™ ๋™๊ธฐํ™” ๊ฐ•์ œ ์‹คํ–‰
ipa-replica-manage re-initialize --from=ipa.example.com

# 4. ๋ณต์ œ ์ถฉ๋Œ ํ™•์ธ ๋ฐ ํ•ด๊ฒฐ
ipa-replica-manage list-conflicts

# 5. ๋ณต์ œ ๋กœ๊ทธ ํ™•์ธ
tail -f /var/log/dirsrv/slapd-EXAMPLE-COM/errors

๐Ÿ” ์ธ์ฆ์„œ ๋งŒ๋ฃŒ ๋ฌธ์ œ

์ฆ์ƒ: ์›น UI ์ ‘์† ๋ถˆ๊ฐ€, ์ธ์ฆ ์‹คํŒจ

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:

# 1. ์ธ์ฆ์„œ ๋งŒ๋ฃŒ์ผ ํ™•์ธ
ipa-getcert list

# 2. ๋งŒ๋ฃŒ๋œ ์ธ์ฆ์„œ ๊ฐฑ์‹ 
ipa-getcert resubmit -i [Request ID]

# 3. ์ธ์ฆ์„œ ์ž๋™ ๊ฐฑ์‹  ์„ค์ • ํ™•์ธ
systemctl status certmonger

# 4. CA ์ธ์ฆ์„œ ํ™•์ธ
openssl x509 -in /etc/ipa/ca.crt -text -noout

# 5. ์ธ์ฆ์„œ ์ˆ˜๋™ ๊ฐฑ์‹ 
ipa-cacert-manage renew --external-ca

๐Ÿ’พ ๋””์Šคํฌ ๊ณต๊ฐ„ ๋ถ€์กฑ

์ฆ์ƒ: ์„œ๋น„์Šค ์‹œ์ž‘ ์‹คํŒจ, ๋กœ๊ทธ ๊ธฐ๋ก ์•ˆ ๋จ

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:

# 1. ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰ ํ™•์ธ
df -h
du -sh /var/lib/dirsrv/*
du -sh /var/log/*

# 2. ์˜ค๋ž˜๋œ ๋กœ๊ทธ ์‚ญ์ œ
find /var/log -name "*.log.*" -mtime +30 -delete
find /var/log/dirsrv -name "access.*" -mtime +30 -delete

# 3. ๋กœ๊ทธ ๋กœํ…Œ์ด์…˜ ์„ค์ •
vi /etc/logrotate.d/dirsrv

# 4. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์••์ถ•
dsconf -D "cn=Directory Manager" ldap://localhost backend compact userRoot

# 5. ํŠธ๋žœ์žญ์…˜ ๋กœ๊ทธ ์ •๋ฆฌ
dsconf -D "cn=Directory Manager" ldap://localhost backend db2ldif userRoot
โš ๏ธ ๊ธด๊ธ‰ ๋ณต๊ตฌ ๋ฐฉ๋ฒ•
๋ชจ๋“  ์„œ๋น„์Šค๊ฐ€ ๋‹ค์šด๋˜์—ˆ์„ ๋•Œ:
ipactl stop โ†’ ๋ฌธ์ œ ํ•ด๊ฒฐ โ†’ ipactl start

์™„์ „ํžˆ ๋ง๊ฐ€์กŒ์„ ๋•Œ:
1. ๋ฐฑ์—…์—์„œ ๋ณต๊ตฌ: ipa-backup๋กœ ๋งŒ๋“  ๋ฐฑ์—… ์‚ฌ์šฉ
2. ๋ณต์ œ ์„œ๋ฒ„์—์„œ ์žฌ๊ตฌ์ถ•: ๋ณต์ œ ์„œ๋ฒ„๋ฅผ ๋งˆ์Šคํ„ฐ๋กœ ์Šน๊ฒฉ
3. ์ตœ์•…์˜ ๊ฒฝ์šฐ: ์ƒˆ๋กœ ์„ค์น˜ ํ›„ LDIF ํŒŒ์ผ๋กœ ๋ฐ์ดํ„ฐ ๋ณต๊ตฌ

๐Ÿ“Š ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ์œ ์ง€๋ณด์ˆ˜

FreeIPA๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ์šด์˜ํ•˜๋ ค๋ฉด ์ •๊ธฐ์ ์ธ ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ํ•„์ˆ˜์•ผ! ๐Ÿ”

๐Ÿ“ˆ ์ฃผ์š” ๋ชจ๋‹ˆํ„ฐ๋ง ํ•ญ๋ชฉ

ํ•ญ๋ชฉ ํ™•์ธ ๋ฐฉ๋ฒ• ์ •์ƒ ๊ธฐ์ค€
์„œ๋น„์Šค ์ƒํƒœ ipactl status ๋ชจ๋“  ์„œ๋น„์Šค RUNNING
๋ณต์ œ ๋™๊ธฐํ™” ipa-replica-manage list ๋ชจ๋“  ๋ณต์ œ ์„œ๋ฒ„ ์—ฐ๊ฒฐ๋จ
๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰ df -h 80% ๋ฏธ๋งŒ
๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ free -h ์—ฌ์œ  ๋ฉ”๋ชจ๋ฆฌ ์žˆ์Œ
์ธ์ฆ์„œ ๋งŒ๋ฃŒ ipa-getcert list 30์ผ ์ด์ƒ ๋‚จ์Œ
๋กœ๊ทธ ์—๋Ÿฌ journalctl -xe ์น˜๋ช…์  ์—๋Ÿฌ ์—†์Œ

๐Ÿ”„ ์ •๊ธฐ ๋ฐฑ์—…

๋ฐฑ์—…์€ ์ •๋ง ์ค‘์š”ํ•ด! ์ตœ์†Œ ์ฃผ 1ํšŒ๋Š” ๋ฐฑ์—…ํ•ด์•ผ ํ•ด:

# ์ „์ฒด ๋ฐฑ์—… (๋ฐ์ดํ„ฐ + ์„ค์ •)
ipa-backup

# ๋ฐฑ์—… ํŒŒ์ผ ์œ„์น˜
ls -lh /var/lib/ipa/backup/

# ๋ฐ์ดํ„ฐ๋งŒ ๋ฐฑ์—… (LDIF ํ˜•์‹)
ipa-backup --data --online

# ๋ฐฑ์—…์—์„œ ๋ณต๊ตฌ
ipa-restore /var/lib/ipa/backup/ipa-full-2023-12-15-10-00-00

# ๋ฐฑ์—… ์ž๋™ํ™” (cron)
cat > /etc/cron.weekly/ipa-backup.sh << 'EOF'
#!/bin/bash
/usr/sbin/ipa-backup --online
find /var/lib/ipa/backup -name "ipa-*" -mtime +30 -delete
EOF

chmod +x /etc/cron.weekly/ipa-backup.sh

๐Ÿ”ง ์ •๊ธฐ ์œ ์ง€๋ณด์ˆ˜ ์ž‘์—…

๋งค์ผ:

โ€ข ์„œ๋น„์Šค ์ƒํƒœ ํ™•์ธ
โ€ข ๋กœ๊ทธ ์—๋Ÿฌ ํ™•์ธ
โ€ข ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰ ํ™•์ธ

๋งค์ฃผ:

โ€ข ์ „์ฒด ๋ฐฑ์—… ์‹คํ–‰
โ€ข ๋ณต์ œ ๋™๊ธฐํ™” ์ƒํƒœ ํ™•์ธ
โ€ข ๋ณด์•ˆ ์—…๋ฐ์ดํŠธ ์ ์šฉ
โ€ข ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ณ„์ • ์ •๋ฆฌ

๋งค์›”:

โ€ข ์ธ์ฆ์„œ ๋งŒ๋ฃŒ์ผ ํ™•์ธ
โ€ข ๋น„๋ฐ€๋ฒˆํ˜ธ ์ •์ฑ… ์ค€์ˆ˜ ์—ฌ๋ถ€ ํ™•์ธ
โ€ข HBAC ๊ทœ์น™ ๊ฒ€ํ† 
โ€ข ์„ฑ๋Šฅ ์ตœ์ ํ™” (๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์••์ถ• ๋“ฑ)

๋ถ„๊ธฐ๋ณ„:

โ€ข ์žฌํ•ด ๋ณต๊ตฌ ํ…Œ์ŠคํŠธ
โ€ข ๋ณด์•ˆ ๊ฐ์‚ฌ
โ€ข ์šฉ๋Ÿ‰ ๊ณ„ํš ๊ฒ€ํ† 
โ€ข ๋ฌธ์„œ ์—…๋ฐ์ดํŠธ

๐ŸŽ“ ์‹ค์ „ ํ™œ์šฉ ์‹œ๋‚˜๋ฆฌ์˜ค

์ด๋ก ์€ ์ถฉ๋ถ„ํžˆ ๋ฐฐ์› ์œผ๋‹ˆ, ์ด์ œ ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•˜๋Š”์ง€ ์‹œ๋‚˜๋ฆฌ์˜ค๋กœ ์•Œ์•„๋ณด์ž! ๐Ÿ’ผ

๐Ÿข ์‹œ๋‚˜๋ฆฌ์˜ค 1: ์Šคํƒ€ํŠธ์—… ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ตฌ์ถ•

์ƒํ™ฉ: ๊ฐœ๋ฐœ์ž 10๋ช…, ์„œ๋ฒ„ 20๋Œ€๋ฅผ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์Šคํƒ€ํŠธ์—…

๊ตฌ์„ฑ:

1 FreeIPA ์„œ๋ฒ„ 2๋Œ€ ๊ตฌ์ถ• (๋งˆ์Šคํ„ฐ + ๋ณต์ œ)
2 ๊ทธ๋ฃน ๊ตฌ์กฐ ์„ค๊ณ„
# ๊ทธ๋ฃน ์ƒ์„ฑ
ipa group-add developers --desc="๊ฐœ๋ฐœํŒ€"
ipa group-add devops --desc="๋ฐ๋ธŒ์˜ต์ŠคํŒ€"
ipa group-add admins --desc="์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž"

# ์‚ฌ์šฉ์ž ์ƒ์„ฑ ๋ฐ ๊ทธ๋ฃน ํ• ๋‹น
ipa user-add jsmith --first=John --last=Smith --password
ipa group-add-member developers --users=jsmith

ipa user-add mjones --first=Mike --last=Jones --password
ipa group-add-member devops --users=mjones
3 ํ˜ธ์ŠคํŠธ ๊ทธ๋ฃน ๋ฐ HBAC ๊ทœ์น™
# ํ˜ธ์ŠคํŠธ ๊ทธ๋ฃน
ipa hostgroup-add dev-servers --desc="๊ฐœ๋ฐœ ์„œ๋ฒ„"
ipa hostgroup-add prod-servers --desc="์šด์˜ ์„œ๋ฒ„"

# ํ˜ธ์ŠคํŠธ ์ถ”๊ฐ€
ipa host-add dev01.example.com
ipa hostgroup-add-member dev-servers --hosts=dev01.example.com

# HBAC ๊ทœ์น™
ipa hbacrule-add allow_devs_to_dev
ipa hbacrule-add-user allow_devs_to_dev --groups=developers
ipa hbacrule-add-host allow_devs_to_dev --hostgroups=dev-servers
ipa hbacrule-add-service allow_devs_to_dev --hbacsvcs=sshd
ipa hbacrule-enable allow_devs_to_dev

# ์šด์˜ ์„œ๋ฒ„๋Š” ๋ฐ๋ธŒ์˜ต์ŠคํŒ€๋งŒ ์ ‘๊ทผ
ipa hbacrule-add allow_devops_to_prod
ipa hbacrule-add-user allow_devops_to_prod --groups=devops
ipa hbacrule-add-host allow_devops_to_prod --hostgroups=prod-servers
ipa hbacrule-add-service allow_devops_to_prod --hbacsvcs=sshd
ipa hbacrule-enable allow_devops_to_prod

# ๊ธฐ๋ณธ allow_all ๊ทœ์น™ ๋น„ํ™œ์„ฑํ™”
ipa hbacrule-disable allow_all
4 Sudo ๊ทœ์น™ ์„ค์ •
# ๋ฐ๋ธŒ์˜ต์ŠคํŒ€์€ ์šด์˜ ์„œ๋ฒ„์—์„œ ๋ชจ๋“  sudo ๋ช…๋ น ๊ฐ€๋Šฅ
ipa sudorule-add devops_all_sudo
ipa sudorule-add-user devops_all_sudo --groups=devops
ipa sudorule-add-host devops_all_sudo --hostgroups=prod-servers
ipa sudorule-mod devops_all_sudo --cmdcat=all
ipa sudorule-enable devops_all_sudo

# ๊ฐœ๋ฐœ์ž๋Š” ๊ฐœ๋ฐœ ์„œ๋ฒ„์—์„œ ์ œํ•œ๋œ sudo ๋ช…๋ น๋งŒ ๊ฐ€๋Šฅ
ipa sudorule-add devs_limited_sudo
ipa sudorule-add-user devs_limited_sudo --groups=developers
ipa sudorule-add-host devs_limited_sudo --hostgroups=dev-servers
ipa sudocmd-add /usr/bin/systemctl
ipa sudocmd-add /usr/bin/docker
ipa sudocmdgroup-add dev_commands
ipa sudocmdgroup-add-member dev_commands --sudocmds="/usr/bin/systemctl"
ipa sudocmdgroup-add-member dev_commands --sudocmds="/usr/bin/docker"
ipa sudorule-add-allow-command devs_limited_sudo --sudocmdgroups=dev_commands
ipa sudorule-enable devs_limited_sudo

์ด๋ ‡๊ฒŒ ๊ตฌ์„ฑํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๋Š” ๊ฐœ๋ฐœ ์„œ๋ฒ„์—๋งŒ ์ ‘๊ทผํ•˜๊ณ , ์šด์˜ ์„œ๋ฒ„๋Š” ๋ฐ๋ธŒ์˜ต์ŠคํŒ€๋งŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด! ๊ถŒํ•œ ๋ถ„๋ฆฌ๊ฐ€ ๋ช…ํ™•ํ•˜์ง€? ๐Ÿ˜Š

๐Ÿญ ์‹œ๋‚˜๋ฆฌ์˜ค 2: ์ค‘๊ฒฌ๊ธฐ์—… ์ „์‚ฌ ์‹œ์Šคํ…œ

์ƒํ™ฉ: ์ง์› 100๋ช…, ์„œ๋ฒ„ 50๋Œ€, ์—ฌ๋Ÿฌ ๋ถ€์„œ์™€ ์ง€์‚ฌ๊ฐ€ ์žˆ๋Š” ์ค‘๊ฒฌ๊ธฐ์—…

๊ตฌ์„ฑ:

1 ์ง€๋ฆฌ์  ๋ถ„์‚ฐ ๋ณต์ œ ์„œ๋ฒ„
# ๋ณธ์‚ฌ (์„œ์šธ)
ipa.seoul.company.com (๋งˆ์Šคํ„ฐ)

# ์ง€์‚ฌ (๋ถ€์‚ฐ)
ipa.busan.company.com (๋ณต์ œ)

# ์ง€์‚ฌ (๋Œ€๊ตฌ)
ipa.daegu.company.com (๋ณต์ œ)

# ๊ฐ ์ง€์‚ฌ ์„œ๋ฒ„๋Š” ๊ฐ€๊นŒ์šด FreeIPA ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก DNS ์„ค์ •
2 ๋ถ€์„œ๋ณ„ ์กฐ์ง ๊ตฌ์กฐ
# ๋ถ€์„œ๋ณ„ ๊ทธ๋ฃน
ipa group-add sales --desc="์˜์—…๋ถ€"
ipa group-add marketing --desc="๋งˆ์ผ€ํŒ…๋ถ€"
ipa group-add hr --desc="์ธ์‚ฌ๋ถ€"
ipa group-add it --desc="IT๋ถ€"
ipa group-add finance --desc="์žฌ๋ฌด๋ถ€"

# ์ง๊ธ‰๋ณ„ ๊ทธ๋ฃน
ipa group-add executives --desc="์ž„์›"
ipa group-add managers --desc="ํŒ€์žฅ"
ipa group-add staff --desc="์ผ๋ฐ˜ ์ง์›"

# ์ค‘์ฒฉ ๊ทธ๋ฃน (์ž„์›์€ ๋ชจ๋“  ๋ถ€์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅ)
ipa group-add-member executives --groups=sales,marketing,hr,it,finance
3 ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ†ตํ•ฉ

์‚ฌ๋‚ด ์‹œ์Šคํ…œ๋“ค์„ FreeIPA์™€ ์—ฐ๋™:

โ€ข GitLab: LDAP ์ธ์ฆ ์„ค์ •
โ€ข Jenkins: LDAP ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ฌ์šฉ
โ€ข Nextcloud: LDAP ๋ฐฑ์—”๋“œ ์—ฐ๋™
โ€ข Jira/Confluence: LDAP ๋””๋ ‰ํ„ฐ๋ฆฌ ์—ฐ๊ฒฐ
โ€ข VPN: FreeIPA ์ธ์ฆ ์‚ฌ์šฉ
4 ๋ณด์•ˆ ๊ฐ•ํ™”
# 2๋‹จ๊ณ„ ์ธ์ฆ ํ•„์ˆ˜ํ™” (์ž„์› ๋ฐ IT๋ถ€)
for user in $(ipa group-show executives --all | grep "Member users:" | cut -d: -f2); do
  ipa otptoken-add --type=totp --owner=$user
done

# ๊ฐ•๋ ฅํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ •์ฑ…
ipa pwpolicy-mod --minlength=14 --minclasses=4 --maxlife=60

# ๊ณ„์ • ์ž ๊ธˆ ์ •์ฑ…
ipa pwpolicy-mod --maxfail=3 --failinterval=300 --lockouttime=1800

# ๊ฐ์‚ฌ ๋กœ๊ทธ ์ค‘์•™ ์ง‘์ค‘ํ™” (Syslog ์„œ๋ฒ„๋กœ ์ „์†ก)
vi /etc/rsyslog.conf
# *.* @@syslog.company.com:514
๐Ÿ’ก ์žฌ๋Šฅ๋„ท์—์„œ ์ „๋ฌธ๊ฐ€ ์ฐพ๊ธฐ
์ด๋Ÿฐ ๊ทœ๋ชจ์˜ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๋ ค๋ฉด ๊ฒฝํ—˜์ด ํ’๋ถ€ํ•œ ์ „๋ฌธ๊ฐ€์˜ ๋„์›€์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์–ด. ์žฌ๋Šฅ๋„ท์—์„œ FreeIPA ๊ตฌ์ถ• ๊ฒฝํ—˜์ด ์žˆ๋Š” ์‹œ์Šคํ…œ ์—”์ง€๋‹ˆ์–ด๋ฅผ ์ฐพ์•„๋ณด๋Š” ๊ฒƒ๋„ ์ข‹์€ ๋ฐฉ๋ฒ•์ด์•ผ! ์„ค๊ณ„๋ถ€ํ„ฐ ๊ตฌ์ถ•, ์šด์˜๊นŒ์ง€ ์ „ ๊ณผ์ •์„ ๋„์™€์ค„ ์ˆ˜ ์žˆ๊ฑฐ๋“ . ๐Ÿค

๐Ÿ“š ์ถ”๊ฐ€ ํ•™์Šต ์ž๋ฃŒ ๋ฐ ์ปค๋ฎค๋‹ˆํ‹ฐ

FreeIPA๋ฅผ ๋” ๊นŠ์ด ๊ณต๋ถ€ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ ์ž๋ฃŒ๋“ค์„ ์ฐธ๊ณ ํ•ด๋ด! ๐Ÿ“–

๐ŸŒ ๊ณต์‹ ๋ฌธ์„œ ๋ฐ ๋ฆฌ์†Œ์Šค

๐Ÿ”น FreeIPA ๊ณต์‹ ์›น์‚ฌ์ดํŠธ
https://www.freeipa.org
๊ฐ€์žฅ ์ •ํ™•ํ•˜๊ณ  ์ตœ์‹  ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ณณ!

๐Ÿ”น Red Hat ๋ฌธ์„œ
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/configuring_and_managing_identity_management/
RHEL ๊ธฐ์ค€์ด์ง€๋งŒ FreeIPA์™€ ๊ฑฐ์˜ ๋™์ผํ•ด.

๐Ÿ”น FreeIPA GitHub
https://github.com/freeipa/freeipa
์†Œ์Šค ์ฝ”๋“œ์™€ ์ด์Šˆ ํŠธ๋ž˜์ปค.

๐Ÿ”น FreeIPA ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ
freeipa-users@lists.fedorahosted.org
์งˆ๋ฌธํ•˜๊ณ  ๋‹ต๋ณ€๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ.

๐Ÿ“บ ์ถ”์ฒœ ํ•™์Šต ๊ฒฝ๋กœ

1 ๊ธฐ์ดˆ ๋‹ค์ง€๊ธฐ

โ€ข LDAP ๊ฐœ๋… ์ดํ•ด
โ€ข Kerberos ์ธ์ฆ ์›๋ฆฌ
โ€ข DNS ๊ธฐ๋ณธ ์ง€์‹
โ€ข ๋ฆฌ๋ˆ…์Šค ์‹œ์Šคํ…œ ๊ด€๋ฆฌ

2 ์‹ค์Šต ํ™˜๊ฒฝ ๊ตฌ์ถ•

โ€ข VirtualBox๋‚˜ VMware๋กœ ๊ฐ€์ƒ ๋จธ์‹  3๋Œ€ ์ค€๋น„
โ€ข CentOS Stream 8 ๋˜๋Š” Rocky Linux 8 ์„ค์น˜
โ€ข ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ (NAT ๋˜๋Š” Bridge)
โ€ข ์Šค๋ƒ…์ƒท ๊ธฐ๋Šฅ ํ™œ์šฉ (์‹ค์ˆ˜ํ•ด๋„ ๋ณต๊ตฌ ๊ฐ€๋Šฅ!)

3 ๋‹จ๊ณ„๋ณ„ ์‹ค์Šต

โ€ข 1๋‹จ๊ณ„: ๊ธฐ๋ณธ ์„œ๋ฒ„ ์„ค์น˜ ๋ฐ ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ
โ€ข 2๋‹จ๊ณ„: ํด๋ผ์ด์–ธํŠธ ๋“ฑ๋ก ๋ฐ SSO ํ…Œ์ŠคํŠธ
โ€ข 3๋‹จ๊ณ„: ๋ณต์ œ ์„œ๋ฒ„ ๊ตฌ์ถ•
โ€ข 4๋‹จ๊ณ„: HBAC ๋ฐ Sudo ๊ทœ์น™ ์„ค์ •
โ€ข 5๋‹จ๊ณ„: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ†ตํ•ฉ (GitLab ๋“ฑ)
โ€ข 6๋‹จ๊ณ„: ๋ฐฑ์—… ๋ฐ ๋ณต๊ตฌ ํ…Œ์ŠคํŠธ

4 ๊ณ ๊ธ‰ ์ฃผ์ œ

โ€ข ์ธ์ฆ์„œ ๊ด€๋ฆฌ ๋ฐ PKI
โ€ข ์™ธ๋ถ€ CA ํ†ตํ•ฉ
โ€ข Active Directory ์‹ ๋ขฐ ๊ด€๊ณ„
โ€ข ์„ฑ๋Šฅ ํŠœ๋‹ ๋ฐ ์ตœ์ ํ™”
โ€ข ๋Œ€๊ทœ๋ชจ ํ™˜๊ฒฝ ์„ค๊ณ„

๐ŸŽฏ ๋งˆ๋ฌด๋ฆฌํ•˜๋ฉฐ

์™€! ์—ฌ๊ธฐ๊นŒ์ง€ ์ฝ์—ˆ๋‹ค๋ฉด ์ •๋ง ๋Œ€๋‹จํ•ด! ๐Ÿ‘ FreeIPA์— ๋Œ€ํ•ด ๊ฝค ๋งŽ์€ ๊ฑธ ๋ฐฐ์› ์„ ๊ฑฐ์•ผ. ์ฒ˜์Œ์—” ๋ณต์žกํ•ด ๋ณด์ด์ง€๋งŒ, ํ•œ ๋ฒˆ ๊ตฌ์ถ•ํ•ด๋†“์œผ๋ฉด ์ •๋ง ํŽธ๋ฆฌํ•˜๊ณ  ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๋ผ๋Š” ๊ฑธ ์•Œ๊ฒŒ ๋  ๊ฑฐ์•ผ.

โœจ ํ•ต์‹ฌ ์š”์•ฝ

1๏ธโƒฃ FreeIPA๋Š” ๋ฌด์—‡์ธ๊ฐ€?
๋ฆฌ๋ˆ…์Šค ํ™˜๊ฒฝ์„ ์œ„ํ•œ ํ†ตํ•ฉ ID ๊ด€๋ฆฌ ์†”๋ฃจ์…˜. LDAP, Kerberos, DNS, CA ๋“ฑ์„ ํ•˜๋‚˜๋กœ ๋ฌถ์€ ํŒจํ‚ค์ง€.

2๏ธโƒฃ ์™œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋‚˜?
์ค‘์•™ ์ง‘์ค‘์‹ ๊ณ„์ • ๊ด€๋ฆฌ, SSO, ๊ฐ•๋ ฅํ•œ ๋ณด์•ˆ, ์„ธ๋ฐ€ํ•œ ๊ถŒํ•œ ์ œ์–ด, ๊ทธ๋ฆฌ๊ณ  ์™„์ „ ๋ฌด๋ฃŒ!

3๏ธโƒฃ ์–ด๋–ป๊ฒŒ ๊ตฌ์ถ•ํ•˜๋‚˜?
ipa-server-install ๋ช…๋ น์–ด ํ•˜๋‚˜๋กœ ์‹œ์ž‘. ์›น UI์™€ CLI ๋ชจ๋‘ ์ง€์›.

4๏ธโƒฃ ๊ณ ๊ฐ€์šฉ์„ฑ์€?
๋ณต์ œ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•ด์„œ ์žฅ์•  ๋Œ€์‘ ๋ฐ ๋ถ€ํ•˜ ๋ถ„์‚ฐ.

5๏ธโƒฃ ๋ณด์•ˆ์€?
2๋‹จ๊ณ„ ์ธ์ฆ, ๊ฐ•๋ ฅํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ •์ฑ…, HBAC, Sudo ๊ทœ์น™์œผ๋กœ ์ฒ ํ†ต ๋ณด์•ˆ.

6๏ธโƒฃ ์œ ์ง€๋ณด์ˆ˜๋Š”?
์ •๊ธฐ ๋ฐฑ์—…, ๋ชจ๋‹ˆํ„ฐ๋ง, ๋กœ๊ทธ ๊ด€๋ฆฌ๊ฐ€ ํ•ต์‹ฌ. ์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ ํ™œ์šฉ!

๐Ÿ’ก ์‹œ์ž‘ํ•˜๊ธฐ ์ „ ์ฒดํฌ๋ฆฌ์ŠคํŠธ
โœ… ๋ฆฌ๋ˆ…์Šค ๊ธฐ๋ณธ ์ง€์‹ (๋ช…๋ น์–ด, ํŒŒ์ผ ์‹œ์Šคํ…œ, ๋„คํŠธ์›Œํฌ)
โœ… ์ตœ์†Œ 2๋Œ€์˜ ์„œ๋ฒ„ (๊ฐ€์ƒ ๋จธ์‹ ๋„ OK)
โœ… ๊ณ ์ • IP ๋ฐ DNS ์„ค์ •
โœ… ์ถฉ๋ถ„ํ•œ ์‹œ๊ฐ„ (์ฒ˜์Œ์—” ์‹œํ–‰์ฐฉ์˜ค๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์–ด!)
โœ… ๋ฐฑ์—… ๊ณ„ํš (ํ•ญ์ƒ ์ค‘์š”!)
โœ… ๋ฌธ์„œํ™” ์Šต๊ด€ (๋‚˜์ค‘์— ๊ฐ์‚ฌํ•˜๊ฒŒ ๋  ๊ฑฐ์•ผ)

FreeIPA๋Š” ๋‹จ์ˆœํžˆ ๊ณ„์ • ๊ด€๋ฆฌ ๋„๊ตฌ๋ฅผ ๋„˜์–ด์„œ, ์กฐ์ง์˜ IT ์ธํ”„๋ผ๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฐ•๋ ฅํ•œ ํ”Œ๋žซํผ์ด์•ผ. ์ฒ˜์Œ์—” ํ•™์Šต ๊ณก์„ ์ด ์žˆ์ง€๋งŒ, ํ•œ ๋ฒˆ ์ต์ˆ™ํ•ด์ง€๋ฉด ์—†์–ด์„œ๋Š” ์•ˆ ๋  ๋„๊ตฌ๊ฐ€ ๋  ๊ฑฐ์•ผ! ๐Ÿš€

ํŠนํžˆ ์š”์ฆ˜์ฒ˜๋Ÿผ ๋ณด์•ˆ์ด ์ค‘์š”ํ•œ ์‹œ๋Œ€์—, ์ค‘์•™ ์ง‘์ค‘์‹ ์ธ์ฆ๊ณผ ์„ธ๋ฐ€ํ•œ ๊ถŒํ•œ ๊ด€๋ฆฌ๋Š” ํ•„์ˆ˜์ ์ด์•ผ. FreeIPA๋ฅผ ์ž˜ ํ™œ์šฉํ•˜๋ฉด ๋ณด์•ˆ๋„ ๊ฐ•ํ™”ํ•˜๊ณ , ๊ด€๋ฆฌ ํšจ์œจ๋„ ๋†’์ด๊ณ , ๋น„์šฉ๋„ ์ ˆ๊ฐํ•  ์ˆ˜ ์žˆ์–ด. ์ผ์„์‚ผ์กฐ์ง€! ๐Ÿ˜Š

ํ˜น์‹œ ๊ตฌ์ถ•ํ•˜๋‹ค๊ฐ€ ๋ง‰ํžˆ๋Š” ๋ถ€๋ถ„์ด ์žˆ๊ฑฐ๋‚˜, ๋” ์ „๋ฌธ์ ์ธ ๋„์›€์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ์žฌ๋Šฅ๋„ท์—์„œ ๊ฒฝํ—˜ ๋งŽ์€ ์ „๋ฌธ๊ฐ€๋“ค์„ ์ฐพ์•„๋ณด๋Š” ๊ฒƒ๋„ ์ข‹์€ ๋ฐฉ๋ฒ•์ด์•ผ. ๋•Œ๋กœ๋Š” ์ „๋ฌธ๊ฐ€์˜ ํ•œ ๋งˆ๋””๊ฐ€ ๋ฉฐ์น ๊ฐ„์˜ ๊ณ ๋ฏผ์„ ํ•ด๊ฒฐํ•ด์ฃผ๊ธฐ๋„ ํ•˜๊ฑฐ๋“ ! ๐Ÿ’ช

์ž, ์ด์ œ ๋‹น์‹ ๋„ FreeIPA ๋งˆ์Šคํ„ฐ๊ฐ€ ๋  ์ค€๋น„๊ฐ€ ๋˜์—ˆ์–ด! ์‹ค์Šต ํ™˜๊ฒฝ์„ ๋งŒ๋“ค๊ณ , ํ•˜๋‚˜์”ฉ ๋”ฐ๋ผ ํ•ด๋ณด๋ฉด์„œ ์ตํ˜€๋ด. ์‹ค์ˆ˜ํ•ด๋„ ๊ดœ์ฐฎ์•„. ๊ทธ๊ฒŒ ๋ฐ”๋กœ ๋ฐฐ์šฐ๋Š” ๊ณผ์ •์ด๋‹ˆ๊นŒ! ํ™”์ดํŒ…! ๐ŸŽ‰

๐ŸŽ“ Happy Learning & Happy Deploying!

FreeIPA์™€ ํ•จ๊ป˜ ์•ˆ์ „ํ•˜๊ณ  ํšจ์œจ์ ์ธ IT ์ธํ”„๋ผ๋ฅผ ๋งŒ๋“ค์–ด๋ณด์„ธ์š”!

๋Œ“๊ธ€ ์ž‘์„ฑ

์ด ๊ธ€์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ๋ถ„์˜ ์ƒ๊ฐ์„ ๋“ค๋ ค์ฃผ์„ธ์š”

๋Œ“๊ธ€ 0
๋Œ“๊ธ€์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์ค‘์ž…๋‹ˆ๋‹ค.

์•„์ง ๋Œ“๊ธ€์ด ์—†์Šต๋‹ˆ๋‹ค.