Назад | Перейти на главную страницу

Как правильно запустить программу от имени другого пользователя с помощью «nohup» и «&» в bash

За последние несколько месяцев я изучал администрирование bash и linux, создавая все больше и больше кода, который необходимо запускать в фоновом режиме. В идеале я хотел бы запустить свою систему разработки ближе к тому месту, где она будет производиться, чтобы избежать необходимости повторной разработки кода из-за проблем с безопасностью и разрешениями.

Обычно я бы запускал что-нибудь с:

$nohup <program> <program args> >> <program logfile> 2>&1 &

То есть:

$nohup ping 192.168.0.1 >> ping.log 2>&1 &

Однако сегодня я попытался правильно настроить его, создав пользователя и предоставив ему правильные разрешения, чтобы иметь доступ только к своим файлам и ни к чему другому. Это кажется как разумная практика безопасности.

Я бы сделал так:

$sudo -u <program user> nohup <program> <program args> >> <program logfile> 2>&1 &

Однако это приводит к следующему выводу, когда я запускаю 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>

Проблема заключается в первой строке вывода: в идеале я хотел бы иметь возможность запускать эти программы без запуска каких-либо процессов с разрешениями корневого уровня. Как я могу это сделать?

вы можете сделать это так:

su - user -c "nohup ping 192.168.122.1 >> ping.log 2>&1 &"