Linux非root用户运行服务实践

前言

以前就知道如果Linux服务以非root的方式运行会增强系统的安全性,但如何去实践呢?

Linux安全基础

安全设计原则

  • 最小安全原则

一般应尽可能缩小权限的授予范围

技术手段

  • 用户隔离
  • rwx读写执行权限
  • capability特权权限
  • PAM体系pam_cap模块
  • ACL等

简单非root用户运行方案

一般的应用,用非root用户做隔离,对于文件仅所有者拥有读写、执行、权限,同组内和其它组的用户可以根据场景,设定合理的权限就可以完成,原则就是最小安全原则,不过多授予权限!

涉及特权的的方案

粗浅介绍

对于某些需要添加和修改系统的IP,和创建RAW套接字的应用,那么在rwx和用户隔离的基础上,需要通过setcap操作进行特权授权,但整体上玄机并不多。

可以看到rwx为整个安全控制的基础,与capability特权权限形成权限检查链条,某一环节的卡壳,就会可以造成服务不可用。

简单场景,我们依然将这些需要特权的服务部署在以用户隔离的目录下,并设定合理的rwx权限,然后以root用户身份,通过setcap操作授予特权用户目录下某(些)启动程序获得特权。

即使这些用户具有一些特权,但是,由于是非root用户,对于其它用户的文件资源,并不能偷窃,这也实现了一定程度的安全性。

特权集介绍

这个概念纠缠的原因就在于实际上区分进程特权集和文件特权集,特别在可继承特权集的设定上,完全是南辕北辙。

进程可继承特权集是南向的,面向下游进程树传播;文件可继承特权集是北向,会与上游进程的南向特权集进行相与判断。

进程/线程特权集

  • CapInh = Inheritable capabilities

决定在进程树下如何进行特权继承,注意,此处需要区分是否capabilities aware,后续进程启动二进制文件是否主动进行了setcap授权

  • CapPrm = Permitted capabilities

允许的特权集

  • CapEff = Effective capabilities

当前特权集

  • CapBnd = Bounding set

系统可用特权集

  • CapAmb = Ambient capabilities set

环境特权集,并没有通过setcap授权的连带程序如何自动获得特权的机制

文件特权集

  • e

可以生效的特权集

  • p

允许的特权集

  • i

决定是否从上游继承某些权限

对于文件通过setcap能够借助root用户授予特权属性,又可以看作Linux一切都可以看做文件的深入设计

优先级最高

相对于Ambient capabilities set的自动传播,如果某文件特殊设定了特权集,则以明确设定的为准,见特权生效算法介绍

最佳实践

在服务中存在某个根启动程序,从此启动程序可以创建出一颗进程树出来,但仅需对此根启动程序在非root用户运行时,通过setcap文件特权集进行授予权限,其它涉及的程序并不进行主动设定,通过Inheritable capabilitiesAmbient capabilities set,进行进程树的特权权限的传递、传播。

与docker容器特权传递类似

弱点

相比较于对每个设计文件进行setcap授权,通过Inheritable capabilitiesAmbient capabilities set进行传播特权的方式,相当于粗放管理,但是,部署会比较简便。

在恶意攻击的i情况下,攻破这个进程树的某一个进程,就可以获取到比较多的特权。

PAM的孱弱

通过pam_cap模块,PAM aware程序,例如,susudo程序,见/etc/pam.d/下对应的配置,启动后的进程自动获得在/etc/security/capability.conf中根据用户配置/可继承权限Inheritable capabilities

但是,因为pam_cap模块版本的限制,并不能设置Ambient capabilities set,对于未经setcap授权二进制文件所启动的进程,并不能形成很好的权限传递和传播!

在libcap-2.58+版本支持了Ambient capabilities set的设置

pam_cap失效的一种原因

按照man中的介绍,在/etc/security/capability.conf中配置auth optional pam_cap.so并不能生效的原因是因为,配置在PAM鉴权栈中如果遭遇requisitesufficient很早就提前返回了,并不能将配置生效!

systemd.service机制

  • AmbientCapabilities

配置字段可以考虑

