docker部署kerberos,群晖nas中nfs开启kerberos校验

背景

nas开启nfs存储共享,默认情况下只能给IP/24做限制, 达不到安全效果

需要增加kerberos策略校验,并且持久化kerberos数据,避免容器重启丢失数据

环境描述

宿主机系统:CentOS Linux release 7.9.2009 (Core)

Docker版本:Docker version 20.10.6, build 370c289

一、容器部署kerberos

​# 注意添加 /etc/hosts
192.168.10.10 kerberosclient.wo.com
192.168.10.10 kerberosserver.wo.com

1.kerberos配置文件

mkdir -p /data/kerberos/dockerfilecd /data/kerberos/dockerfile

@FQDN@ 后面使用sed更改为大写域名 = WO.COM

@fqdn@ 后面使用sed更改为小写域名 = wo.com

@kdc_server@ kdc服务器地址 = kerberosclient.wo.com

krb5.conf

[logging]default = FILE:/var/log/krb5libs.logkdc = FILE:/var/log/krb5kdc.logadmin_server = FILE:/var/log/kadmind.log[libdefaults]dns_lookup_realm = falseticket_lifetime = 24hrenew_lifetime = 7dforwardable = truerdns = falsepkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crtdefault_realm = @FQDN@default_ccache_name = FILE:/tmp/krb5cc_cli_%{uid}[realms]@FQDN@ = {kdc = @kdc_server@admin_server = @kdc_server@admin_keytab = /var/lib/krb5kdc/admin.keytabdatabase_name = /var/lib/krb5kdc/principal}[domain_realm].@fqdn@ = @FQDN@

kadm5.acl

*/admin@@FQDN@ *

kerberos.sh

#!/bin/bash
fqdn="wo.com"
FQDN="WO.COM"
kdc_server="kerberosserver.wo.com"
PASS="Fa1Q@D@N"KRB5_KTNAME="/var/lib/krb5kdc/admin.keytab"
inited="/var/lib/krb5kdc/inited"sed -i "s#@kdc_server@#${kdc_server}#g" /etc/krb5kdc/kdc.conf
sed -i "s#@fqdn@#${fqdn}#g" /etc/krb5kdc/kdc.conf
sed -i "s#@FQDN@#${FQDN}#g" /etc/krb5kdc/kdc.conf
sed -i "s#@FQDN@#${FQDN}#g" /etc/krb5kdc/kadm5.aclfunction init_user() {if [ -f "${inited}" ];then# TODO没找到指定该文件的配置项, 将该文件还原到/etc/目录cp /var/lib/krb5kdc/.k5.${FQDN} /etc/krb5kdc/.k5.${FQDN}echo "kerberos已存在, 跳过初始化"return;fiecho "begin init user"# create kerberos databaseecho -e "${PASS}\n${PASS}" | kdb5_util create -s# create adminecho -e "${PASS}\n${PASS}" | kadmin.local -q "addprinc root/admin"kadmin.local -q "ktadd -k /var/lib/krb5kdc/admin.keytab root/admin"# create clientecho -e "${PASS}\n${PASS}" | kadmin.local -q "addprinc -randkey nfs/kerberosclient.${fqdn}"# create client keytabkadmin.local -q "ktadd -norandkey -k ${KRB5_KTNAME} nfs/kerberosclient.${fqdn}"kadmin.local -q "xst -k /app/cert/krb5.keytab -norandkey nfs/kerberosclient.${fqdn}"# client使用cp /etc/krb5kdc/kdc.conf /app/cert/krb5.conf# 将该文件持久化存储cp /etc/krb5kdc/.k5.${FQDN} /var/lib/krb5kdc/.k5.${FQDN}touch "${inited}"echo "user inite success"
}function main() {init_user/usr/local/bin/supervisord -n -c /etc/supervisord.conf
}main

supervisord.conf

