在系统服务中使用用户的.bashrc [英] Using a user's .bashrc in a systemd service

查看:18
本文介绍了在系统服务中使用用户的.bashrc的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的脚本使用的是系统服务 我需要从主目录/用户/.bashrc设置环境值

source /home/user/.bashrc在脚本中不起作用,并且系统种子不支持源函数。 帮帮我

推荐答案

如果必须...

不是尝试生成环境文件,而是让一个外壳执行您的启动脚本,然后然后执行您的命令。这避免了可能导致不匹配的步骤(例如env存储您的环境的方式与系统dEnvironmentFile选项加载环境的方式之间的不匹配)。


要获取目标用户的启动脚本:

[Service]
Type=simple
User=user
Group=user
ExecStart=/bin/bash -l -c 'exec "$@"' _ your-command arg1 arg2 ...

创建任意文件:

在这里,我们不是使用bash -l来运行登录外壳,而是显式地获取$0,并在该位置传递/home/user/.bashrc

[Service]
Type=simple
User=user
Group=user
ExecStart=/bin/bash -c '. "$0" && exec "$@"' /home/user/.bashrc your-command arg1 arg2 ...

但不要。真的。

  • .bashrc文件通常用于设置交互环境。这意味着它们的设置通常不适合服务。
  • 为您的服务构建手动审核的单独EnvironmentFile意味着您确切地知道该服务正在运行的,并且可以从交互环境中单独配置它。如果您手动审核了环境文件,使其在由外壳执行时具有相同含义,则还可以在中运行以拉入其环境变量。
  • 从安全角度来看,让服务修改它运行的任何可执行代码通常是不明智的--提供这样的权限意味着,破坏服务的攻击者可以使他们的违规持续存在,即使没有任何二次权限提升攻击。因此,在/etc/conf.d这样的非用户可写位置使用EnvironmentFile比使用该用户主目录下的点文件更安全。

这篇关于在系统服务中使用用户的.bashrc的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