前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Freeipa的简单搭建配置

Freeipa的简单搭建配置

原创
作者头像
对你无可奈何
发布2023-04-03 14:21:07
2.6K1
发布2023-04-03 14:21:07
举报
文章被收录于专栏:运维专栏运维专栏

背景:

想把账户统一管理起来,jenkins,gitlab,jumpserver甚至kibana,kubernetes等等。本来搭建过openldap。昨天小伙伴强烈推荐我用一下freeipa......又进入了盲区,没有听过的东西都比较好奇,浅浅的体验一下!freeipa服务就不想部署在kubernetes中了 也准备docker方式启动部署。毕竟这样方便升级还原。kubernetes中部署了还要额外映射端口啥的麻烦......偷懒一下!

Freeipa安装

注: 操作系统rockylinux9.0,以docker-compose方式启动freeipa!。主机内网ip 10.0.4.52.

安装docker docker-compose

docker安装

添加docker-ce国内源,这里使用了阿**的源,安装docker-ce:

代码语言:txt
复制
dnf config-manager     --add-repo     http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
dnf -y install docker-ce docker-ce-cli containerd.io
FOWQt08Rwx.png
FOWQt08Rwx.png

安装docker-compose

访问github仓库:https://github.com/docker/compose/releases/,选择对应版本针对系统的版本进行下载(会很慢,可以访问国外网站,或者跟我一样,提前下载了放在对象存储上面!)

image.png
image.png
代码语言:txt
复制
curl "https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
OiHd5vienA.png
OiHd5vienA.png
e2hGOLju0K.png
e2hGOLju0K.png

配置docker镜像加速,设置docker服务开机启动:

可以跟据自己的账户的容器镜像服务-镜像攻击-镜像加速器,配置镜像加速:

image.png
image.png
代码语言:txt
复制
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://7zk8hbh7.mirror.aliyuncs.com"],
  "features": { "buildkit": true },
  "experimental": true,
  "cgroup-parent": "docker.slice",
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

注:registry-mirrors下面的忘了那里复制来的了 就直接带着了!

代码语言:txt
复制
docker info
docker -v
image.png
image.png

docker-compose 搭建freeipa服务:

创建数据目录,编写docker-compose.yaml文件

偷懒了docker-compose.yaml存放在了/data/freeipa目录。freeipa数据目录/data/free-ipa/data /data/free-ipa/data/logs:

代码语言:txt
复制
 mkdir -p /data/free-ipa/data
 mkdir -p /data/free-ipa/logs
image.png
image.png

docker-compose.yaml如下(小伙伴的文件直接拿来用的):

代码语言:txt
复制
version: "3.3"
services:
  freeipa:
    image: freeipa/freeipa-server:almalinux-8-4.9.8
    container_name: xxxx.xxxx.com
    domainname: xxxx.xxxx.com
    container_name: freeipa_idc
    ports:
      - "80:80/tcp"
      - "443:443/tcp"
      # DNS
      - "53:53/tcp"
      - "53:53/udp"
      # LDAP(S)
      - "389:389/tcp"
      - "636:636/tcp"
      # Kerberos
      - "88:88/tcp"
      - "88:88/udp"
      - "464:464/tcp"
      - "464:464/udp"
      # NTP
      - "123:123/udp"
    dns:
      - 127.0.0.1
      - 183.60.82.98
      - 183.60.83.19
      - 114.114.114.114
    tty: true
    stdin_open: true
    environment:
      IPA_SERVER_HOSTNAME: xxxx.xxxx.com
      IPA_SERVER_IP: 10.0.4.52 
      TZ: "Asia/Shanghai"
    command:
      - --domain=xxxx.com
      - --realm=xxx.com
      - --admin-password=xxxx  #freeapi的admin管理员账号
      - --http-pin=xxxx
      - --dirsrv-pin=xxxx
      - --ds-password=xxxx
      - --no-dnssec-validation
      - --no-host-dns
      - --setup-dns
      - --auto-forwarders
      - --allow-zone-overlap
      - --unattended  # 自动无人工干预安装
    cap_add:
      - SYS_TIME
      - NET_ADMIN
    restart: unless-stopped
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /sys/fs/cgroup:/sys/fs/cgroup:ro
      - /data/free-ipa/data:/data
      - /data/free-ipa/logs:/var/logs
    sysctls:
      - net.ipv6.conf.all.disable_ipv6=0
      - net.ipv6.conf.lo.disable_ipv6=0
    security_opt:
      - "seccomp:unconfined"
    labels:
      - idc-freeipa
    extra_hosts:
      - "xxxx.xxxx.com:10.0.4.52 "

