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

参考[编辑 | 编辑源代码]