it-swarm.com.de

Supervisord als root starten oder nicht?

Supervisor läuft unter 3.0:

pip freeze | grep supervisor
supervisor==3.0

Wenn Sie supervisord über die Befehlszeile starten:

Sudo $VIRTENV/supervisord --nodaemon --configuration $PATH_TO_CONFIG/supervisord.conf

Ich erhalte diesen Fehler:

2013-11-11 23:30:50,205 CRIT Supervisor running as root (no user in config file)

Aber ich kann Supervisord nicht ohne Sudo starten, es klagt:

Error: Cannot open an HTTP server: socket.error reported errno.EACCES (13)

Was ist der richtige Weg, um damit umzugehen?

(Ich bekomme den gleichen Fehler, wenn ich es als root starte, setze aber user = foobar im Abschnitt [supervisord] in supervisord.conf)

pdate: Hier ist meine supervisord.conf

[unix_http_server]
file = /opt/run/supervisord.sock

[inet_http_server]
port = 9001
username = foobar
password = foobar

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisord]
logfile = /opt/logs/supervisord.log
loglevel = debug
pidfile = /opt/run/supervisord.pid

[supervisorctl]

[program:foo1]
user = foobar
autostart = True
autorestart = True
command = foo1
stdout_logfile = /opt/logs/foo1.stdout.log
stderr_logfile = /opt/logs/foo1.stderr.log
stdout_logfile_maxbytes = 10MB
stderr_logfile_maxbytes = 10MB

[program:foo2]
user = foobar
autostart = true
autorestart = true
command = foo2
priority = 100
stdout_logfile_backups = 0
stderr_logfile_backups = 0
stdout_logfile_maxbytes = 10MB
stderr_logfile_maxbytes = 10MB
stdout_logfile = /opt/logs/foo2.stdout.log
stderr_logfile = /opt/logs/foo2.stderr.log
33
kev

Supervisord wechselt vor jeder Verarbeitung zum UNIX-Benutzerkonto.

Sie müssen angeben, welche Art von Benutzerkonto verwendet werden soll, den Daemon als root ausführen, aber den Benutzer in der Konfigurationsdatei angeben

Beispiel:

[program:myprogram]
command=gunicorn --worker-class socketio.sgunicorn.GeventSocketIOWorker app.wsgi:application -b 127.0.0.1:8000
directory=/opt/myprogram
user=user1
autostart=true
autorestart=true
redirect_stderr=True

Besuchen Sie http://supervisord.org/configuration.html#program-x-section-values für weitere Informationen

24
Jan Vorcak

Wenn Sie Supervisor als Root starten, müssen Sie einen Benutzer angeben, zu dem Supervisor aus Sicherheitsgründen wechseln soll

In den Supervisor-Dokumenten ( http://supervisord.org/configuration.html ):

user
If supervisord is run as the root user, switch users to this UNIX user account before doing any meaningful processing. 
This value has no effect if supervisord is not run as root.

Fügen Sie dies in Ihre conf-Datei ein:

[supervisord]
user=nobody

Der Benutzer sollte ein Benutzer sein, der existiert, aber keine Sudo-Berechtigungen hat (niemand kann arbeiten).

13
Rylan

Ich habe diesen Fehler erhalten, als ich als Benutzer ohne Rootberechtigung ausgeführt wurde:

Error: Cannot open an HTTP server: socket.error reported errno.EACCES (13)

Dies verschwand, nachdem ich das Verzeichnis, in dem sich die SOCK-Datei befand, für diesen Benutzer geöffnet hatte.

In deinem Fall:

[unix_http_server]
file = /opt/run/supervisord.sock

Entweder chown username /opt/run/, oder verweisen Sie die Datei auf ein anderes Verzeichnis, dessen Eigentümer der Benutzer ist.

Ich habe diesen Ansatz daraus gelernt link .


Zusätzlich installierten meine Sysadmins ein von mir geschriebenes init.d-Skript. Das init.d-Skript wird als root ausgeführt, aber das Skript kann Supervisord veranlassen, mit dem folgenden Befehl auf myuser zu starten:

SUPERVISORD=/path/to/supervisord
PIDFILE=/path/to/supervisord.pid
OPTIONS='-c /path/to/supervisord.conf'
daemon --pidfile=$PIDFILE --user=myuser $SUPERVISORD $OPTIONS
9
Matthew Moisen

Du hast:

Nach meinem Verständnis haben Sie diese CRIT-Nachricht erhalten, die Sie stört:

CRIT Supervisor läuft als root (kein Benutzer in der Konfigurationsdatei)

Die Wörter in Klammern sind ein Hinweis. Diese Meldung weist darauf hin, dass Sie möglicherweise unbeabsichtigt Supervisor als Root ausführen .

Mach das:

Die Lösung ist also ziemlich einfach: Sagen Sie Supervisor, dass Sie dies absichtlich tun.
(in /etc/supervisor/supervisord.conf)

[supervisord]
user = root

Sobald Sie Supervisord als root ausführen, wird die UID auf den von Ihnen zugewiesenen Benutzer festgelegt, nämlich root. ( # 308 )

Nicht wichtig:

Obwohl Sie jetzt möglicherweise die folgende Meldung erhalten:

CRIT UID auf Benutzer 0 setzen

Keine Sorge, diese Meldung sollte eher eine INFO-Ebene als eine CRIT-Ebene sein. ( # 69 )

8
Kyan