[supervisord]
logfile=/var/log/supervisord/supervisord.log    ; supervisord log file
logfile_maxbytes=50MB                           ; maximum size of logfile before rotation
logfile_backups=10                              ; number of backed up logfiles
loglevel=error                                  ; info, debug, warn, trace
pidfile=/var/run/supervisord.pid                ; pidfile location
nodaemon=false                                  ; run supervisord as a daemon
minfds=1024                                     ; number of startup file descriptors
minprocs=200                                    ; number of process descriptors
user=root                                       ; default user
childlogdir=/var/log/supervisord/               ; where child log files will live[program:krb5-kdc]
command=service krb5-kdc start
autostart=true
autorestart=true[program:krb5-admin-server]
command=service krb5-admin-server start
autostart=true
autorestart=true[supervisorctl]

dockerfile

FROM ubuntu:xenialENV DEBIAN_FRONTEND noninteractiveRUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list \&& sed -i s@/security.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list \&& apt update \&& apt install -y python-dev python-pip python-wheel python-setuptools python-pkg-resources krb5-admin-server krb5-kdc \&& rm -rf /var/lib/apt/lists/* \&& mkdir -p /var/log/supervisord /app/cert \&& pip install supervisor==4.2.4COPY krb5.conf /etc/krb5kdc/kdc.conf
COPY kadm5.acl /etc/krb5kdc/kadm5.acl
COPY krb5.conf /etc/krb5.conf
COPY kerberos.sh /app/kerberos.sh
COPY supervisord.conf /etc/supervisord.confWORKDIR /appCMD ["/bin/bash", "/app/kerberos.sh"]

2.构建镜像

docker build -t kerberos:1.0.0 .

3.运行镜像

mkdir -p /data/kerberos/data
cd /data/kerberos

start.sh

#!/bin/bash
docker rm -f kerberos# 持久化数据, 避免容器重启数据库丢失
# /app/cert 用于给client的keytab和conf配置
# /var/lib/krb5kdc 数据库文件存放路径
# /etc/krb5kdc/.k5.xxx master文件, 也需要持久化
# 在kerberos.sh脚本时, 会将.k5文件放到/var/lib/krb5kdcdocker run -itd  \-p 88:88 \-p 749:749 \-v /data/kerberos/data/cert:/app/cert \-v /data/kerberos/data/db:/var/lib/krb5kdc \--name=kerberos \kerberos:1.0.0

二、nas配置krb5.keytab

/data/kerberos/data/cert/krb5.keytab

将krb5.keytab上传到nas

# 开启krb5校验

三、nfs客户端机器

1.安装krb5

yum -y install  krb5-workstation ufs-utils文件从kerberos服务端获取,拷贝到客户端(注意区分机器)
cp /data/kerberos/data/cert/krb5.conf  /etc/krb5.conf
cp /data/kerberos/data/cert/krb5.keytab /etc/krb5.keytab客户端启动rpc-gssd
systemctl restart rpc-gssd

2.验证

kinit -kt /etc/krb5.keytab nfs/kerberosclient.wo.com@WO.COMklist挂载
mount -o vers=4,sec=krb5 kerberosclient.wo.com:/volume1/data /mnt

四、参考文档

如何配置 NFS 共享文件夹以使用 Kerberos? - Synology 知识中心

Synology NAS NFS Kerberos 配置与使用 – 个人笔记分享

NFS | DSM - Synology 知识中心

使用Docker快速搭建Kerberos环境 - 知乎

基于Kerberos认证的NFS服务器_nfs kerberos_黑色蒲G英~的博客-CSDN博客

五、其他报错信息

1.用户和组显示nobody

用户和组显示nobody

更改/etc/idmapd.conf 将Domain 改为fqdn 的域名

systemctl restart rpcidmapd

2.创建文件提示权限不足

在nas上,上传kerberos密钥对的配置,增加ID映射,对应用那个user

3.access denied by server while mounting

# 查看kerberos应用日志
tail -f  /var/log/k*

4.mount.nfs an incorrect mount option was specified

# 没有krb5.conf krb5.keytab 2个文件# 然后启动rpc-gssd
systemctl restart rpc-gssd

 5.挂载后文件都显示777权限

 改为无映射

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/188423.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

判断上三角矩阵

主对角线 &#xff08; 行 大于 列&#xff09;上的元素是0 &#xff1b;因为最后要先输入数组&#xff0c;后输出判断结果&#xff0c;所以运用到数组把结果存起来 #include <stdio.h> int input(int arr[][10]) { int i 0; int j 0; int m 0; s…

7nm项目之顶层规划——01数据导入

1.创建workspace 创建workspace后&#xff0c;在其目录下产生。 CORTEXA53.json文件是将有默认配置的文件master.json、有library的.config.json文件、tunes下CORTEXA53.tunes.json文件合并 注&#xff1a;tunes下的CORTEXA53.tunes.json文件可以覆盖一些master.json的设置…

绩效考核实施之——如何做好部门间绩效的平衡?

绩效考核是企业人力资源管理的难点&#xff0c;而绩效考核的公正往往是绩效考核成败的关键&#xff0c; 如果绩效考核的不公平不合理&#xff0c;极易带来企业人员的负面情绪&#xff0c;甚至引起人才的流失。想要保证绩效考核的公平性&#xff0c;就要做好绩效的平衡&#xf…

学习感悟一己之言

学习感悟一己之言 学习上克服困难实际上是克服心理上或认识上的障碍的过程。所谓的理解&#xff0c;就是化陌生为熟悉。看不懂&#xff0c;一方面是因为接触的材料太陌生&#xff0c;即远离你当前的背景知识&#xff1b;另一方面是材料或讲述者的描述刻画不准确或晦涩不当。有了…

Halcon算子中的slant倾斜hom_mat2d_slant

1.hom_mat2d_slant(HomMat2DIdentity, rad(50), y, 0, 0, HomMat2DSlant) --这个是选择20度和50度的。&#xff08;0&#xff0c; 0&#xff09;点对应的是左上角&#xff0c;50度就是让y轴产生有50度的倾角。 2.hom_mat2d_slant(HomMat2DIdentity, rad(60), x, 0, 0, HomMat2D…

【Python表白限定】李峋同款可写字版跳动的爱心(完整代码)

文章目录 跳动的爱心环境需求完整代码详细分析系列文章 跳动的爱心 环境需求 python3.11.4PyCharm Community Edition 2023.2.5pyinstaller6.2.0&#xff08;可选&#xff0c;这个库用于打包&#xff0c;使程序没有python环境也可以运行&#xff0c;如果想发给好朋友的话需要这…

RocketMQ-快速实战

MQ简介 MQ&#xff1a;MessageQueue&#xff0c;消息队列。是在互联网中使用非常广泛的一系列服务中间件。 Message&#xff1a;消息。消息是在不同进程之间传递的数据。这些进程可以部署在同一台机器上&#xff0c;也可以分布在不同机器上。&#xff08;数据形式&#xff1a…

【C++笔记】红黑树封装map和set

一、map和set的泛型封装逻辑 map和set的底层都是红黑树&#xff0c;所以我们想要用红黑树封装map和set的第一个问题就来了&#xff0c;因为set是key结构而map是key-value结构&#xff0c;怎样用同一个底层结构去封装出两个不同存储结构的容器呢&#xff1f;难道我们要将红黑树…

git的版本控制流程

1、git是一款版本控制工具 例如我们常用的淘宝&#xff0c;每次升级&#xff0c;版本号就会加一。那么我们怎么控制版本号呢&#xff1f; --使用git。 2、最常使用的git指令 git add . 暂存 git commit -m"***" 提交到本地 git pull 将远程仓库代码下拉到本地 git …

threejs教程

应群友要求出了个小白教程&#xff0c;此外也有进阶教程。 替代之前老版本的教程。 教程案例&#xff1a; 新教程地址&#xff1a;https://www.wellyyss.cn/ys-course/#/ 教程使用的是react搭建的 高级教程主要是案例 年底比较忙估计要晚一点才整合。 后续的计划是&#xff1…

Leetcod面试经典150题刷题记录——数组 / 字符串篇

数组 / 字符串篇 1. 合并两个有序数组Python3排序法双指针法 2. 删除有序数组中的重复元素3. H 指数Python3排序法计数排序法二分查找 有个技巧&#xff0c;若想熟悉语言的写法&#xff0c;可以照着其它语言的题解&#xff0c;写目标语言的代码&#xff0c;比如有C/C的题解&…

HarmonyOS应用开发者基础认证考试(98分答案)

基于最近大家都在考这个应用开发者基础认证考试&#xff0c;因此出了一期&#xff0c;一样复制word里面搜索做&#xff0c;很快&#xff0c;当然good luck 判断题 Ability是系统调度应用的最小单元,是能够完成一个独立功能的组件。一个应用可以包含一个或多个Ability。 正确(Tr…

连接池 Druid (补充) - removeAbandoned

很久之前写的文章&#xff0c;格式惨不忍睹&#xff0c;浏览了下还是有人看的&#xff0c;但是好像不支持在原文上直接修改格式&#xff0c;所以重新调整一下吧。 removeAbandoned参数 removeAbandoned参数指定连接池是否移除被遗弃的连接。 具体的逻辑分两部分&#xff1a;…

应用于智慧社区的AI边缘计算盒子+AI算法软硬一体化方案

据统计&#xff0c;全国大约有45W个小区&#xff0c;监控高空抛物、治理乱扔垃圾、人员管理、烟火检测、占道、人流量检测、车型检测等&#xff1b;营造社区安全等需求跟每一个参与者息息相关&#xff0c;据法院公开资料显示&#xff0c;每年有1000宗以上跟高空抛物有关的各类案…

js一行压缩库

js一行压缩库 压缩 JavaScript 代码通常是为了减小文件大小&#xff0c;提高加载速度。有一些常见的工具和软件可用于这个目的。以下是其中一些&#xff1a; UglifyJS&#xff1a; UglifyJS 是一个流行的 JavaScript 压缩工具&#xff0c;可以通过命令行或作为一个 npm 包来使…

进程与线程的区别

作者简介&#xff1a; zoro-1&#xff0c;目前大二&#xff0c;正在学习Java&#xff0c;数据结构,mysql,javaee等 作者主页&#xff1a; zoro-1的主页 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f496; 进程与线程的区别 进程线程进程与线…

Linux网络编程中的反应堆模型详解

文章目录 概述介绍原理4. 使用场景总结&#xff1a; 概述 摘要&#xff1a;反应堆模型&#xff08;Reactor Pattern&#xff09;是一种常用于Linux网络编程的设计模式&#xff0c;用于处理多个并发连接。本文将详细介绍反应堆模型的原理&#xff0c;使用场景以及如何在C语言中…

HyperBDR云容灾v4.10.1发布,划重点:支持UCloud云平台自动化容灾+新增可灵活定义的备份策略

版本更新 HyperBDR云容灾v4.10.1版本来啦&#xff01; 此次更新为大家带来了多个新功能&#xff0c;下面让我们来看看具体是哪些吧~ 01 策略管理新功能&#xff1a; 多时间段限速功能&#xff1a; 更加灵活的多个时间段限速选择&#xff0c;可以在创建策略时为不同的时间段设…

数字人可以为文化传播带来什么?

近日&#xff0c;由哈萨克斯坦驻华大使馆、中国外文局文化传播中心、中关村科幻产业创新中心联合发起的中哈青年友谊数字人怡漾和苏路&#xff08;Сұлу&#xff09;正式发布。其中&#xff0c;代表中方形象的数字人怡漾&#xff0c;不仅将成为中哈青年文化交流的标志与代言…

JavaScript WebAPI(三)(详解)

这次介绍一下webAPI中的一些知识&#xff1a; 回调函数 回调函数是指 如果将函数A做为参数传递给函数B时&#xff0c;我们称函数A为回调函数 例如&#xff1a; // 立即执行函数中传递的函数是一个回调函数 (function(){ console.log("我是回调函数") })(); // …