linux - 从不同的用户运行可执行文件

标签 linux centos executable rpm init.d

在创建 rpm 规范文件时,我在 %pre 部分创建了一个新用户和组。但是,出于安全目的,这个新用户无权从 shell 登录。现在,当我安装 rpm 时,这个新用户已成功创建。但是,我希望用新创建的用户启动安装的 rpm 服务。目前我只是写; 'filePath/file.exe file.cfg' 执行 file.exe 及其配置文件,即我的 'init.d' 文件中的 file.cfg 以启动服务。我如何修改此命令以启动相同的服务,但使用我在安装 rpm 时创建的用户?基本上我想在我的 init.d 文件中执行该程序,但是通过不同的用户,就像如果我需要的用户是 super 用户,我会用 sudo 做的那样。任何反馈将不胜感激。

最佳答案

安装 rpm 和运行服务的初始起点特权。例如,在我的 CentOS 6 机器上,我在 /etc/passwd

中看到
games:x:12:100:games:/usr/games:/sbin/nologin

但以 root 身份运行时,我可以这样做:

$ sudo -u games /bin/sh
sh-4.1$ echo $PATH
/sbin:/bin:/usr/sbin:/usr/bin
sh-4.1$ id
uid=12(games) gid=100(users) groups=100(users) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
sh-4.1$ cd
sh-4.1$ pwd
/usr/games

在您的服务脚本中,您可以使用 sudo 以另一个用户的身份运行给定的进程(尽管对同一台机器的快速检查并没有显示正在执行此操作)。

@msuchy 指出 runuser 可能更可取。我看到这是相对较新的(根据 Ubuntu runuser command? ,出现在 util-linux 2.23 -- lacking a date 使得发行说明不太有用......)。其文档中的斜评论about PAM让它听起来好像这规避了一些安全检查。也许有人对此有更好的评论

关于linux - 从不同的用户运行可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33082947/

相关文章:

mysql - 连接到 mysql 服务器 : ERROR 2003 (HY000) 时出现问题

linux - 更改机器名称

linux - Bash 脚本在没有 shebang 的情况下无法工作但是 shebang 导致错误消息

Nginx 作为服务运行时不监听端口

.net - 如何判断 .NET 应用程序是在 DEBUG 还是 RELEASE 模式下编译的?

c - 使用C程序将可执行文件制作成shell命令

Linux 分页和中断处理程序

python - 在 Python 中启动进程并检索其窗口 ID

c - 升级 glibc - 它如何在没有发行版补丁的情况下工作

java - 创建可执行 JavaFX 的简单方法?