运行 来自不同用户的可执行文件

Run executable file from a different user

在创建 rpm 规范文件时,我在 %pre 部分创建了一个新用户和组。但是,出于安全目的,该新用户无权从 shell 登录。现在,当我安装 rpm 时,这个新用户已成功创建。但是,我希望用新创建的用户启动安装的 rpm 服务。目前我只是写; 'filePath/file.exe file.cfg' 使用其配置文件执行 file.exe,即我的 'init.d' 文件中的 file.cfg 以启动服务。我如何修改此命令以启动相同的服务,但使用我在安装 rpm 时创建的用户?基本上我想在我的 init.d 文件中执行该程序,但是通过不同的用户,就像如果我需要的用户是超级用户,我会用 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?, appeared in util-linux 2.23 -- lacking a date makes release notes less than useful...). The oblique comments in its documentation about PAM 听起来好像这绕过了一些安全检查。也许有人对 that.[=16 有更好的评论=]