简单的身份切换和执行工具su-exec —— 筑梦之路

简介

su-exec是一个理想的用于身份切换和权限控制的工具,尤其适合对性能和空间有要求的环境。无论是开发人员还是系统管理员,都值得将它纳入工具箱,以提高工作效率和系统的安全性 

官方网站:GitHub - ncopa/su-exec: switch user and group id and exec 

背景说明

通常我们启动镜像前需要使用 shell 调整下启动状态,做准备。比如:生成配置文件,检查路径挂载等等。然后再拉起服务,但会遇到两个问题:

  1. 普通用户权限不够,必须启动 root ,但使用 root 启动服务又不安全。
  2. 使用 shell 启动进程会导致 shell 进程本身 PID 为 1。而我们所启动服务 PID 不是 1,这就会导致服务本身接收不到 SIGTERM 信号而正常关闭。

解决方案:

1. 使用su-exec 指定特定权限。

  • 这需要使用 apk等包管理命令安装或者编译安装
  • 需要提前创建好相应账号

2. 使用 exec 命令将启动的服务进程替换当前进程,从而将 PID=1 传递给服务进程

说明: 这里使用 su-exec 而不使用 sudo 的原因是传统 sudo 会新创建出一个进程运行服务,导致 PID 不能为 1,进而导致无法接收到 signal 信号而正常关闭服务

编译安装和使用示例 

# centos 7 编译yum  install gcc make libtool# 拉取源码git clone https://github.com/ncopa/su-exec.gitcd su-exec make# 拷贝可执行文件
cp su-exec /usr/bin/# 使用示例su-exec apache:1000 /usr/sbin/httpd -f /opt/www/httpd.conf将httpd服务以apache用户和组id 1000的身份启动,并且直接执行提供的配置文件

应用场景

  • 在Docker容器中以特定用户运行应用,提升安全性。
  • 系统服务管理中,根据服务需求以非root用户身份执行,减少潜在风险。
  • 控制资源访问权限的场景,如限制某个程序对特定目录的读写权限。
  • 在自动化脚本中,灵活切换执行者的权限。

项目特点
简洁高效:su-exec体积小巧,只有大约10KB,对比同类工具gosu(约1.8MB),大大减少了依赖和存储占用。
直接执行:避免了su和sudo创建子进程的问题,提高了程序执行效率,解决了TTY和信号传递的问题。
易用性强:支持用户名、用户ID和组ID的数字表示,以及用户名:组名的形式,使得使用更灵活。
安全可靠:仅能由root用户执行,确保了权限变更的安全性。

 ES容器启动脚本示例

#!/bin/bashset -e# Add elasticsearch as command if needed
if [ "${1:0:1}" = '-' ]; thenset -- elasticsearch "$@"
fi# Drop root privileges if we are running elasticsearch
# allow the container to be started with `--user`
if [ "$1" = 'elasticsearch' -a "$(id -u)" = '0' ]; then# Change the ownership of user-mutable directories to elasticsearchfor path in \/usr/share/elasticsearch/data \/usr/share/elasticsearch/logs \; dochown -R elasticsearch:elasticsearch "$path"doneset -- su-exec elasticsearch "$@"#exec su-exec elasticsearch "$BASH_SOURCE" "$@"
fi# As argument is not related to elasticsearch,
# then assume that user wants to run his own process,
# for example a `bash` shell to explore this image
exec "$@"

其他示例

# Dockerfile 内容如下:FROM alpine:3.16
# 创建用户
RUN addgroup -S -g 1000 redis && adduser -S -G redis -u 999 redis
# 安装 su-exec 命令
RUN apk add --no-cache 'su-exec>=0.2'############################################################
#
# 其它部署 内容
#
############################################################ENTRYPOINT ["/usr/bin/entrypoint.sh"]# /usr/bin/entrypoint.sh 内容如下:#!/bin/sh
set -e############################################################
#
# 启动准备脚本内容
#
############################################################# 最终启动命令
exec su-exec redis redis-server "$@"

参考资料:

https://zhuanlan.zhihu.com/p/558116410

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

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

相关文章

【高考】人生规划指南

作为一个正处在这个选择的十字路口的高考考生,我认为在选择专业和学校时,要根据自己的具体情况和个人目标来权衡。首先,我认为专业是首要考虑因素。因为专业是直接决定未来职业发展方向的,如果不喜欢或者不适合的专业选择&#xf…

数字时代的文化革命:Facebook的社会影响

随着数字技术的飞速发展和互联网的普及,社交网络如今已成为人们日常生活中不可或缺的一部分。在众多社交平台中,Facebook作为最大的社交网络之一,不仅连接了全球数十亿用户,更深刻影响了人们的社会互动方式、文化认同和信息传播模…

前端面试题(基础篇十二)

一、link标签定义、与import的区别 link 标签定义文档与外部资源的关系。 link 元素是空元素,它仅包含属性。 此元素只能存在于 head 部分,不过它可出现任意数。 link 标签中的 rel 属性定义了当前文档与被链接文档之间的关系。常见的 stylesheet 指的是…

双系统的笔记本电脑,系统引导不见了怎么办

双系统的笔记本电脑,系统引导不见了怎么办 个人情况 联想拯救者R9000P 按照了windows11(电脑自带的系统),后面自己按照了ubuntu22.04 只是windows11自动更新导致系统的引导项不见的 解决办法 在电脑开机的时候,不停…

Python酷库之旅-第三方库openpyxl(15)

