Вопрос

я использую upstart v1.4 Чтобы запустить мой сервер приложений, он называется unicorn.

А upstart Файл конфигурации выглядит так:

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

Важно, чтобы процесс работал с 0774, то есть ug+rwxo+r, по крайней мере, для каталогов. Пользователь и группа совместно используются как сервер NGINX, загрузки, вход персонала и т. Д.

Я заметил, что каталоги создаются с неправильными разрешениями:

drw-rw-r-- 2 unicorn       myproject        4096 2012-01-13 06:58 20120113-0658-7704-4676

Насколько я знаю, ничто в моем приложении не вызывает этого.

В соответствии с прикреплением gdb к процессу и вызов call umask(0), эффективная Umask 75, или же 0o113.

Вот gdb Сессия:

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

Маска 113 Будет ли выплачивать разрешения на 664, что кажется тем, что я вижу.

Что я здесь делаю, единорог плохо себя ведет себя? Upstart игнорирует мою строфе? Должен ли я определять строфе как 003, нет 0003? Мой gdb сессионная работа и %o printf() Синтаксис правильно?

Это было полезно?

Решение

Как «единорог» ведут себя за пределами апонтизированной среды? Я бы догадался точно так же, но, пожалуйста, проверьте это (держите все как можно проще).

Помните, что значение маски не является абсолютным: как предполагает имя, это маска - оно «вычитает» биты разрешения Из битов разрешения ваше приложение указывает, когда оно открывает файл или создает каталог. Анкет Upstarts Umask Stanza ведет себя из того, что я вижу, поэтому ваша проблема должна быть с этим приложением Unicorn, указывающий, что для вас нечетный набор битов разрешений (режим), когда оно открывает файлы для написания и создает каталоги.

Попробуйте отступать единорога, чтобы увидеть, что он на самом деле делает:

  strace -o /tmp/strace.log -fFv -s 1024 /opt/myproject/bin/unicorn --config-file ...

Ждав, когда единорог создаст некоторые файлы и/или каталоги, остановите/убейте его и посмотрите на файл /tmp/strace.log. grep для «open (file)», где файл - это имя одного из файлов, которые он создает, например, и посмотрите, каков 3 -й аргумент для вызова Open System. Если у вас есть значение режима, должно быть возможно построить значение Umask, чтобы дать желаемые файлы разрешения. Обратите внимание, что это предполагает, что единорог:

  • согласуется с режимом, который он определяет.
  • не называется Umask (2) сам (который будет переопределять выдержку Umask Stanza).
  • не вызывает chmod (2)/fchmod (2).

Если - после того, как вы следили за приведенным выше процессом - вы все равно думаете, что есть проблема с Upstart, пожалуйста, предоставьте простой тестовый пример (который не требует единорога) и поднимите здесь ошибку: https://bugs.launchpad.net/upstart/+filebug.

Другие советы

Если вы вместо того, чтобы звонить единорогу из Exec Stanza, позвоните в сценарий, который просто вызывает «Umask >> /tmp /somefile», что он там вставил? Если это дает ожидаемый ответ, ваша проблема в единороге.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top