以普通用户身份(而非 root 用户)从 rc.local 执行脚本

以普通用户身份(而非 root 用户)从 rc.local 执行脚本

我想在每次服务器启动时执行一个脚本。问题是我需要以特定用户身份执行该脚本,如果我尝试以 root 身份执行该脚本,则无法找到某些包(例如 ruby​​)。

我尝试换成xxx user01。

sudo su user01
/etc/init.d/script start

但这并不起作用。

答案1

在脚本中运行sudo su user01并不意味着以下命令会被发送到结果 shell。事实上,这可能意味着会以 user01 的身份生成一个新的 shell,并且永远不会退出!

两件事情:

  • 您可以通过将参数传递给 su 来以另一个用户的身份执行命令-c 'command...',例如su user01 -c '/etc/init.d/script start'
  • 从 rc.local 启动使用 /etc/init.d 的服务并不是正确的做法。您需要使用分发工具(如chkconfig或 )在启动时启用该服务update-rc.d。您也不希望 /etc/init.d 中存在不应作为 启动的作业root。这些作业本身可以自由地分叉到另一个用户帐户,但应由 root 调用。

答案2

您可以通过 sudo 运行该命令,如下所示:

sudo -H -u user01 /etc/init.d/script start

-H 将 HOME 环境变量设置为用户的

-u 指定要运行的用户名

答案3

你可以放一些东西进去/etc/crontab然后运行它@reboot

@reboot username /etc/init.d/script start

答案4

当然,你不能用 sudo 运行该脚本,因为 sudoers 中的 requiretty(强制用户必须登录)。你可能需要禁用它,但这有点冒险

还有一个有点古老的工具叫做 runsuid:http://freecode.com/projects/runsuid

高血压

相关内容