目录 一、 openpyxl库的由来 1、背景 2、起源 3、发展 4、特点 4-1、支持.xlsx格式 4-2、读写Excel文件 4-3、操作单元格 4-4、创建和修改工作表 4-5、样式设置 4-6、图表和公式 4-7、支持数字和日期格式 二、openpyxl库的优缺点 1、优点 1-1、支持现代Excel格式…

回溯法c++学习 解决八皇后问题

使用回溯法解决八皇后问题 八皇后问题是一个以国际象棋为背景的问题:如何能够在88 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。这…

AUTOSAR汽车电子嵌入式编程精讲300篇-智能网联汽车CAN总线-发展现状

目录 前言 智能网联汽车的发展现状 国内外研究现状 智能网联汽车系统概述 智能网联汽车安全现状 智能网联汽车威胁分析 本文篇幅较长,分为多篇,文章索引详见 智能网联汽车CAN总线-发展现状 智能网联汽车CAN总线-智能网联汽车车内网络 智能网联汽车CAN总线-基于CAN…

pdf已加密如何解除?解密密码的两个方法【可加密】

电脑文件加密的目的就是保护重要信息,防止数据泄露。如果需要解除密码,应该如何操作呢?pdf已加密如何解除?本文整理了以下两种解除文件方法,希望能够帮到有需要的朋友们! 方法一、使用金舟文件夹加密大师解…

vue3+vite+nodejs,通过接口的形式请求后端打包(可打包全部或指定打包组件)

项目地址https://gitee.com/sybb011016/test_build 打包通过按钮的形式请求接口,让后端进行打包,后端使用express-generator搭建模版。前端项目就在npm init vuelatest基础上添加了路由 如果只想打包AboutView组件,首先修改后端接口。 //打…

Open3D (C++) 点云旋转至主成分空间

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 首先使用主成分分析法计算出点云的特征值与特征向量,然后根据点云的特征向量计算出点云与主成分空间之间的…

CocosCreator构建IOS教程

CocosCreator构建IOS教程 添加include: Header Search Paths:拖拽include过来 添加SoundEngine: Header Search Paths: 把SoundEngine POSIX Common 三个文件夹拖拽到里面去

Params(M), Multi-Adds (G),FLOPS之间的区别

参数数量(Params) 定义: 参数数量指的是模型中所有可训练参数的总数。这些参数包括权重和偏置项等 计算方式: 对于每一层神经网络,参数数量的计算方式如下: 全连接层(Fully Connected Layer&…

探索生成对抗网络(GANs)的新领域:创新应用与挑战

生成对抗网络(GANs)自2014年提出以来,已成为深度学习领域的一个重要分支。本文旨在探讨GANs在传统图像生成之外的新应用领域,包括艺术创作、虚拟现实、个性化推荐和生物信息学,并分析其面临的挑战和未来发展趋势。 关…

探讨公共表表达式(CTE)对对象关系映射(ORM)的影响:性能优化与最佳实践

在现代应用程序开发中,数据库查询和数据处理是不可或缺的一部分。为了提高开发效率和代码可维护性,ORM(对象关系映射)被广泛应用。然而,随着数据复杂度的增加,单纯依靠ORM进行复杂查询可能会导致性能瓶颈和…

如何将 ONLYOFFICE 文档 Linux 版更新到 v8.1

本指南将向您展示如何将 ONLYOFFICE 文档 Linux 版本更新到最新 8.1 版本。 ONLYOFFICE 文档是什么 ONLYOFFICE 文档是一个功能强大的文档编辑器,支持处理文本文档、电子表格、演示文稿、可填写表单、PDF 和电子书,可多人在线协作,支持 AI 集…

P A T 甲级:分类题型|字符串处理|1152、1150、1005、1001题解及延伸

系列目录 目录 系列目录1152 Google Recruitment数学证明substr()stoi() 1150 Travelling Salesman Problem1005 Spell It Right1001 AB Format 1152 Google Recruitment 原题链接 C 若未特殊标明&#xff0c;以下题解均写用C #include <iostream>using namespace std;…

软件设计师笔记-操作系统知识(二)

线程 以下是关于线程的一些关键点&#xff1a; 线程是进程中的一个实体&#xff1a;进程是操作系统分配资源&#xff08;如内存空间、文件句柄等&#xff09;的基本单位&#xff0c;而线程是进程中的一个执行单元。多个线程可以共享同一个进程的地址空间和其他资源。线程是CP…

ElasticSearch-Windows系统ElasticSearch(ES)的下载及安装

前言 下载ElasticSearch 可以进入ElasticSearch官方下载地址&#xff0c;选择与电脑系统相对应的版本&#xff1b;博主已经上传资源&#xff0c;或者点此直接免费下载&#xff0c;本次演示版本为8.14.1。 注意&#xff1a; Elasticsearch 5 需要 Java 8 以上版本&#xff1b;…

菜籽桌面4.5.0~4.5.1常见问题解答

目录 如何刷机&#xff1f; 刷机失败&#xff1f; 无法方控&#xff1f; 无法画中画? 原车音乐跟我安装的音乐一起播放&#xff1f; 原车音乐停了&#xff0c;我安装的软件也跟着没声音了&#xff1f; 调节声音时忽大忽小&#xff1f; 怎么安装软件&#xff1f; 软件…

探究互联网领域知识,解密数字化时代神秘面纱

随着信息时代的不断发展&#xff0c;互联网的发展呈现出爆炸式的增长&#xff0c;以至于引起广泛的关注和深入的探究。互联网作为一个庞大的网络体系&#xff0c;涵盖着无穷无尽的信息和知识&#xff0c;其背后的科技和应用已经改变了人们的生活&#xff0c;产生了翻天覆地的变…