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权限

改为无映射
相关文章:
docker部署kerberos,群晖nas中nfs开启kerberos校验
背景 nas开启nfs存储共享,默认情况下只能给IP/24做限制, 达不到安全效果 需要增加kerberos策略校验,并且持久化kerberos数据,避免容器重启丢失数据 环境描述 宿主机系统:CentOS Linux release 7.9.2009 (Core) Docker版本…...
【前端】数据行点击选择
前言 【前篇文章】说了,我们公司的核心价值就是让人越来越懒,能怎么便捷就怎么便捷,主打一个简单实用又快捷,为了实现这个目标,我看成这个列表陷入了深思在想,要不要子表的数据加载在点击这个行时,就可以展示数据,这样就不用每次都要点那个小圆圈啦。 查资料 这显然…...
网络安全技术
网络安全技术是一种保护网络系统免受攻击、破坏或未经授权访问的技术。它涵盖了一系列的方法和工具,旨在确保数据的完整性、可用性和保密性。以下是一些主要的网络安全技术: 1. 防火墙:防火墙是一种用于阻止未经授权的访问,同时允…...
这几款 idea 插件让效率起飞!
作者:苍何,前大厂高级 Java 工程师,阿里云专家博主,CSDN 2023 年 实力新星,土木转码,现任部门技术 leader,专注于互联网技术分享,职场经验分享。 🔥热门文章推荐…...
[FUNC]判断窗口在哪一个屏幕上
#Requires AutoHotkey v2.0#z:: { ToolTip "Notepad窗口所在显示屏是:" GetMonitor() } GetMonitor() {CoordMode("Mouse", "Screen"); MouseGetPos &mx, &myWinGetPos &mx, &my,,,"ahk_class Notepad"…...
Vue语音播报,不用安装任何包和插件,直接调用。
Vue语音播报功能可以通过使用浏览器提供的Web Speech API来实现。这个API允许你的应用程序通过浏览器朗读文本,不用安装任何包和插件,直接调用。以下是一个简单的介绍,演示如何在Vue中使用语音提示功能: 一、JS版本 <template…...
公网穿透和RTC
RTC RTC 是 Real-Time Communication 的简写,正如其中文名称 “即时通讯” 的意思一样,RTC 协议被广泛用于各种即时通讯领域,诸如: 在线教育;直播中的主播连麦 PK;日常生活的音视频电话;.....…...
uniapp 使用web-view外接三方
来源 前阵子有个需求是需要在原有的项目上加入一个电子签名的功能,为了兼容性和复用性后面解决方法是将这个电子签名写在一个新的项目中,然后原有的项目使用web-view接入这个电子签名项目; 最近又有一个需求,是需要接入第三方的…...
SQL Sever 复习笔记【一】
SQL Sever 基础知识 一、查询数据第1节 基本 SQL Server 语句SELECT第2节 SELECT语句示例2.1 SELECT - 检索表示例的某些列2.2 SELECT - 检索表的所有列2.3 SELECT - 对结果集进行筛选2.4 SELECT - 对结果集进行排序2.5 SELECT - 对结果集进行分组2.5 SELECT - 对结果集进行筛选…...
外贸平台信息群发脚本的优势!
随着全球电子商务的快速发展,越来越多的外贸企业开始注重海外市场的拓展,而在这个过程中,如何有效地向海外客户发送信息成为了关键的一环,传统的邮件群发和手动发送方式不仅效率低下,而且容易出错。 因此,…...
一文打尽相机单目标定(远心,沙姆镜头)
文章目录 普通镜头标定远心镜头标定沙姆镜头标定远心沙姆镜头标定实战 普通镜头标定 远心镜头标定 沙姆镜头标定 远心沙姆镜头标定 实战...
基于springboot+vue的秒杀商城(前后端分离)
博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…...
C++-火车编组
Description 货运火车要在编组站根据挂常车厢到达目的地重新分组。 如果一列火车有4节车厢,经过编组后,车厢的编组顺序为3,2,4,1,你知道编组站是怎么编组的吗? 小明到编组站参观后发现编组站的铁路有很多岔道,火车在岔道上来来回回地开动…...
kafka学习笔记(一)--脑裂
我知道你想裂,但你先别裂 目录 脑裂Kafka脑裂实验Kafka如何防止脑裂--Leader Epochepoch的局限性ISR列表ISR列表的伸缩机制 脑裂 用集群部署的大多数的分布式系统无可避免会面临脑裂问题。简单来说,脑裂就是在同一时刻出现了两个“Leader(或…...
一看就懂的RxJava源码分析
一看就懂的RxJava源码分析 前言零、观察模式简介一、RxJava使用示例一二、示例一源码分析0. 示例一代码分解1. RxJava中的观察者是谁?2. RxJava中的被观察者又是谁?3. 观察者又是如何安插到被观察者中的?4. 示例一RxJava源码整体关系类图4. R…...
halcon中灰度图自动二值化
1、首先图片要先形成灰度图,如果下一句是二值化的那就删掉 dev_clear_window() read_image(Image, D:/desktop/tmpp/微信图片_20231201184731.png) * 转为灰度图 rgb1_to_gray(Image, GrayImage) 2、双击图像变量中的GrayImage 3、工具栏点击打开灰度直方图按钮&…...
Mybatis-Plus实体类注解怎么用
TableName 用在实体类上,指定实体类对应的表名称。 TableName(value "表名") TableId 用在属性上,指定主键字段的名称和类型。主键字段的名称一般是id,类型为自增。 TableId(value "id", type IdType.AUTO) TableFi…...
我是如何写作的?
以前是如何写作的 从小学三年级开始学写作文,看的作文书,老师布置作文题目,内容我都是自己写的。那时会积累一些好词,听到什么好词就记住了。并没有去观察什么,也没有好好花心思在写作上。总觉得我写的作文与真正好的…...
绩效考核实施之——如何做好部门间绩效的平衡?
绩效考核是企业人力资源管理的难点,而绩效考核的公正往往是绩效考核成败的关键, 如果绩效考核的不公平不合理,极易带来企业人员的负面情绪,甚至引起人才的流失。想要保证绩效考核的公平性,就要做好绩效的平衡…...
全新付费进群系统源码 完整版教程
首先准备域名和服务器 安装环境:Nginx1.18 MySQL 5.6 php7.2 安装扩展sg11 伪静态thikphp 后台域名/admin账号admin密码123456 代理域名/daili账号admin密码123456 一、环境配置 二、建站上传源代码解压 上传数据库配置数据库信息 三、登入管理后台 后台域名/ad…...
告别手动逐个校验,用快马快速构建vmware密钥批量验证工具提升效率
告别手动逐个校验,用快马快速构建vmware密钥批量验证工具提升效率 最近在帮朋友处理一批VMware16的密钥验证工作,发现手动逐个检查不仅耗时耗力,还容易出错。特别是当需要验证几十甚至上百个密钥时,这种重复劳动简直让人崩溃。于…...
实战指南:基于同一份OpenSpec,用快马平台同步生成前后端代码,确保联调无忧
最近在开发一个电商平台时,我们团队遇到了前后端联调效率低下的问题。由于接口文档和实际代码存在差异,经常出现前端调用参数和后端接收不一致的情况。后来我们发现,基于OpenSpec规范同步生成前后端代码可以完美解决这个问题,这里…...
QuickBMS深度解析:游戏资源提取与逆向工程的终极工具箱
QuickBMS深度解析:游戏资源提取与逆向工程的终极工具箱 【免费下载链接】QuickBMS QuickBMS by aluigi - Github Mirror 项目地址: https://gitcode.com/gh_mirrors/qui/QuickBMS 在游戏开发和逆向工程领域,面对数百种不同的压缩格式、加密算法和…...
实战指南:利用快马ai为django项目生成开箱即用的vscode python开发环境
作为一个长期使用Python开发Django项目的程序员,我深知配置开发环境是个既基础又容易踩坑的环节。最近尝试用InsCode(快马)平台生成配置方案,发现能省去大量重复劳动。下面分享我的实战经验: 项目结构规范化 平台生成的Django项目骨架严格遵循…...
不露脸也能当主播?一文了解VTuber
不露脸也能当主播?一文了解VTuber很多人提到 VTuber,脑子里就是“二次元纸片人”在直播间卖萌。 但其实,你每天换的微信头像、用过的苹果拟我表情,短视频平台的3D头套全都是它的“远房亲戚”。 今天我们就把这层科技外衣扒开&…...
从生活沟通到AI对话:写好提示词,用好AI的魔法钥匙
一个顿悟:从复杂技术到简单提示最近与一位从事软件开发的朋友交流,他提出了一个颇具启发性的构想:将软件的售后客服工作交给AI来处理。起初,他的思路充满了技术复杂性——计划向AI提供核心代码库、训练一个专属的客服模型、进行深…...
3步搞定iOS微信聊天记录完整导出:WeChatExporter终极指南
3步搞定iOS微信聊天记录完整导出:WeChatExporter终极指南 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 还在为无法备份微信聊天记录而烦恼吗?微…...
Android安全漏洞案例分析:血淋淋的教训
Android安全漏洞案例分析:血淋淋的教训 Android安全漏洞案例分析:血淋淋的教训 案例一:Secret Token泄露导致账户劫持 漏洞危害:攻击者获取用户全部权限 某社交App在客户端硬编码了API密钥,攻击者通过反编译获取密钥…...
Krita 5.3.0 与 6.0.0 发布:功能升级与技术革新
文本与工具革新,Krita 功能升级Krita 5.3.0 和 6.0.0 正式推出,带来了一系列显著的功能改进。文本工具被完全重写,支持在画布上进行所见即所得编辑,还能支持 OpenType 的所有特性以及文本置入形状,这大大提升了文字处理…...
