Выскочить `Единорог 'с Umask игнорируется
-
28-10-2019 - |
Вопрос
я использую 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», что он там вставил? Если это дает ожидаемый ответ, ваша проблема в единороге.