就默认修改了一下 域名 ip dns 密码 domain realm 等xxx部分!

cgroup v2带来的无法启动

代码语言:txt
复制
docker-compose up -d 
docker logs -f freeipa_idc
xgUAwfgzFV.png
xgUAwfgzFV.png

网上看了很多文章基本是cgroup的问题:https://serverfault.com/questions/1053187/systemd-fails-to-run-in-a-docker-container-when-using-cgroupv2-cgroupns-priva.https://github.com/freeipa/freeipa-container/issues/520

服务器查看了一眼确实系统默认cgroup v2版本:

代码语言:txt
复制
mount |grep cgroup
image.png
image.png

修改systemd.unified_cgroup_hierarchy=0 并重启服务器:

代码语言:txt
复制
grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy=0"
reboot

查看cgroup可以支持V1了 继续启动服务

代码语言:txt
复制
mount |grep cgroup
image.png
image.png
代码语言:txt
复制
docker-compose down 
docker-compose up -d 

等待服务启动........

image.png
image.png

访问freeipa域名:

第一次访问点两次取消进入登陆页面

第一次访问很坑爹:右上角会弹出一个登陆框让输入用户名密码,连着输入都是错误的,都怀疑人生准备重新部署了,看到一篇文章说要点两次取消就可以出现下面的页面登陆框:搭建freeIPA服务器实现用户管理

image.png
image.png
FPtXad7JPP.png
FPtXad7JPP.png
image.png
image.png

不出意外输入可能会显示密码错误.....日志也不打出新的...怎么破?

image.png
image.png

docker-compose.yaml中admin-password 变量尽量别加特殊符号貌似(登陆了后台可以控制台修改密码!)

登陆控制台基本是如下页面:

image.png
image.png

用户 用户组个人关注的就这两个关键词。继续强迫症修改https证书:

image.png
image.png

修改freeipa https证书准备

参照:https://computingforgeeks.com/secure-freeipa-server-with-lets-encrypt-ssl-certificate/文中是宿主机安装的方式,当然了docker中也是适用!

进入freeipa容器

代码语言:txt
复制
docker exec -it freeipa_idc bash

进入容器后,通过管理员用户身份获取 Kerberos 票据来确认它正在运行:

代码语言:txt
复制
sudo kinit admin
sudo klist
image.png
image.png

安装epel repo与certbot:

代码语言:txt
复制
sudo yum install epel-release
sudo yum install certbot python3-certbot-apache
certbot --version
image.png
image.png

使用 Let's Encrypt SSL 证书保护 FreeIPA 服务器

首先备份当前的 FreeIPA 服务器私钥和证书,安装 git、vim 或 nano 文件编辑器(可选主要是git vim )

代码语言:txt
复制
sudo cp -r /var/lib/ipa/certs{,.bak}
sudo cp -r /var/lib/ipa/private{,.bak}
sudo yum -y install vim nano git
image.png
image.png

使用手动方法使用 Let's Encrypt 保护 FreeIPA 服务器:

创建证书目录:

代码语言:txt
复制
sudo su -
mkdir freeipa-certs
cd freeipa-certs
image.png
image.png

下载 Let's Encrypt CA 证书:

