freeipa 故障排查和解决

CentOS 8 安装 freeipa

  1. 必须把主机名设置为域名形式的,比如 hostnamectl set-hostname ipa01.domain.com
  2. 配置 /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

  1. hostname -i 输出的是本地的内网地址
  2. hostname -f 输出的是设置的 ipa01.domain.com
  3. 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 等软件作为统一认证的方式

  1. 新建帐号
    readonly uaS5F5AFXpisjvqrQGthz/DOXqxvKAZ06
    readwrite LX3U74B2r6Y8yvPMIDlH6vg3FVTgip/YtUyf3svA3aP6
  2. IPA Server > Role Based Access Control > Permission > Add LDAP-Auth-Read-Only
    [x] read [x] search [x] compare
    Type: User
  3. IPA Server > Role Based Access Control > Privilege > Add and edit LDAP-Auth-Read-Only
    search and bind Permission LDAP-Auth-Read-Only
  4. 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

  1. 新建帐号 autoenroll freeipa.org

  2. IPA Server -> Role Based ACL -> Add PRIVILEGES LDAP_Add_Hosts and Edit:
    Permissions :
    System: Add Hosts

  3. IPA Server -> Role Based ACL -> ROLES添加 autoenroll

  4. 修改 autoenroll Role,
    users 增加 autoenroll 用户,
    Privilege 增加 Host Enrollment 、 LDAP_Add_Hosts 这两组权限

  5. 登录 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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,219评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,363评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,933评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,020评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,400评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,640评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,896评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,597评论 0 199
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,327评论 1 244
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,581评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,072评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,399评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,054评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,083评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,849评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,672评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,585评论 2 270

推荐阅读更多精彩内容