FreeIPA

出自 Arch Linux 中文维基

FreeIPA 是一個基於Linux開源身份認證、身份管理、授權和審計解決方案,旨在為組織提供集中式身份和策略管理服務。

這是一個類似於微軟 Active Directory 域服務,整合了 LDAP、Kerberos、DNS、NTP、Dogtag Certificate System、389 Directory Syrver、SSSD 和 Apache HTTPServer,由紅帽提供支持。

安裝[編輯 | 編輯原始碼]

FreeIPA 分為服務端和客户端,目前(截至本文檔創建:日期2024年4月) Arch Linux 官方並不提供 FreeIPA 的服務端和客户端的軟件包,若想安裝服務端,建議參照官方文檔使用紅帽系列發行版(如:Fedora \ Red Hat Enterprise Linux \ CentOS \ Debian )或使用容器進行安裝和部署。本文檔僅提供客户端簡要配置説明。

客户端版本可使用安裝 freeipa-clientAUR,當然也可以不使用安裝包,而使用手動配置與 FreeIPA 服務端進行連接,可以根據自己所需選擇對應功能模塊進行安裝配置。


下面是將當前客户端註冊到 FreeIPA 服務端指定的域和領域。

# ipa-client-install --server=ipa.example.org --domain=example.org --realm=EXAMPLE.ORG

手動安裝客户端[編輯 | 編輯原始碼]

freeipa客户端 安裝時已經默認將下列軟件作為依賴進行安裝,手動僅為滿足某些設備僅實現部分功能。為了確保能與服務端進行連接,可根據需求安裝下面軟件包。

  • Kerberos — 用於Kerberos身份認證(必選項)。
http://web.mit.edu/kerberos/ || krb5
  • SSSD — 用於LADP和Kerberos認證的代理客户端(必選項)。
https://sssd.io/ || sssd
  • NTP — 用於客户端與服務端時間同步(強烈建議安裝,若主機時間不一致將導致驗證無法進行)。
  • Autofs — 用於自動掛載目標文件系統,常見的用法如掛載漫遊用户的家目錄(可選項)。
https://www.kernel.org/doc/html/latest/filesystems/autofs.html || autofsAUR
  • certmonger — 證書管理服務,實現於 FreeIPA 服務端自動化證書頒發和續定(可選項)。
https://www.pagure.io/certmonger || certmongerAUR

配置[編輯 | 編輯原始碼]

手動配置客户端[編輯 | 編輯原始碼]

SSSD[編輯 | 編輯原始碼]

在目錄/etc/sssd/conf.d/下添加配置文件。

/etc/sssd/conf.d/80-freeipa-example.conf
[sssd]
config_file_version = 2
services = nss, pam, sudo, ssh
domains = EXAMPLE.ORG
#debug_level = 9

[domain/EXAMPLE.ORG]
#debug_level = 9
cache_credentials = true
krb5_store_password_if_offline = true
id_provider = ipa
auth_provider = ipa
access_provider = ipa
chpass_provider = ipa
#ipa_domain=example.org            # 可選項
#ipa_server=ipaserver.example.org  # 可選項
ipa_hostname=client.example.org
提示:若在已DNS中添加了相關 SRV 記錄,以上所標識的 可選項 可不作配置。

NSCD 使用 sssd英語SSSD 認證代理,修改文件 /etc/nsswitch.conf。

/etc/nsswitch.conf
passwd: files systemd sss
group: files [SUCCESS=merge] systemd sss
shadow: files systemd sss
gshadow: files systemd
sudoers: files sss

publickey: files

hosts: mymachines resolve [!UNAVAIL=return] files myhostname dns
networks: files

protocols: files
services: files
ethers: files
rpc: files

netgroup: files

使用下面命令查詢或驗證 sssd 與 FreeIPA 的連接信息。

sssctl domain-status example.org

krb5[編輯 | 編輯原始碼]

修改文件/ect/krb5.conf,添加域

