FreeIPA
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身份认证(必选项)。
- SSSD — 用于LADP和Kerberos认证的代理客户端(必选项)。
- https://sssd.io/ || sssd包
- certmonger — 证书管理服务,实现于 FreeIPA 服务端自动化证书颁发和续定(可选项)。
配置[编辑 | 编辑源代码]
手动配置客户端[编辑 | 编辑源代码]
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
NSCD 使用 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
注册客户端[编辑 | 编辑源代码]
现在服务端上注册客户端主机,下面操作请在服务端上执行;
- 登录到管理员会话
$ kinit admin
- 创建客户端记录
$ ipa host-add --force --ip-address=192.168.1.100 client.example.org
提示:需要根据您的实际情况修改对应的地址和域名,若您的主机没有固定的IP地址,可使用下列命令创建。$ ipa host-add client.example.org
- 授权主机 ipaserver 允许管理客户端 client
$ ipa host-add-managedby --hosts=ipaserver.example.org client.example.org
- 为客户端生成密钥
# 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