参考链接

  • 整体介绍比较清楚
  • 特权生效算法介绍
  • 补充理解
  • man pam_cap
  • man pam conf
  • man service.service

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

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

相关文章

Windows Server 2016使用MBR2GPT.EXE教程!

什么是MBR2GPT.exe? MBR2GPT.exe是微软提供的专业工具,可在命令提示符下运行。使用该工具可以将引导磁盘从MBR转换为GPT分区样式,而无需修改或删除所选磁盘上的任何内容。 在Windows Server 2019和Windows 10(1703…

时间序列聚类的直观方法

一、介绍 我们将使用轮廓分数和一些距离度量来执行时间序列聚类实验,同时利用直观的可视化,让我们看看下面的时间序列: 这些可以被视为具有正弦、余弦、方波和锯齿波的四种不同的周期性时间序列 如果我们添加随机噪声和距原点的距离来沿 y 轴…

测试Whisper效果

先去官方上面看看,是否有对应的测试结果 简单找了一下,没找到对应的测试数据 去hugging face 上面找对应的数据集,发现没有现成的数据 找到了几个数据集,但是是收费的 101 Hours – Scene Noise Data by Voice Recorder 1,29…

#stm32整理(一)flash读写

以这篇未开始我将进行stm32学习整理为期一个月左右完成stm32知识学习整理内容顺序没有一定之规写到哪想到哪想到哪写到哪,主要是扫除自己知识上的盲区完成一些基本外设操作。 以stm32f07为例子进行flash读写操作 stm32flash简介 参考资料正点原子和野火开发手册 …

通过akshare获取股票分钟数据

参考:https://blog.csdn.net/qnloft/article/details/131218295 import akshare as ak 个股的 df ak.stock_zh_a_hist_min_em(symbol“000001”, start_date“2023-11-03 09:30:00”, end_date“2023-11-03 15:00:00”, period‘1’, adjust‘’) print(df) date_info df[‘…

6-3 堆排序

description 本题要求实现堆排序中的筛选函数&#xff0c;待排序列的长度1<n<1000。 函数接口定义&#xff1a; void HeapAdjust( HeapType H, int s, int m); 其中L是待排序表&#xff0c;使排序后的数据从小到大排列。 ###类型定义&#xff1a; typedef int KeyType…

自动曝光算法(第二讲)

序言 第一章说了&#xff0c;自动曝光算法的目的&#xff1a;已知当前raw图亮度、当前曝光时间、当前增益和目标亮度&#xff0c;当环境光发生变化的时候&#xff0c;是通过控制增益、曝光时间和光圈使raw图的亮度&#xff0c;保持在目标亮度附近。本章想讲一下目标亮度的相关…

【杂记-遇到的坑】mysql-查询条件不达预期

前言&#xff1a; 业务开发时&#xff0c;遇到的坑&#xff0c;栽进去了&#xff0c;写这个博客&#xff0c;涨点记性 1.连表查询 左连接为例子 A left join B 把A的数据全部取出&#xff0c;能够跟B对应的上&#xff0c;B表的扩展数据也跟着展示出俩 A有B没有的&#xff0c;B的…

路由器基础(九):防火墙基础

防火墙 (Fire Wall) 是网络关联的重要设备&#xff0c;用于控制网络之间的通信。外部网络用户的访问必须先经过安全策略过滤&#xff0c;而内部网络用户对外部网络的访问则无须过滤。现在的防火墙还具有隔离网络、提供代理服务、流量控制等功能。 一、三种防火墙技术 常见的…

hadoop进程启停管理(看这一篇就足够了!)

一、一键启停脚本 Hadoop HDFS组件内置了HDFS集群的一键启停脚本 $HADOP_HOME/sbin/start-all.sh,一键启动HDFS集群 执行原理&#xff1a; 在执行此脚本的机器上&#xff0c;启动SecondaryNameNode 读取core-site.xml内容(fs.defaultFS项)&#xff0c;确认NameNode所在机器&…

【MySQL索引与优化篇】数据库的设计规范

数据库的设计规范 文章目录 数据库的设计规范1. 范式2. 键和相关属性的概念3. 第一范式4. 第二范式5. 第三范式6. 小结7. 反范式化7.1 概述7.2 反范式的新问题7.3 反范式适用场景 8. 巴斯范式9. 第四范式、第五范式和域键范式 1. 范式 在关系型数据库中&#xff0c;关于数据表…

Qt实验室

前言 本系列文章是研究和记录Qt开发过程中遇到的各种问题的集合 由于Qt是一个庞大的开发体系&#xff0c;很难用有限的文案对其做全面深入细致的讲解&#xff0c;因此市面上大多数Qt开发相关的教程都显得极其粗浅入门&#xff0c;通常只能作为最基本的入门教程。但是实际项目…

Ubuntu安装Redis

目录 1. 更新软件包列表2. 安装 Redis3. 启动 Redis4. 验证 Redis 是否启动成功5. 配置 Redis6. 启用 Redis 开机启动7. 验证 Redis 是否可用8. 测试 Redis 在 Ubuntu 20.04 上安装 Redis 非常简单。只需按照以下步骤操作即可&#xff1a; 1. 更新软件包列表 sudo apt update…

解锁AI语言模型的秘密武器 - 提示工程

文章目录 一、LLM概念1.1 什么是LLMs1.2 LLMs类别1.3 如何构建LLM 二、提示工程简介2.1 基础提示2.2 使用提示词的必要性 三、 提示3.1 如何写好提示词3.1.1 使用分隔符3.1.2 结构化输出3.1.3 风格信息3.1.4 给定条件3.1.5 给出示例3.1.6 步骤分解3.1.7 不断迭代 3.2 提示工程3…

【Docker】Linux路由连接两个不同网段namespace,连接namespace与主机

如果两个namespace处于不同的子网中&#xff0c;那么就不能通过bridge进行连接了&#xff0c;而是需要通过路由器进行三层转发。然而Linux并未像提供虚拟网桥一样也提供一个虚拟路由器设备&#xff0c;原因是Linux自身就具备有路由器功能。 路由器的工作原理是这样的&#xff…

Qt控件 UI设计 QPushbutton、QToolButton、QMenu

Qt控件 UI设计 QPushbutton、QToolButton、QMenu 个人设计QToolButton效果设计效果运行效果 Chapter1 Qt控件 UI设计 QPushbutton、QToolButton、QMenu1.QPushbutton和QToolButton的关联和区别&#xff1a;2.QMenu 可以配合QPushbutton做个下拉菜单3.点击按钮的功能&#xff0c…

k8s:endpoint

在 Kubernetes 中&#xff0c;Endpoint 是一种 API 对象&#xff0c;它用于表示集群内某个 Service 的具体网络地址。换句话说&#xff0c;它连接到一组由 Service 选择的 Pod&#xff0c;从而使它们能够提供服务。每个 Endpoint 对象都与相应的 Service 对象具有相同的名称&am…

【C语言初学者周冲刺计划】5.1C语言知识点小总结

目录 1知识点一&#xff1a; 2知识点二&#xff1a; 3知识点三&#xff1a; 4代码&#xff1a; 5总结&#xff1a; 1知识点一&#xff1a; 1 C语言中要求对变量作强制定义的主要理由是( )。 便于确定类型和分配空间 2 【单选题】若有定义&#xff1a;int m7; float x…

ssh 免密连接远程服务器并使用Python执行scp传输文件

找到自己Mac的ssh公钥&#xff0c;如果没有ssh密钥的话&#xff0c;需要生成一下 cat ~/.ssh/id_rsa.pub# 在~/.ssh路径下面执行命令生成ssh密钥 ssh-keygen -t rsa然后找到要免密登陆的远程服务器 ~/.ssh/authorized_keys 把自己Mac上面的公钥拷贝到这里面即可 Python脚本 …

云安全-云原生k8s攻击点(8080,6443,10250未授权攻击点)

0x00 k8s简介 k8s&#xff08;Kubernetes&#xff09; 是容器管理平台&#xff0c;用来管理容器化的应用&#xff0c;提供快速的容器调度、弹性伸缩等诸多功能&#xff0c;可以理解为容器云&#xff0c;不涉及到业务层面的开发。只要你的应用可以实现容器化&#xff0c;就可以部…