GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Upstart:Führen Sie den Dienst als nicht privilegierten Benutzer aus und starten Sie das Skript vorab als root

upstart hat keine Einrichtung, die systemd entspricht ist PermissionsStartOnly Einstellung. Alle Prozesse im Job werden so ausgeführt, wie es der Benutzer über setuid eingestellt hat Strophe, wie das Kochbuch sagt.

Machen Sie die Dinge also auf die Daemontools-Weise.

Verwenden Sie setuidgid , setuidgid , s6-setuidgid , chpst , runuid , oder setuidgid im exec Strophe:

exec \
setuidgid somebody \
unicorn -D -c /opt/posty_api/unicorn.rb --env production >> /var/log/posty/upstart.log 2>&1

Das ist übrigens ein schrecklicher Logging-Mechanismus. Der Daemontools-Weg hätte ein richtiges, automatisch durchlaufendes, bei Bedarf rotierbares, größenbegrenztes Protokoll mit multilog , multilog , s6-log , svlogd , tinylog , oder cyclog . upstart ist jedoch aufgrund seines expect schwierig zu integrieren Mechanismus.

expect fork
exec \
setuidgid somebody \
unicorn -D -c /opt/posty_api/unicorn.rb --env production 2>&1 | \
/usr/local/bin/chdir /var/log/ \
setuidgid log \
cyclog posty/unicorn/

(Die chdir Hier ist das Chain-Loading von nosh Paket und ist nicht unbedingt erforderlich. Aber es macht die Sache etwas aufgeräumter.)


Linux
  1. Führen Sie das PHP-Skript als Daemon-Prozess aus

  2. Wie lässt sich ein Python-Skript als Dienst ausführen?

  3. Führen Sie das Bash-Skript als Daemon aus

  4. Shell-Befehl in Jenkins als Root-Benutzer ausführen?

  5. Was ist der Unterschied zwischen root und sudo?

So führen Sie Shell-Skript als SystemD-Dienst in Linux aus

Skript mit Argumenten als Benutzer ausführen?

So erstellen und führen Sie ein Shell-Skript in Ubuntu 22.04 aus

Wie führe ich einen Befehl als bestimmter Benutzer in einem Init-Skript aus?

Führen Sie einen Teil eines Bash-Skripts als ein anderer Benutzer aus

unterschiedliche Shell für Root- und Nicht-Root-Benutzer