Ver3.0 ๐ FreeIPA๋ก ์์ํ๋ ํตํฉ ID ๊ด๋ฆฌ ์๋ฃจ์ ๊ตฌ์ถ ์๋ฒฝ ๊ฐ์ด๋

๐ FreeIPA๋ก ์์ํ๋ ํตํฉ ID ๊ด๋ฆฌ ์๋ฃจ์ ๊ตฌ์ถ ์๋ฒฝ ๊ฐ์ด๋
์๋ ! ๐ ํน์ ํ์ฌ์์ ์ง์๋ค์ ๊ณ์ ์ ๊ด๋ฆฌํ๋๋ผ ๋จธ๋ฆฌ ์ํ ์ ์์ด? ๊ฐ ์๋ฒ๋ง๋ค ๋ค๋ฅธ ๋น๋ฐ๋ฒํธ, ํด์ฌ์ ๊ณ์ ์ ๋ฆฌ, ๊ถํ ๊ด๋ฆฌ... ์๊ฐ๋ง ํด๋ ๋ณต์กํ์ง? ์ค๋์ ์ด๋ฐ ๊ณ ๋ฏผ์ ํ ๋ฐฉ์ ํด๊ฒฐํด์ค FreeIPA๋ผ๋ ๋ฉ์ง ์น๊ตฌ๋ฅผ ์๊ฐํด์ค๊ฒ! ๐
FreeIPA๋ ๋ฆฌ๋ ์ค ํ๊ฒฝ์์ ์ฌ์ฉ์ ๊ณ์ , ์ธ์ฆ, ๊ถํ์ ์ค์์์ ํตํฉ ๊ด๋ฆฌํ ์ ์๊ฒ ํด์ฃผ๋ ์คํ์์ค ์๋ฃจ์ ์ด์ผ. ์ฝ๊ฒ ๋งํ๋ฉด ์๋์ฐ์ Active Directory ๊ฐ์ ๊ฑฐ๋ผ๊ณ ๋ณด๋ฉด ๋ผ. ๊ทผ๋ฐ ์์ ๋ฌด๋ฃ๊ณ , ๋ฆฌ๋ ์ค ํ๊ฒฝ์ ์ต์ ํ๋์ด ์์ง! ๐
๐ค 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๋ ์๊ฐ์ ๋ฏผ๊ฐํ๊ฑฐ๋ .
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 ํด๋ผ์ด์ธํธ ํจํค์ง๋ฅผ ์ค์นํ๋ฉด ์๋์ผ๋ก ์๋ฒ์ ์ฐ๊ฒฐ๋๊ณ , ์ค์ ์ธ์ฆ์ ์ฌ์ฉํ ์ ์๊ฒ ๋ผ.
๐ FreeIPA ์๋ฒ ์ค์นํ๊ธฐ
์, ์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก FreeIPA๋ฅผ ์ค์นํด๋ณด์! ์ฌ๊ธฐ์๋ CentOS 8 / Rocky Linux 8 ๊ธฐ์ค์ผ๋ก ์ค๋ช ํ ๊ฒ. RHEL 8๋ ๊ฑฐ์ ๋์ผํด. ๐
FreeIPA ์ค์น ์ ์ ๊ผญ ํ์ธํด์ผ ํ ๊ฒ๋ค์ด ์์ด:
โข ์ต์ 2GB RAM (๊ถ์ฅ 4GB ์ด์)
โข ์ต์ 10GB ๋์คํฌ ๊ณต๊ฐ
โข ๊ณ ์ IP ์ฃผ์ ์ค์
โข ํธ์คํธ๋ช (FQDN) ์ ๋๋ก ์ค์
โข ๋ฐฉํ๋ฒฝ ํฌํธ ์คํ ํ์
โข SELinux ํ์ฑํ ์ํ ์ ์ง (๋นํ์ฑํํ์ง ๋ง ๊ฒ!)
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
# ์์คํ
์ ์ฒด ์
๋ฐ์ดํธ
dnf update -y
# FreeIPA ์๋ฒ ํจํค์ง ์ค์น
dnf install -y ipa-server ipa-server-dns
# ์ค์น ํ์ธ
rpm -qa | grep ipa-server
ipa-server-dns๋ ํตํฉ DNS ์๋ฒ๋ฅผ ํฌํจํ ํจํค์ง์ผ. DNS๋ฅผ ๋ณ๋๋ก ๊ด๋ฆฌํ๊ณ ์ถ๋ค๋ฉด ์ด ํจํค์ง๋ ์๋ตํด๋ ๋ผ. ํ์ง๋ง ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ํตํฉ DNS๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ํจ์ฌ ํธํด! ๐ฏ
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
๋๋์ด ๋ณธ๊ฒฉ์ ์ธ ์ค์น์ผ! 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
์ค์น๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ฉ์์ง๋ฅผ ๋ณผ ์ ์์ด:
==============================================================================
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. ํ์ ์ ๋ณด ์
๋ ฅ:
โข First name: ์ด๋ฆ (์: John)
โข Last name: ์ฑ (์: Smith)
โข New Password: ์ด๊ธฐ ๋น๋ฐ๋ฒํธ
โข Verify Password: ๋น๋ฐ๋ฒํธ ํ์ธ
4. ์ ํ ์ ๋ณด (ํ์์):
โข 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๋ "๋๊ฐ ์ด๋ค ์๋ฒ์ ์ ๊ทผํ ์ ์๋์ง"๋ฅผ ์ ์ดํ๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ด์ผ. ์๋ฅผ ๋ค์ด:
โข ์ด์ํ์ ์ด์ ์๋ฒ์๋ง ์ ๊ทผ ๊ฐ๋ฅ
โข DBA๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ์๋ง ์ ๊ทผ ๊ฐ๋ฅ
HBAC ๊ท์น ๋ง๋ค๊ธฐ:
1. Policy โ Host-Based Access Control โ HBAC Rules
2. + Add ํด๋ฆญ
3. Rule name: ๊ท์น ์ด๋ฆ (์: allow_developers_to_dev_servers)
4. Add ํด๋ฆญ
5. ๊ท์น ์์ธ ์ค์ :
โข Accessing: ์ด๋ค ํธ์คํธ? (์: dev-server01, dev-server02)
โข Via service: ์ด๋ค ์๋น์ค? (์: sshd, login)
โข From: ์ด๋์? (๋ณดํต Any Host๋ก ์ค์ )
6. ๊ฐ ์น์
์์ Add ๋ฒํผ์ผ๋ก ํญ๋ชฉ ์ถ๊ฐ
7. ๊ท์น ํ์ฑํ: Enabled ์ฒดํฌ๋ฐ์ค ์ ํ
์ด๋ ๊ฒ ํ๋ฉด developers ๊ทธ๋ฃน์ ์ฌ์ฉ์๋ค๋ง ๊ฐ๋ฐ ์๋ฒ์ SSH๋ก ์ ์ํ ์ ์๊ฒ ๋ผ! ๋ค๋ฅธ ์ฌ์ฉ์๋ ์ ๊ทผ์ด ์ฐจ๋จ๋์ง. ๐ซ
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 ๋๋ฉ์ธ์ ์ฐธ์ฌ์์ผ๋ณด์! ํด๋ผ์ด์ธํธ ์ค์ ์ ์ ๋ง ๊ฐ๋จํด. ๐
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
ํด๋ผ์ด์ธํธ๋ฅผ 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 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: ๊ด๋ฆฌ์ ๋น๋ฐ๋ฒํธ
# 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์ ๋ฑ๋ก๋ ์ฌ์ฉ์๋ก ์ด ์๋ฒ์ ๋ก๊ทธ์ธํ ์ ์์ด! ๐
๋ค๋ฅธ ํด๋ผ์ด์ธํธ๋ ๋ก์ปฌ ๋จธ์ ์์ SSH๋ก ์ ์ํด๋ด:
# FreeIPA ์ฌ์ฉ์๋ก SSH ์ ์
ssh jsmith@web01.example.com
# ์ฒ์ ๋ก๊ทธ์ธ ์ ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ ํ๋กฌํํธ๊ฐ ๋์ฌ ์ ์์
# ๋ณ๊ฒฝ ํ ์ ์์ ์ผ๋ก ๋ก๊ทธ์ธ๋จ
# ๋ก๊ทธ์ธ ํ Kerberos ํฐ์ผ ํ์ธ
klist
# ์๋์ผ๋ก ํฐ์ผ์ด ๋ฐ๊ธ๋์ด ์์!
# ์ด๊ฒ ๋ฐ๋ก SSO์ ๋ง๋ฒ! โจ
๐ FreeIPA ๋ณต์ ์๋ฒ ๊ตฌ์ถํ๊ธฐ
ํ๋ก๋์ ํ๊ฒฝ์์๋ ๋จ์ผ ์๋ฒ๋ก ์ด์ํ๋ฉด ์ ๋ผ! ์๋ฒ๊ฐ ๋ค์ด๋๋ฉด ๋ชจ๋ ์ธ์ฆ์ด ๋ฉ์ถ๊ฑฐ๋ . ๊ทธ๋์ ๋ณต์ ์๋ฒ(Replica)๋ฅผ ๋ง๋ค์ด์ผ ํด. ๐
๐ ๋ณต์ ์๋ฒ์ ์ฅ์
1๏ธโฃ ๊ณ ๊ฐ์ฉ์ฑ (High Availability)
๋ง์คํฐ ์๋ฒ๊ฐ ๋ค์ด๋์ด๋ ๋ณต์ ์๋ฒ๊ฐ ์๋น์ค๋ฅผ ๊ณ์ ์ ๊ณตํด.
2๏ธโฃ ๋ถํ ๋ถ์ฐ (Load Balancing)
์ฌ๋ฌ ์๋ฒ๊ฐ ์ธ์ฆ ์์ฒญ์ ๋๋ ์ ์ฒ๋ฆฌํ๋๊น ์ฑ๋ฅ์ด ์ข์์ ธ.
3๏ธโฃ ์ง๋ฆฌ์ ๋ถ์ฐ
์์ธ, ๋ถ์ฐ, ๋๊ตฌ์ ๊ฐ๊ฐ ๋ณต์ ์๋ฒ๋ฅผ ๋๋ฉด ๊ฐ๊น์ด ์๋ฒ์์ ๋น ๋ฅด๊ฒ ์ธ์ฆ๋ฐ์ ์ ์์ด.
4๏ธโฃ ๋ฐฑ์
๋ฐ์ดํฐ๊ฐ ์ฌ๋ฌ ์๋ฒ์ ๋ณต์ ๋๋๊น ์์ฐ์ค๋ฝ๊ฒ ๋ฐฑ์
ํจ๊ณผ๋ ์์ง.
์๋ก์ด ์๋ฒ๋ฅผ ์ค๋นํ๊ณ ๋ง์คํฐ ์๋ฒ์ ๋์ผํ๊ฒ ๊ธฐ๋ณธ ์ค์ ์ ํด์ค:
# ํธ์คํธ๋ช
์ค์
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
FreeIPA 4.3 ์ดํ ๋ฒ์ ์์๋ ๋ณต์ ํ์ผ์ ๋ณ๋๋ก ๋ง๋ค ํ์๊ฐ ์์ด! ๋ฐ๋ก ๋ณต์ ์๋ฒ์์ ์ค์นํ๋ฉด ๋ผ. ํ์ง๋ง ๋ง์คํฐ ์๋ฒ์์ ๋ณต์ ์๋ฒ ํธ์คํธ๋ฅผ ๋ฏธ๋ฆฌ ๋ฑ๋กํด๋๋ ๊ฒ ์ข์:
# ๋ง์คํฐ ์๋ฒ์์ ์คํ
kinit admin
# ๋ณต์ ์๋ฒ ํธ์คํธ ์ถ๊ฐ
ipa host-add ipa-replica.example.com --ip-address=192.168.1.11
๋ณต์ ์๋ฒ์์ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํด:
# ๋ณต์ ์๋ฒ ์ค์น (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
์ค์น ์ค์ ๊ด๋ฆฌ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ๋ฌผ์ด๋ณผ ๊ฑฐ์ผ:
โข IPA admin password: admin ๊ณ์ ๋น๋ฐ๋ฒํธ
์ค์น๋ 10~15๋ถ ์ ๋ ๊ฑธ๋ ค. ์๋ฃ๋๋ฉด ๋ณต์ ์๋ฒ๊ฐ ๋ง์คํฐ ์๋ฒ์ ์๋์ผ๋ก ๋๊ธฐํ๋ฅผ ์์ํด!
# ๋ณต์ ์๋ฒ์์ ํ์ธ
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 ์ฐ๊ฒฐ ์ ๋ณด:
โข 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๋๋ฅผ ๊ด๋ฆฌํด์ผ ํ๋ ์คํํธ์
๊ตฌ์ฑ:
# ๊ทธ๋ฃน ์์ฑ
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
# ํธ์คํธ ๊ทธ๋ฃน
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
# ๋ฐ๋ธ์ต์คํ์ ์ด์ ์๋ฒ์์ ๋ชจ๋ 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๋, ์ฌ๋ฌ ๋ถ์์ ์ง์ฌ๊ฐ ์๋ ์ค๊ฒฌ๊ธฐ์
๊ตฌ์ฑ:
# ๋ณธ์ฌ (์์ธ)
ipa.seoul.company.com (๋ง์คํฐ)
# ์ง์ฌ (๋ถ์ฐ)
ipa.busan.company.com (๋ณต์ )
# ์ง์ฌ (๋๊ตฌ)
ipa.daegu.company.com (๋ณต์ )
# ๊ฐ ์ง์ฌ ์๋ฒ๋ ๊ฐ๊น์ด FreeIPA ์๋ฒ๋ฅผ ์ฌ์ฉํ๋๋ก DNS ์ค์
# ๋ถ์๋ณ ๊ทธ๋ฃน
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
์ฌ๋ด ์์คํ ๋ค์ FreeIPA์ ์ฐ๋:
โข Jenkins: LDAP ํ๋ฌ๊ทธ์ธ ์ฌ์ฉ
โข Nextcloud: LDAP ๋ฐฑ์๋ ์ฐ๋
โข Jira/Confluence: LDAP ๋๋ ํฐ๋ฆฌ ์ฐ๊ฒฐ
โข VPN: FreeIPA ์ธ์ฆ ์ฌ์ฉ
# 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
์ง๋ฌธํ๊ณ ๋ต๋ณ๋ฐ์ ์ ์๋ ์ปค๋ฎค๋ํฐ.
๐บ ์ถ์ฒ ํ์ต ๊ฒฝ๋ก
โข LDAP ๊ฐ๋
์ดํด
โข Kerberos ์ธ์ฆ ์๋ฆฌ
โข DNS ๊ธฐ๋ณธ ์ง์
โข ๋ฆฌ๋
์ค ์์คํ
๊ด๋ฆฌ
โข VirtualBox๋ VMware๋ก ๊ฐ์ ๋จธ์ 3๋ ์ค๋น
โข CentOS Stream 8 ๋๋ Rocky Linux 8 ์ค์น
โข ๋คํธ์ํฌ ๊ตฌ์ฑ (NAT ๋๋ Bridge)
โข ์ค๋
์ท ๊ธฐ๋ฅ ํ์ฉ (์ค์ํด๋ ๋ณต๊ตฌ ๊ฐ๋ฅ!)
โข 1๋จ๊ณ: ๊ธฐ๋ณธ ์๋ฒ ์ค์น ๋ฐ ์ฌ์ฉ์ ๊ด๋ฆฌ
โข 2๋จ๊ณ: ํด๋ผ์ด์ธํธ ๋ฑ๋ก ๋ฐ SSO ํ
์คํธ
โข 3๋จ๊ณ: ๋ณต์ ์๋ฒ ๊ตฌ์ถ
โข 4๋จ๊ณ: HBAC ๋ฐ Sudo ๊ท์น ์ค์
โข 5๋จ๊ณ: ์ ํ๋ฆฌ์ผ์ด์
ํตํฉ (GitLab ๋ฑ)
โข 6๋จ๊ณ: ๋ฐฑ์
๋ฐ ๋ณต๊ตฌ ํ
์คํธ
โข ์ธ์ฆ์ ๊ด๋ฆฌ ๋ฐ 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
์ง์์ธ์ ์ฒ - ์ง์ ์ฌ์ฐ๊ถ ๋ณดํธ ๊ณ ์ง
์ง์ ์ฌ์ฐ๊ถ ๋ณดํธ ๊ณ ์ง
- ์ ์๊ถ ๋ฐ ์์ ๊ถ: ๋ณธ ์ปจํ ์ธ ๋ ์ฌ๋ฅ๋ท์ ๋ ์ AI ๊ธฐ์ ๋ก ์์ฑ๋์์ผ๋ฉฐ, ๋ํ๋ฏผ๊ตญ ์ ์๊ถ๋ฒ ๋ฐ ๊ตญ์ ์ ์๊ถ ํ์ฝ์ ์ํด ๋ณดํธ๋ฉ๋๋ค.
- AI ์์ฑ ์ปจํ ์ธ ์ ๋ฒ์ ์ง์: ๋ณธ AI ์์ฑ ์ปจํ ์ธ ๋ ์ฌ๋ฅ๋ท์ ์ง์ ์ฐฝ์๋ฌผ๋ก ์ธ์ ๋๋ฉฐ, ๊ด๋ จ ๋ฒ๊ท์ ๋ฐ๋ผ ์ ์๊ถ ๋ณดํธ๋ฅผ ๋ฐ์ต๋๋ค.
- ์ฌ์ฉ ์ ํ: ์ฌ๋ฅ๋ท์ ๋ช ์์ ์๋ฉด ๋์ ์์ด ๋ณธ ์ปจํ ์ธ ๋ฅผ ๋ณต์ , ์์ , ๋ฐฐํฌ, ๋๋ ์์ ์ ์ผ๋ก ํ์ฉํ๋ ํ์๋ ์๊ฒฉํ ๊ธ์ง๋ฉ๋๋ค.
- ๋ฐ์ดํฐ ์์ง ๊ธ์ง: ๋ณธ ์ปจํ ์ธ ์ ๋ํ ๋ฌด๋จ ์คํฌ๋ํ, ํฌ๋กค๋ง, ๋ฐ ์๋ํ๋ ๋ฐ์ดํฐ ์์ง์ ๋ฒ์ ์ ์ฌ์ ๋์์ด ๋ฉ๋๋ค.
- AI ํ์ต ์ ํ: ์ฌ๋ฅ๋ท์ AI ์์ฑ ์ปจํ ์ธ ๋ฅผ ํ AI ๋ชจ๋ธ ํ์ต์ ๋ฌด๋จ ์ฌ์ฉํ๋ ํ์๋ ๊ธ์ง๋๋ฉฐ, ์ด๋ ์ง์ ์ฌ์ฐ๊ถ ์นจํด๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
์์ง ๋๊ธ์ด ์์ต๋๋ค.