Docker 部署 FreeIPA 服务

  • 一、FreeIPA Docker 服务部署
    • 1、安装 FreeIPA 服务器
    • 2、部署过程
    • 3、域名解析
  • 二、FreeIPA 服务器脚本批量用户操作
    • 1、进入 FreeIPA 容器
    • 2、登录 admin 用户,才可进行操作
    • 3、添加用户脚本 addUsersAndToken.sh
    • 4、批量删除用户脚本 delUsers.sh
    • 5、批量删除用户 token 脚本 delToken.sh
    • 6、批量修改用户 token 脚本 modToken.sh
  • 三、Java 通过连接 LDAP 服务器对用户进行认证

一、FreeIPA Docker 服务部署

  1. 为省去 FreeIPA 服务器环境安装复杂性,采取 docker 容器安装最为方便。
    官网参考连接:https://hub.docker.com/r/freeipa/freeipa-server/
  2. FreeIPA 是集中认证和权限管理服务器系统,包含 WEB UI 管理界面,界面访问地址需要全域访问(即不能通过IP地址直接访问界面),需要将地址与 IP 在 /etc/hosts 里面映射。

1、安装 FreeIPA 服务器

启动 docker 安装容器命令如下:
注意: 官网没有 --privileged=true--no-ntp 参数,分别用于开启 docker 容器高级权限和安装不启动时间同步组件安装。需要将 docker 端口映射到宿主机端口上。
首先在宿主机上创建 FreeIPA 数据目录:

mkdir /var/lib/ipa-data

然后启动 docker 容器:

sudo docker run --name freeipa-server --privileged=true -p 80:80 -p 389:389 -p 443:443 -ti -h freeipa.example.com -v /sys/fs/cgroup:/sys/fs/cgroup:ro --tmpfs /run --tmpfs /tmp -v /var/lib/ipa-data:/data:Z --restart=on-failure:3 freeipa/freeipa-server --no-ntp

注意:如果遇到 IPV6 问题,可能需要打开 IPV6
默认关闭 IPV6 的打开方法:

  1. 编辑 /etc/default/grub 文件,将其中 ipv6.disable=1 去除;
  2. 使用 grub2-mkconfig 重新编译 grub.cfg 文件,最后 reboot 重启即可;
[test@test]$ vim /etc/default/grub
[test@test]$ grub2-mkconfig -o /boot/grub2/grub.cfg
[test@test]$ reboot

服务器开机后重启 docker 服务

[test@test]$ systemctl start docker

2、部署过程


This program will set up the FreeIPA Server.

This includes:

  • Configure a stand-alone CA (dogtag) for certificate management
  • Create and configure an instance of Directory Server
  • Create and configure a Kerberos Key Distribution Center (KDC)
  • Configure Apache (httpd)

Excluded by options:

  • Configure the Network Time Daemon (ntpd)

To accept the default shown in brackets, press the Enter key.

Do you want to configure integrated DNS (BIND)? [no]: no

Enter the fully qualified domain name of the computer
on which you’re setting up server software. Using the form
.
Example: master.example.com.

Server host name [ipa.jansen.org]:freeipa.example.com

The domain name has been determined based on the host name.

Please confirm the domain name [jansen.org]: freeipa.example.com

The kerberos protocol requires a Realm name to be defined.
This is typically the domain name converted to uppercase.

Please provide a realm name [IPA.JANSEN.ORG]: FREEIPA.EXAMPLE.COM

An upper-case realm name is required.
Do you want to use FREEIPATEST.GENERALICHINA.COM as realm name? [yes]: yes

Certain directory server operations require an administrative user.
This user is referred to as the Directory Manager and has full access
to the Directory for system management tasks and will be added to the
instance of directory server created for IPA.
The password must be at least 8 characters long.

Directory Manager password:*********
Password (confirm):*********

The IPA server requires an administrative user, named ‘admin’.
This user is a regular system account used for IPA server administration.

IPA admin password:*********
Password (confirm):*********

The IPA Master Server will be configured with:
Hostname: freeipa.example.com
IP address(es): 172.17.0.7
Domain name: freeipa.example.com
Realm name: FREEIPA.EXAMPLE.COM

Continue to configure the system with these values? [no]:yes
The following operations may take some minutes to complete.
Please wait until the prompt is returned.

接下来自动配置的时间可能有点久
直到出现:
FreeIPA server configured.


3、域名解析

找网络管理在域控服务器上加域名解析,nslookup 命令查询到域名对应的 IP 地址

[root@freeipa /]# nslookup freeipa.example.com
Server:         10.5.11.20
Address:        10.5.11.20#53Name:   freeipa.example.com
Address: 10.5.35.69

也可通过 nslookup 查看 ip 的反向解析记录,查看是否配置了 dns

[root@freeipa ~]# nslookup 10.5.35.69
Server:         10.5.11.20
Address:        10.5.11.20#5369.35.5.10.in-addr.arpa name = freeipa.example.com.[root@freeipa ~]# nslookup 10.5.56.2
Server:         10.5.11.20
Address:        10.5.11.20#53** server can't find 2.56.5.10.in-addr.arpa.: NXDOMAIN