代码语言:txt
复制
CERTS=("isrgrootx1.pem" "isrg-root-x2.pem" "lets-encrypt-r3.pem" "lets-encrypt-e1.pem" "lets-encrypt-r4.pem" "lets-encrypt-e2.pem")
for CERT in "${CERTS[@]}"
do
  curl -o $CERT "https://letsencrypt.org/certs/$CERT"
done
image.png
image.png

将 Let's Encrypt CA 证书安装到 FreeIPA 证书存储中:

代码语言:txt
复制
CERTS=("isrgrootx1.pem" "isrg-root-x2.pem" "lets-encrypt-r3.pem" "lets-encrypt-e1.pem" "lets-encrypt-r4.pem" "lets-encrypt-e2.pem")
for CERT in "${CERTS[@]}"
do
  ipa-cacert-manage install $CERT
done

预期会出现一下输出:

image.png
image.png

使用来自服务器的证书更新本地 IPA 证书数据库:

代码语言:txt
复制
sudo ipa-certupdate
image.png
image.png

获取 Let's Encrypt 证书

停止 httpd 服务以释放获取证书所需的端口 80:

代码语言:txt
复制
sudo systemctl stop httpd

然后运行 Certbot 获取 Let's Encrypt 证书:

代码语言:txt
复制
EMAIL="820042728@qq.com"
DOMAIN="xxx.xxxx.com"
sudo certbot certonly --standalone --preferred-challenges http --agree-tos -n -d $DOMAIN -m $EMAIL
image.png
image.png

您的证书应存储在 /etc/letsencrypt/live/xxx.xxx.com 目录中

代码语言:txt
复制
[root@86ca990dc234 freeipa-certs]# ls /etc/letsencrypt/live/xxx.xxxx.com/
README	cert.pem  chain.pem  fullchain.pem  privkey.pem

确认生成所需的证书后启动 httpd 服务器:

代码语言:txt
复制
sudo systemctl restart httpd

添加 Let's Encrypt SSL 证书以在 FreeIPA Web UI 中使用:

代码语言:txt
复制
DOMAIN="xxx.xxx.com" # Set correct IdM hostname
sudo ipa-server-certinstall -w -d /etc/letsencrypt/live/$DOMAIN/privkey.pem /etc/letsencrypt/live/$DOMAIN/cert.pem --pin=''
image.png
image.png

重启 FreeIPA 服务:

代码语言:txt
复制
[root@86ca990dc234 freeipa-certs]# sudo ipactl restart
Restarting Directory Service
Restarting krb5kdc Service
Restarting kadmin Service
Restarting named Service
Restarting httpd Service
Restarting ipa-custodia Service
Restarting pki-tomcatd Service
Restarting ipa-otpd Service
Restarting ipa-dnskeysyncd Service
ipa: INFO: The ipactl command was successfu

可以从终端或网络浏览器确认当前使用的 SSL 证书。 使用 OpenSSL:

代码语言:txt
复制
openssl s_client -showcerts -verify 5 -connect $(hostname -f):443
image.png
image.png

浏览器访问:

image.png
image.png

使用 bash 脚本使用 Let's Encrypt 保护 FreeIPA 服务器:

github 克隆官方 FreeIPA Let's Encrypt 管理脚本代码:

代码语言:txt
复制
git clone https://github.com/freeipa/freeipa-letsencrypt.git
image.png
image.png

切换到freeipa-letsencrypt目录,编辑 renew-le.sh 脚本并设置 EMAIL 变量::

代码语言:txt
复制
cd freeipa-letsencrypt
$ vim renew-le.sh
EMAIL="820042728@qq.com"

在 setup-le.sh 脚本中,FreeIPA 服务器 FQDN 设置为服务器的主机名(确保hostname -f命令将主机名作为 FQDN 返回:):

代码语言:txt
复制
FQDN=$(hostname -f)
hostname -f
image.png
image.png

运行 setup-le.sh 脚本:

代码语言:txt
复制
sudo bash setup-le.sh

