如何在 bash 中使用“nohup”和“&”正确以另一个用户身份运行程序

0 linux bash nohup background-process

在过去的几个月里,我一直在学习 bash 和 linux 管理,同时生成越来越多需要在后台运行的代码。理想情况下,我希望将我的开发系统运行在离生产环境更近的地方,以避免由于安全和权限问题而不得不重新开发代码。

一般来说,我会运行一些东西:

$nohup <program> <program args> >> <program logfile> 2>&1 &
Run Code Online (Sandbox Code Playgroud)

IE:

$nohup ping 192.168.0.1 >> ping.log 2>&1 &
Run Code Online (Sandbox Code Playgroud)

但是,今天我尝试通过创建一个用户并授予他们正确的权限来正确设置它,以便只能访问他们自己的文件而不能访问其他任何内容。这似乎是一种明智的安全做法。

我会这样做:

$sudo -u <program user> nohup <program> <program args> >> <program logfile> 2>&1 &
Run Code Online (Sandbox Code Playgroud)

但是,当我运行时,这会导致以下输出ps aux | grep <program>

<admin user>@server:~$ ps aux | grep <program>
root      1396  0.0  0.0  61868  3792 pts/38   S    10:50   0:00 sudo -u <program user> nohup <program> <program args>
<program user>  1397  0.0  0.8 1273232 68308 pts/38  Sl   10:50   0:02 <program> <program args>
Run Code Online (Sandbox Code Playgroud)

问题是输出中的第一行:理想情况下,我希望能够在不启动任何具有根级权限的进程的情况下运行这些程序。我怎么做?

Pie*_*RET 5

你可以这样做:

su - user -c "nohup ping 192.168.122.1 >> ping.log 2>&1 &"
Run Code Online (Sandbox Code Playgroud)