2015-07-04 3 views
0

У меня есть этот кусок кодаRails MkDir и разрешения не работают хорошо

folder = File.join(SOME_PATH, "some_sufolder") 
Dir.mkdir(folder, 0770) unless File.exists?(folder) 

я использую его от пользователя my_user создавать каталоги внутри папки, которая имеет следующие разрешения

drwxrwsr-x 19 my_user some_group 

Однако, вновь созданные справочники -

drwxr-s--- 

So Chmod 750 not 770 !!

Что, черт возьми, происходит?

А также, я не понимаю, зачем мне вводить 0770, а не только 770 (что делает странные вещи в противном случае), что делает первая цифра? Я не мог найти реф этого в документации рубинового

+2

ведущих нулевых средств восьмеричный литерал –

+0

Из [docs] (http://ruby-doc.org/core/Dir.html#method-c-mkdir): 'Разрешения могут быть изменены значением File :: umask'. – cremno

ответ

1

Проверить File::umask это, вероятно, установлен в 18 (дес или 022 восьмеричной), то вычитается из разрешений вы установили в #mkdir

(0770 & ~(022)).to_s(8) #=> 750 
+0

Не могли бы вы уточнить? Почему разработчики установили значение 18 по умолчанию? Какое значение shoud я установил? –

+0

022 по умолчанию root umask в linux, 02 по умолчанию - пользовательский umask. Я считаю, что это взято из '$ umask' в момент начала рубинового скрипта. –

+1

Установите его в '02', он ограничит ваши права на' rwxrwxr-x'. Или '0' ... (Не уверен, есть ли какие-то проблемы с безопасностью. AFAIK нет ничего преступного, если вы всегда устанавливаете разрешения при создании файлов внутри программы.) –

Смежные вопросы