美文网首页
freeipa 故障排查和解决

freeipa 故障排查和解决

作者: akka9 | 来源:发表于2017-09-12 11:30 被阅读0次

    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

    相关文章

      网友评论

          本文标题:freeipa 故障排查和解决

          本文链接:https://www.haomeiwen.com/subject/vratlxtx.html