/ect/krb5.conf
[libdefaults]
        default_realm = EXAMPLE.ORG
        dns_lookup_realm = false
        dns_lookup_kdc = false
        rdns = false
        ticket_lifetime = 24h
        forwardable = yes
        #allow_weak_crypto = yes  # Only if absolutely necessary. Currently FreeIPA supports strong crypto.

[realms]
        EXAMPLE.ORG = {
                admin_server = freeipaserver.example.org
                kdc = freeipaserver.example.org:749
                default_admin = example.org
        }

[domain_realm]
        example.org = EXAMPLE.ORG
        .example.org = EXAMPLE.ORG

[logging]
        default = FILE:/var/log/krb5libs.log
        kdc = FILE:/var/log/krb5kdc.log
        admin_server = FILE:/var/log/kadmin.log

註冊客户端[編輯 | 編輯原始碼]

現在服務端上註冊客户端主機,下面操作請在服務端上執行;

  1. 登錄到管理員會話
    $ kinit admin
  2. 創建客户端記錄
    $ ipa host-add --force --ip-address=192.168.1.100 client.example.org
    提示:需要根據您的實際情況修改對應的地址和域名,若您的主機沒有固定的IP位址,可使用下列命令創建。
    $ ipa host-add client.example.org
  3. 授權主機 ipaserver 允許管理客户端 client
    $ ipa host-add-managedby --hosts=ipaserver.example.org client.example.org
  4. 為客户端生成密鑰
    # ipa-getkeytab -s ipaserver.example.org  -p host/client.example.org -k /tmp/client1.keytab

將剛生成的密鑰下載到客户端,下面操作請在客户端上執行;

$ scp user@ipaserver.example.org:/tmp/client1.keytab /tmp/krb5.keytab
# mv /tmp/krb5.keytab /etc/krb5.keytab

SSH整合[編輯 | 編輯原始碼]

私鑰認證[編輯 | 編輯原始碼]

您可配置 SSHD 從 LDAP 服務上拉取用户 SSH 公鑰,以此完成私鑰認證。只需在/etc/ssh/sshd_config.d/目錄下創建一個sshd的配置文件。

/etc/ssh/sshd_config.d/80-freeipa-example.conf
AuthorizedKeysCommand /usr/bin/sss_ssh_authorizedkeys
AuthorizedKeysCommandUser nobody

然後再重啟 sshd.service 服務。

提示:以下操作請在服務端上進行。

接下來添加公鑰。您可用使用freeipa管理頁面端進行添加,操作步驟:「身份」 -> 選擇 "用户類別" -> 選擇對應 "用户名" -> 在 "賬户設置" 中找到 『SSH公鑰』,點擊"添加",將您的 公鑰文本 粘貼到出的對話框中,點擊 「設置」 後完成操作。

除了網頁端添加還可使用命令行進行添加,示例如下:

  • 創建用户時指定公鑰信息。
    ipa user-add --sshpubkey="ssh-rsa AAAA..." 用户名
  • 修改已有用户公鑰信息。
    ipa user-mod --sshpubkey="ssh-rsa AAAA..." 用户名

驗證配置:

$ sudo -u nobody sss_ssh_authorizedkeys 用户名

如果配置正確,執行過程中應無報錯信息。

主機信任[編輯 | 編輯原始碼]

您可配置 SSHD 從 sssd 服務上獲取主機 SSH 公鑰信息,以此完成主機指紋信任。只需在/etc/ssh/sshd_config.d/目錄下創建一個sshd的配置文件。

/etc/ssh/sshd_config.d/81-sssd-knownHosts.conf
GlobalKnownHostsFile /var/lib/sss/pubconf/known_hosts
ProxyCommand /usr/bin/sss_ssh_knownhostsproxy -p %p %h

Kerberos 認證[編輯 | 編輯原始碼]

SSH 客户端啟用 Kerberos 認證。需在/etc/ssh/sshd_config.d/目錄下創建一個sshd的配置文件。

/etc/ssh/sshd_config.d/82-kerberos-gssApiAuth.conf
GSSAPIAuthentication yes
GSSAPIDelegateCredentials yes

參考[編輯 | 編輯原始碼]