Upstart `Unicorn` mit Ummask ignoriert
-
28-10-2019 - |
Frage
Ich benutze upstart v1.4
Um meinen Anwendungsserver zu starten, heißt es unicorn
.
Das upstart
Die Konfigurationsdatei sieht Folgendes aus:
description "Unicorn Application Server"
start on network
stop on runlevel [!2345]
umask 0003
setuid unicorn
setgid myproject
chdir /opt/myproject/
respawn
exec /opt/myproject/bin/unicorn --config-file /opt/myproject/config/unicorn.rb --env production
Es ist unerlässlich, dass der Prozess mit läuft 0774
, das ist ug+rwxo+r
, zumindest für Verzeichnisse. Benutzer und Gruppe werden als solcher als NGINX -Server, Uploads, Mitarbeiter anmelden usw. freigegeben.
Ich habe festgestellt, dass die Verzeichnisse mit den falschen Berechtigungen erstellt werden:
drw-rw-r-- 2 unicorn myproject 4096 2012-01-13 06:58 20120113-0658-7704-4676
Soweit ich weiß, verursacht nichts in meiner Bewerbung dies.
Nach Anbringen gdb
zum Prozess und anrufen call umask(0)
, die effektive Ummaske ist 75
, oder 0o113
.
Hier ist die gdb
Sitzung:
root@1:/opt/myproject# cat ./tmp/pids/unicorn.pid
7600
root@1:/opt/myproject# gdb
GNU gdb (GDB) 7.1-ubuntu
(gdb) attach 7600
Attaching to process 7600
(gdb) call umask(0)
$1 = 75
(gdb) call umask(75)
$2 = 0
(gdb) q
Quit anyway? (y or n) y
Detaching from program: /usr/local/bin/ruby, process 7600
root@1:/opt/myproject# ruby -e 'printf("%o\n", 75)'
113
Die Ummask von 113
würde die Berechtigungen berücksichtigen, die erteilt werden 664
, was scheint das zu sein, was ich sehe.
Was mache ich hier falsch? Ignoriert UPStart meine Strophe? Soll ich die Strophe als definieren als 003
, nicht 0003
? Ist mein gdb
Sitzungsarbeit und %o
printf()
Syntax richtig?
Lösung
Wie versteckt sich "Einhorn" außerhalb einer Umgebung? Ich würde genau das gleiche erraten, aber bitte überprüfen Sie dies (halten Sie alles so einfach wie möglich).
Denken Sie daran, dass ein Ummask -Wert nicht absolut ist: Wie der Name schon sagt, ist es eine Maske - er "subtrahiert" Berechtigungsbits Aus den Berechtigungsbits gibt Ihre Anwendung an, wann sie eine Datei öffnet oder ein Verzeichnis erstellt. UPStarts Umask Strophe verhalten sich aus dem, was ich sehen kann, sodass Ihr Problem mit dieser Unicorn -Anwendung angegeben ist, in der Sie angeben, was für Sie eine seltsame Anzahl von Berechtigungsbits (Modus) ist, wenn sie Dateien zum Schreiben öffnen und Verzeichnisse erstellen.
Versuchen Sie, das Einhorn zu beschichten, um zu sehen, was es tatsächlich tut:
strace -o /tmp/strace.log -fFv -s 1024 /opt/myproject/bin/unicorn --config-file ...
Nachdem Unicorn gewartet hatte, um einige Dateien und/oder Verzeichnisse zu erstellen, stoppen/töten Sie es und sehen Sie sich die Datei an /tmp/strace.log.
GREP für "Öffnen (Datei)", wobei die Datei der Name einer der Dateien ist, die zum Beispiel erstellt wird, und sehen Sie, wie das 3. Argument für den Aufruf offener System ist. Wenn Sie diesen Moduswert haben, sollte es möglich sein, einen Ummask -Wert zu erstellen, um die gewünschten Dateiberechtigungen zu geben. Beachten Sie, dass dies dieses Einhorn annimmt:
- stimmt mit dem angegebenen Modus überein.
- Ruft Umask nicht an (2) selbst (was die UPStart -Umask -Strophe außer Kraft setzen würde).
- Ruft CHMOD (2)/FCHMOD (2) nicht an.
Wenn - nach dem Befolgen des oben genannten Vorgangs - glauben Sie immer noch, dass es ein Problem mit dem Upstart gibt, geben Sie bitte einen einfachen Testfall an (für das kein Einhorn erforderlich ist) und erhöhen Sie hier einen Fehler: https://bugs.launchpad.net/upstart/+Filebug.
Andere Tipps
Wenn Sie Unicorn von der Execa Stanza anrufen, rufen Sie ein Skript an, das nur "Ummask >> /tmp /seltsfile" aufruft, was bringt es dort ein? Wenn dies die erwartete Antwort gibt, liegt Ihr Problem im Einhorn.