该脚本将执行以下操作:

  1. 将 Let's Encrypt CA 证书安装到 FreeIPA 证书存储中
  2. 为 FreeIPA Web 界面申请新证书

会出现一下提示让输入pass:

代码语言:txt
复制
Enter pass phrase for /var/lib/ipa/private/httpd.key:

尝试了好多次没有找到这个pass,最后参照:https://github.com/freeipa/freeipa-letsencrypt/issues/18。找到此pass:

代码语言:txt
复制
cat /var/lib/ipa/passwds/xxx.xxxx.com-443-RSA
image.png
image.png
image.png
image.png

重启httpd服务,确认 ipa-certupdate 命令执行成功:

代码语言:txt
复制
sudo systemctl restart httpd
sudo ipa-certupdate
image.png
image.png

修改 Apache Web 服务器配置文件以设置 SSL 证书和密钥:

如果只对在浏览器页面上使用 Let's Encrypt SSL 感兴趣,您可以手动修改 ssl.conf 文件并设置以下指令(但是文章中说不推荐?):

代码语言:txt
复制
$ sudo vim /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/letsencrypt/live/xxxx.xxxx.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/xxxx.xxxx.com/privkey.pem
image.png
image.png
image.png
image.png

重启httpd服务:

代码语言:txt
复制
systemctl restart httpd
image.png
image.png

更新 FreeIPA Let's Encrypt 证书:

每当续订 SSL 证书时,运行以下命令以在 FreeIPA 端更新:

代码语言:txt
复制
DOMAIN="xxxx.xxxx.com" # Set correct IdM hostname
sudo ipa-server-certinstall -w -d /etc/letsencrypt/live/$DOMAIN/privkey.pem /etc/letsencrypt/live/$DOMAIN/cert.pem --pin=''

根据需要输入目录管理员密码:

image.png
image.png

然后在安装证书后继续重启 FreeIPA 服务:

代码语言:txt
复制
sudo ipactl restart

跑了一遍流程了知道怎么偷懒换成自己的证书了试一下:

腾讯云下载了nginx证书:

image.png
image.png

修改/etc/httpd/conf.d/ssl.conf对应位置:

SSLCertificateFile 对应上图pem文件,SSLCertificateKeyFile对应上面key文件(可以直接修改后缀!)

image.png
image.png

重启apache服务:

代码语言:txt
复制
systemctl restart httpd

成功修改成自己的泛域名证书:

image.png
image.png

注意

关于证书还是自动生成使用 Let's Encrypt SSL 不要自己上传自己的证书,会出现无法登陆的问题:

image.png
image.png
代码语言:txt
复制
[remote xxx.xxx.xxx.xxxx:3045] ipa: INFO: 401 Unauthorized: HTTPSConnectionPool(host='xxx.xxx.com', port=443): Max retries exceeded with url: /ipa/session/cookie (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:897)'),))

我当时出现了web ui登陆的错误:记一次FreeIPA WEBUI 登陆错误 Login failed due to an unkno基本也是这样的样子,后面将证书重新使用 Let's Encrypt SSL 生成后解决问题!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景:
  • Freeipa安装
    • 安装docker docker-compose
      • docker安装
      • 安装docker-compose
      • 配置docker镜像加速,设置docker服务开机启动:
    • docker-compose 搭建freeipa服务:
      • 创建数据目录,编写docker-compose.yaml文件
      • cgroup v2带来的无法启动
    • 访问freeipa域名:
      • 第一次访问点两次取消进入登陆页面
      • 修改freeipa https证书准备
      • 使用 Let's Encrypt SSL 证书保护 FreeIPA 服务器
      • 使用 bash 脚本使用 Let's Encrypt 保护 FreeIPA 服务器:
      • 修改 Apache Web 服务器配置文件以设置 SSL 证书和密钥:
      • 更新 FreeIPA Let's Encrypt 证书:
      • 跑了一遍流程了知道怎么偷懒换成自己的证书了试一下:
    • 注意
    相关产品与服务
    容器镜像服务
    容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档