CentOS 8 安装 freeipa
- 必须把主机名设置为域名形式的,比如 hostnamectl set-hostname ipa01.domain.com
- 配置 /etc/hosts 文件,把ipa主机名加进来
192.168.9.6 ipa01.domain.com ipa01
192.168.9.7 ipa02.domain.com ipa02
192.168.9.8 ipa03.domain.com ipa03
- hostname -i 输出的是本地的内网地址
- hostname -f 输出的是设置的 ipa01.domain.com
- hostname -d 输出的是设置的域名 domain.com
以上前提条件缺一不可,安装和运行、管理配置都严重依赖主机名。
dnf module enable -y idm:DL1
dnf install -y ipa-server
# 如果需要安装 ipa-server 自带的 dns
dnf install -y ipa-server ipa-server-dns
LDAP_PWD=xxxx
ADMIN_PWD=yyyy
domain=$(hostname -d)
REALM_NAM=${domain^^}
echo $REALM_NAM
ipa-server-install -p $LDAP_PWD -a $ADMIN_PWD \
--hostname=$(hostname -f) -n $(hostname -d) -r $REALM_NAM \
--ssh-trust-dns --allow-zone-overlap --mkhomedir -U
注意 ipa 机器需要使用如下端口:
TCP Ports:
* 80, 443: HTTP/HTTPS
* 389, 636: LDAP/LDAPS
* 88, 464: kerberos
UDP Ports:
* 88, 464: kerberos
* 123: ntp
安装第二个和第N个 ipa-server
dnf module enable -y idm:DL1
dnf install -y ipa-server
LDAP_PWD=xxxx
ADMIN_PWD=yyyy
domain=$(hostname -d)
REALM_NAM=${domain^^}
echo $REALM_NAM
ipa-client-install --mkhomedir \
--hostname=$(hostname -f) --domain=$(hostname -d) \
--unattended -w $ADMIN_PWD --principal=admin \
--server=ipa01.domain.com
ipa-replica-install -w $ADMIN_PWD
ipa-ca-install -p $LDAP_PWD
免密码 sudo 策略
增加一个 sudo rule,名称填为 wheel
Option 填 !authenticate
Who -- User Groups 填 wheel
保存之后, wheel 用户 sudo 就不需要输入密码直接切换成root。
创建一个用户作为 LDAP 的只读用户
用途: 作为 LDAP 提供给 jenkins gitlab nexus 等软件作为统一认证的方式
- 新建帐号
readonly uaS5F5AFXpisjvqrQGthz/DOXqxvKAZ06
readwrite LX3U74B2r6Y8yvPMIDlH6vg3FVTgip/YtUyf3svA3aP6 - IPA Server > Role Based Access Control > Permission > Add LDAP-Auth-Read-Only
[x] read [x] search [x] compare
Type: User - IPA Server > Role Based Access Control > Privilege > Add and edit LDAP-Auth-Read-Only
search and bind Permission LDAP-Auth-Read-Only - IPA Server > Role Based Access Control > Role > Add and edit LDAP-Auth-Read-Only
bind user: readonly and Privilege: LDAP-Auth-Read-Only
读写权限的用户
[x] read [x] search [x] compare [x]write [x]add [x]delete [x]all
创建自动化注册主机的帐号
ipa-client-install --enable-dns-updates --mkhomedir -p autoenroll -w freeipa.org -U --force-join
新建帐号 autoenroll freeipa.org
IPA Server -> Role Based ACL -> Add PRIVILEGES LDAP_Add_Hosts and Edit:
Permissions :
System: Add HostsIPA Server -> Role Based ACL -> ROLES添加 autoenroll
修改 autoenroll Role,
users 增加 autoenroll 用户,
Privilege 增加 Host Enrollment 、 LDAP_Add_Hosts 这两组权限登录 autoenroll ,更新一下密码。
bug: setfacl: Option -m: Invalid argument near character 3
原因 dirsrv 启动前会执行 /usr/sbin/ds_systemd_ask_password_acl /etc/dirsrv/slapd-<instance>/dse.ldif
执行失败。
表面上看, 似乎是文件的权限设置不对。
进一步研究,发现是脚本获取用户名的时候,取值不对。
# 查看正常的权限
$ getfacl /etc/dirsrv/slapd-<instance>/dse.ldif
getfacl: Removing leading '/' from absolute path names
# file: etc/dirsrv/slapd-<instance>/dse.ldif
# owner: dirsrv
# group: dirsrv
user::rw-
group::---
other::---
# 文件 dse.ldif 内容:
nsslapd-localuser: dirsrv
# 获取用户 id 逻辑
DS_USER=`grep 'nsslapd-localuser: ' dse.ldif | awk '{print $2}'`
#正常值: DS_USER=dirsrv
# 获取失败:
Binary file (standard input) matches
DS_USER=file
# 异常的原因: grep dse.idif 时输出为 "Binary file (standard input) matches"
# grep 认为这个 67K 的文件为二进制而导致后续的一系列失败
# 修复
DS_USER=`grep -a 'nsslapd-localuser: ' dse.ldif | awk '{print $2}'`
CentOS 7.7 新坑: Error org.freedesktop.DBus.Error.NoReply
在 CentOS7.7 服务器上,安装新服务时,有很大概率报以上错误,导致安装失败,
检测方法:
dbus-send --system --type=method_call --print-reply --dest=org.fedorahosted.certmonger /org/fedorahosted/certmonger org.freedesktop.DBus.Introspectable.Introspect
如果此命令很快返回XML输出,则说明 certmonger 服务正常,可以进行服务安装。
mkdir -p /usr/lib/systemd/system/certmonger.service.d
cat > /usr/lib/systemd/system/certmonger.service.d/wait-for-ready.conf <<-EOF
[Service]
ExecStartPost=/bin/bash -c 'while ! dbus-send --system --type=method_call --print-reply --dest=org.fedorahosted.certmonger /org/fedorahosted/certmonger org.freedesktop.DBus.Introspectable.Introspect > /dev/null ; do sleep 5 ; done'
TimeoutSec=300
LimitNOFILE=1024
EOF
systemctl daemon-reload
systemctl restart certmonger
dbus-send --system --type=method_call --print-reply --dest=org.fedorahosted.certmonger /org/fedorahosted/certmonger org.freedesktop.DBus.Introspectable.Introspect
重装 freeipa 服务器端
#Master
host="hostname.domain.com"
ip="1.2.3.4"
sshport=2222
# Master del host
ipa-replica-manage del $host -p 'LDAP_PWD'
ipa host-del $host
# Master prepare ssl
ipa-replica-prepare $host --ip-address $ip --no-reverse -p 'LDAP_PWD
# dest host to uninstall freeipa server
ipa-server-install --uninstall
# Master copy
scp -P $sshport /var/lib/ipa/replica-info-$host.gpg root@$host:/var/lib/ipa/
# dest host install
报错:
dbus.proxies: ERROR Introspect error on :1.166:/org/fedorahosted/certmonger: dbus.exceptions.DBusException
原因: selinux 限制了,禁用selinux 并重启 dbus服务
test -f /etc/selinux/config && setenforce 0 && sed -i 's/^SELINUX=.*$/SELINUX=disabled/g' /etc/selinux/config
systemctl restart dbus.socket
systemctl restart dbus.service
文件找不到 /usr/share/pki/server/common/lib/symkey.jar (/usr/lib/java/symkey.jar)
yum install -y pki-symkey
无法启动
journalctl -u dirsrv@DOMAIN-COM.service
WARNING: changelog: entry cache size 2097152 B is less than db size 210132992 B; We recommend to increase the entry cache size nsslapd-cachememsize
处理步骤
- 尝试各种恢复手段,均有问题。 最后基于 freeipa 的 Multi-Master 架构,重新初始化故障节点解决问题。
- 故障服务器开启 iptables ,只允许 freeipa 集群间的ip 访问,避免其他服务器访问到故障的 dns 服务
- 故障服务器卸载 freeipa,重新配置,作为新节点加到正常节点
- 测试,无问题后,取消 iptables
webui 偶尔无法登录,提示已登录
处理步骤
- 每天半夜执行 ipactl restart
升级到 4.5.0 版本,无法启动
- 内核参数启用 ipv6
缺少 CA 文件 /etc/ipa/ca.crt
从 /etc/pki/ca-trust/source/ipa.p11-kit 文件提取
cat /etc/pki/ca-trust/source/ipa.p11-kit | grep 'BEGIN' -A21
test -f /etc/ipa/ca.crt || cat /etc/pki/ca-trust/source/ipa.p11-kit | grep 'BEGIN' -A21 > /etc/ipa/ca.crt
升级到 CentOS 7.5,webui 无法登录,提示“未知错误”。 /var/lib/ipa-client/pki 无任何文件。
检查磁盘空间
查看是否缺少 CA 文件 /etc/ipa/ca.crt
chown ipaapi:ipaapi -Rv /var/run/ipa/ccaches
cp /etc/ipa/ca.crt /var/lib/ipa-client/pki/ca-bundle.pem
cp /etc/ipa/ca.crt /var/lib/ipa-client/pki/kdc-ca-bundle.pem
ipactl restart
# change PKINIT to disabled
ipa-pkinit-manage status
ipa-pkinit-manage disable
ipactl restart
ubuntu + freeipa can't mkhomedir
sed -i -r -e 's/Default:\s\w+/Default: yes/;' /usr/share/pam-configs/mkhomedir
sed -i '/mkhomedir/d' /var/lib/pam/seen
pam-auth-update --package
升级 freeipa 导致 ssh 无法启动
报错:AuthorizedKeysCommand set without AuthorizedKeysCommandUser
解决: AuthorizedKeysCommandUser nobody 这一行加入到 /etc/ssh/sshd_config,再重启 ssh 服务。
Failed to start pki-tomcatd Service
日志报错 /usr/share/pki/server/common/lib/symkey.jar 文件不存在
yum install pki-symkey
sudo certutil -M -t ',,P' -d /etc/pki/pki-tomcat/alias -n 'auditSigningCert cert-pki-ca'
https://osric.com/chris/accidental-developer/2017/10/freeipa-failed-to-start-pki-tomcatd-service/
Ubuntu 18.04 freeclient 无法认证, 原因是 /etc/nsswitch.conf 文件没有 sss 的参数。
sed -i 's/^passwd:.*$/passwd: compat systemd sss/g' /etc/nsswitch.conf
sed -i 's/^group:.*$/group: compat systemd sss/;' /etc/nsswitch.conf
sed -i 's/^shadow:.*$/shadow: compat sss/;' /etc/nsswitch.conf
sed -i 's/^services:.*$/services: db files sss/;' /etc/nsswitch.conf
sed -i 's/^netgroup:.*$/netgroup: nis sss/;' /etc/nsswitch.conf
数据备份恢复
ipa-backup
rsync -pav -e "ssh -p 22" /var/lib/ipa/backup/ipa-full-2019-05-09-18-22-27 root@1.1.1.1:/var/lib/ipa/backup/
# new server
change host in header file
ipa-restore --log-file=restore.log /var/lib/ipa/backup/ipa-full-2019-05-09-18-22-27 -p 'ldap-pwd'
ipaserver 新增节点失败
原因: pip 依赖包的 jwcrypto 包名写错了,囧。。。
sed -i s/jwcrpyto/jwcrypto/g /usr/lib/python2.7/site-packages/ipaserver-4.6.4-py2.7.egg-info/requires.txt
ipa-server 集群(不部署dns)搭建步骤
# 1. 安装第一个 ipa-server
yum -y install ipa-server python2-ipaserver
LDAP_PWD=xxxx
ADMIN_PWD=xxxx
ipa-server-install -p $LDAP_PWD -a $ADMIN_PWD --hostname=$(hostname -f) --mkhomedir -U -r DOMAIN.COM -n domiain.com --ssh-trust-dns --allow-zone-overlap
#2. 设置 DNS,将 dns 解析记录指向 第一个 ipa-server
ipa a 1.2.3.4
_kerberos TXT DOMAIN.COM
_kerberos-master._tcp SRV 0 100 88 ipa
_kerberos-master._udp SRV 0 100 88 ipa
_kerberos._tcp SRV 0 100 88 ipa
_kerberos._udp SRV 0 100 88 ipa
_kpasswd._tcp SRV 0 100 464 ipa
_kpasswd._udp SRV 0 100 464 ipa
_ldap._tcp SRV 0 100 389 ipa
_ntp._udp SRV 0 100 123 ipa
#3. 安装第二个和第N个 ipa-server
yum -y install ipa-server python2-ipaserver
ipa-client-install
ipa-replica-install -w $ADMIN_PWD
ipa-ca-install -p $LDAP_PWD
ipa-server 集群(包含部署dns)搭建步骤
# 1. 安装第一个 ipa-server
yum -y install ipa-server python2-ipaserver ipa-server-dns bind bind-dyndb-ldap
LDAP_PWD=xxxx
ADMIN_PWD=xxxx
ipa-server-install -p $LDAP_PWD -a $ADMIN_PWD --hostname=$(hostname -f) --mkhomedir -U -r DOMAIN.COM -n domain.com --ssh-trust-dns --allow-zone-overlap --setup-dns --forwarder=119.29.29.29 --forwarder=114.114.114.114
#2. 安装第二个和第N个 ipa-server
yum -y install ipa-server python2-ipaserver ipa-server-dns bind bind-dyndb-ldap
ipa-client-install
ipa-replica-install -w $ADMIN_PWD -p $LDAP_PWD --setup-ca --setup-dns --forwarder=119.29.29.29 --forwarder=114.114.114.114 --no-reverse --skip-conncheck --allow-zone-overlap --no-host-dns --unattended
IPA 服务器作为 linux ldap 认证
authconfig --enableldap --enableldapauth --enablemkhomedir --disablenis --enablecache --enablelocauthorize --enableforcelegacy --disablesssd --disablesssdauth --updateall --ldapserver=ipa.domian.com --ldapbasedn="cn=accounts,dc=domain,dc=com"
ref:
https://bgstack15.wordpress.com/2017/06/26/enabling-mkhomedir-on-ubuntu-for-freeipa/
https://bugs.launchpad.net/ubuntu/+source/pam/+bug/682662/comments/8