添加域名解析后,可使用 https://freeipa.example.com/ipa/ui 登录
前台页面如下:

admin 账户登录,密码为最开始配置 freeipa-server 时设置的密码
假设某一个用户 test 设置了 OTP token, 那登录密码为: 用户密码+token密码
可在 IPA server 下的 API browser 查看操作 API

二、FreeIPA 服务器脚本批量用户操作

1、进入 FreeIPA 容器

#freeipa 为 freeipa-server 容器的 name
docker exec -it freeipa bash

2、登录 admin 用户,才可进行操作

#这里 admin 的登录密码就是最开始配置 freeipa-server 时设置的密码
[root@freeipa /]$ kinit admin
Password for admin@FREEIPA.EXAMPLE.COM: ********

3、添加用户脚本 addUsersAndToken.sh

#!/bin/bash
# 添加用户并设置OTP Token
# 设置新增用户的初始密码
password=freeipa
if [ -f otplist ]; thenrm -rf otplist*
fi
if [ -f users.txt ]; then
starttime=`date +'%Y-%m-%d %H:%M:%S'`
start_seconds=$(date --date="$starttime" +%s);
for line in `cat users.txt`
#例如line = test/测试/test@generalichina.com/保险公司用户
dologin=${line%%/*}str=${line#*/}str2=${str%/*}name=${str2%/*}email=${str2##*/}title=${line##*/}/usr/bin/expect<<-EOFset timeout 10spawn ipa user-add ${login} --first ${name} --last ${name} --title ${title} --cn ${name} --displayname ${name} --email ${email}  --user-auth-type otp --passwordexpect "Password:"send "$password\r"expect "Enter Password again to verify:"send "$password\r"expect eofEOFipa otptoken-add --type=totp --not-before=20190101000000Z --not-after=22000101000000Z --owner=${login} --algo=sha512 --digits=6 --interval=60 --no-qrcode --desc="Token for ${name}" >> ./otplist#echo "-----Add Token success!  ${login}-${name}"
done
cat otplist | grep URI | awk -F 'URI:' '{print $2}' >> otplist.txt
elseecho "Error! users.txt not exists!"
fi
endtime=`date +'%Y-%m-%d %H:%M:%S'`
end_seconds=$(date --date="$endtime" +%s);
echo "本次运行时间: "$((end_seconds-start_seconds))"s"

这里需要用户列表文件 users.txt
内容格式例如:test/测试/test@example.com/系统用户

addUsersAndToken.sh 脚本执行完后,会将 token 信息返回到 otplist.txt 文件内。

4、批量删除用户脚本 delUsers.sh

#!bin/bash
#查询用户输出到 userlist.txt
ipa user-find | grep User | awk -F ':' '{print $2}' >> userlist.txt
#排除不可删除的用户,例如 admin
if [ -f ./userlist.txt ];
thencat userlist.txt | sed '/admin/d' > newuserlist.txtrm -f userlist.txt
fi
if [ -f newuserlist.txt ];
thenfor username in `cat newuserlist.txt`doecho "删除用户 $username"ipa user-del $usernamedonerm -f newuserlist.txt
fi

5、批量删除用户 token 脚本 delToken.sh

#!bin/bash
ipa otptoken-find | grep Unique | awk -F ':' '{print $2}' >> tokenlist.txt
if [ -f ./tokenlist.txt ]; then
for id in `cat tokenlist.txt`
doipa otptoken-del ${id}
done
rm -rf tokenlist.txt
fi

6、批量修改用户 token 脚本 modToken.sh

#!bin/bash
for user in `cat temp.txt`
#修改最晚失效时间
doipa otptoken-mod `ipa otptoken-find --owner=${user} | grep Unique | awk -F ':' '{print $2}'`  --not-after=22000101000000Z
done

三、Java 通过连接 LDAP 服务器对用户进行认证

private boolean LDAP_connect(String userName, String validationCode) {LdapContext env = new Hashtable<String, String>();env.put(Context.INITIAL_CONTEXT_FACTORY, FACTORY);env.put(Context.PROVIDER_URL, URL + BASEDN);// LDAP serverenv.put(Context.SECURITY_PRINCIPAL, "uid=" + userName + SEARCHDN);env.put(Context.SECURITY_AUTHENTICATION, "simple");env.put(Context.SECURITY_CREDENTIALS, "cnpcfreeipa"+validationCode);boolean returnFlag = false;// 此处若不指定用户名和密码,则自动转换为匿名登录try {ctx = new InitialLdapContext(env, connCtls);returnFlag = true;} catch (NamingException e) {returnFlag = false;}return returnFlag;}

配置文件:

#####################双因子认证 config###########################
#双因子认证服务器freeipa-server地址
URL=ldap://ip:389/
#ldap服务 端口
PORT=389
#基本域和查询域
BASEDN=dc=freeipa,dc=example,dc=com
SEARCHDN=,cn=users,cn=accounts,dc=freeipa,dc=example,dc=com
#协议工厂
FACTORY=com.sun.jndi.ldap.LdapCtxFactory

Docker 部署 FreeIPA 服务相关推荐

  1. docker部署微服务项目

    上次有人说部署单个springboot项目和ssm写的非常的简单可以写一篇docker部署微服务的结构的文章的吗 安排 什么是微服务? 微服务架构是一种将单个应用程序作为一套小型服务开发的方法,每种应 ...

  2. Docker 部署微服务项目

    目录 一.前言 二.环境准备 1.安装 Docker 2.Docker 安装 MySQL 3.Docker 安装 Redis 4.Docker 安装 Nacos 5.Docker 安装 Nginx 三 ...

  3. 使用 Docker 部署 Node 服务

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 前言 Docker 是一个开源的容器引擎.开发者可以将自己的应用以及依赖打包为一个可移植的容器,然后 ...

  4. pg安装部署linux_简简单单基于docker部署微服务网关

    ❝ 本文整理于今年3月,收录在个人开源仓库JavaScriptCollection中,其中很多概念不乏借鉴.摘抄自官网,便于复习相关概念,有兴趣的可以直接去仓库Clone文档学习.参考! ❞ 基本概念 ...

  5. Docker部署微服务应用笔记(三)

    Docker安装java:8环境 因为现在都是使用java8开发直接使用命令: docker pull java这是默认下载最新版本镜像 docker pull java:8这是下载指定版本镜像 列出 ...

  6. k8s+jenkins+docker部署微服务实现CI/CD

    "所爱隔山海,山海不可平,海有舟可渡,山有路可行,此爱翻山海,山海皆可平." 作为一个想搞开发的,最近似乎都在干运维,不知道有没有跑偏... 2021.5.14 一般的中小公司个人 ...

  7. 微服务开发及部署_简简单单基于docker部署微服务网关

    ❝ 本文整理于今年3月,收录在个人开源仓库JavaScriptCollection中,其中很多概念不乏借鉴.摘抄自官网,便于复习相关概念,有兴趣的可以直接去仓库Clone文档学习.参考! ❞ 基本概念 ...

  8. docker部署java服务

    目的 1.在centos上安装mysql.jdk,之后完成java服务部署 2.通过docker进行部署,熟悉docker命令 3.打包发布到docker hub 系统安装 安装centos7系统,首 ...

  9. 前端Docker部署 https服务以及使用 iframe嵌套页面遇到的问题

    中心思想:先部署 http服务,再部署 https服务转发到 http服务上 (如果 http和 https服务部署在同一台服务器上,可共用一个 docker容器同时部署,见 3) 前端Docker微 ...

最新文章

  1. 《疯狂Java讲义》学习笔记(十)异常处理
  2. 算法题:“找出单身狗”--找出一个数组中只出现一次的数字
  3. fancybox 在打开窗口前 先执行 js脚本,fancybox设置只能通过右上角关闭,fancybox遮罩层关闭...
  4. [Gamma阶段]第十次Scrum Meeting
  5. Post请求,向服务器发送用户信息
  6. plsql如何连接oracle11g_64位win7 plsql连不上oracle11gr2 64位—plsql连接配置
  7. python的pandas库中如何计算每列出现最多的值_Python Pandas:计算多个列的每个唯一值的显示次数...
  8. javafx中的tree_JavaFX中的塔防(5)
  9. linux setsockopt函数
  10. Python中的操作符重载
  11. 如何引导企业数据“价值变现”,看能源化工业的数据化管理
  12. October CMS - 快速入门 1 安装
  13. 给Eclipse安装MinGW
  14. 【SAE 部署 JavaWeb 项目报 404 错误】
  15. java1.8 64_jdk 1.8 64位 官方版
  16. 小学计算机无生试讲教案,小学数学无生试讲教案(9页)-原创力文档
  17. IP地址介绍,子网划分(VLSM),构造超网(CIDR) 详解
  18. 五五开周刊(第4期):星链会改变游戏规则吗?
  19. Go语言环境下载与运行项目-Mac【小白教程】
  20. ATeam社区(牛客网项目第三章)

热门文章

  1. 计算机调整亮度是哪个好,电脑屏幕亮度怎么调 电脑屏幕亮度怎么调对眼睛最好...
  2. Startup攻略秘籍,从头到尾,一篇搞定!
  3. ISCC2022-MISC-降维打击
  4. 一键加群android代码如何使用!
  5. MIT算法导论03-分治法
  6. 超大型生鲜配送软件源码
  7. Ubuntu18.04运行校园网客户端
  8. php在线备忘录,PHP设计模式 - 备忘录模式
  9. mongodb可视化工具 mac版 Studio 3T破解
  10. 人脑是量子计算机科学实验,你的大脑可能是一台量子计算机