FreeIPA - Arch Linux 中文维基

跳转到内容

# FreeIPA

来自 Arch Linux 中文维基
翻译状态：

- 本文（或部分内容）译自 FreeIPA，最近一次同步于 2024-04-05，若英文版本有所更改，则您可以帮助同步与翻译更改的内容。
- 您可以在 ArchWiki 的对应页面找到本文翻译的原始修订历史。
- 本文可能与英文原文存在出入。

相关文章

- OpenLDAP
- Kerberos
- 认证管理

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

## 参考

- FreeIPA:项目官方页
- 维基百科:FreeIPA
- 红帽:Linux 域身份、身份验证和策略指南
- GtiHub:sssd和OpenSSH集成.pdf

分类：​

- 网络
- 安全
- 红帽

FreeIPA
添加话题