Маска режима создания файла - PullRequest
4 голосов
/ 22 августа 2011

Я изо всех сил пытаюсь понять, почему демон Unix устанавливает маску режима создания файла равной 0. Я буду благодарен, если кто-то сможет демистифицировать функцию umask.

1 Ответ

8 голосов
/ 22 августа 2011

Похоже, что вы читали книги или, возможно, читали какой-то код, и обнаружили, что они рекомендуют установить значение umask равным 0. Я никогда не был полностью убежден, что это лучший выбор, но это просто.

Проблемы:

  • Что происходит, когда демон создает файл (или каталог)?
  • Каково было значение umask при запуске демона?

Ответ на первый вопрос заключается в том, что демон, скорее всего, создаст файл с восьмеричным режимом, например 444 или 644. Однако, когда вы вызываете open() с 0444 или 0644 в качествезначение, биты, которые установлены в umask, также удаляются - поэтому фактическое разрешение на файл может быть более ограничительным, чем запланированный демон.

Конечно, является ли это серьезной проблемой, зависит от ответа надругой вопрос.Я обычно запускаю с помощью umask 022 - нет групповой или публичной записи в файлы, которые я создаюЕсли я запускаю демон, который явно не устанавливает его umask, то файлы, которые он создает, останутся без разрешения на групповую или публичную запись.Все в порядке;Я предположил, что права доступа к файлам обычно не включают групповой или публичный доступ, поэтому проблем не будет.Но предположим, что параноидальный системный администратор работает с umask 037 (нет записи или выполнения группы, нет доступа для публики);затем демон будет создавать файлы с фактическими разрешениями 440 или 640.

Устанавливая значение umask равным нулю, демон гарантирует, что при создании файла разрешения для создаваемых им файлов - именно те, которые он указываетв вызове open().Это означает, что демон должен быть осторожен, чтобы не дать несоответствующее разрешение на запись, в частности, публике и, возможно, группировке.

Многое зависит от того, что делает демон.Многие демоны работают с привилегиями root и могут создавать файлы от имени определенных пользователей.Другие демоны, запускаемые пользователем root, могут создавать файлы только для системных администраторов.Другие демоны запускаются конкретным пользователем (например, административная учетная запись для СУБД) и могут иметь другие требования.Такие демоны могут быть запущены пользователем root, но они могут стать администратором СУБД, теряя при этом привилегию root.Требования к доступу к файлам могут сильно отличаться для этих разных классов демона.Они вполне могут обращаться с масками по-разному.Но всем им рекомендуется убедиться, что umask является детерминированным - обычно.

Тем не менее, если демон написан недостаточно тщательно или у системного администратора разные идеи относительно того, какие разрешения следует использовать, ноон устанавливает umask на 0 или другое известное значение, системный администратор может остаться без метода переопределения разрешений по умолчанию, установленных демоном.Одним из преимуществ Open Source является то, что системный администратор может, если это необходимо, изменить код в соответствии с его требованиями.

Поэтому рекомендуется, чтобы демоны устанавливали свой umask равным нулю, поскольку он обеспечивает единообразное поведение независимо отнастройка umask пользователя, который запускает демон.Если вы пишете демон, другие детерминированные значения могут быть разумными в вашем контексте.Вы всегда должны учитывать, что произойдет, если у идиота будет установлен umask 777 - результат вряд ли будет таким, как хотелось.

...