Страницы

Поиск по вопросам

среда, 24 апреля 2019 г.

Как изменить права доступа по умолчанию Unix.

Подскажите, как изменить права доступа для файлов по умолчанию. Для каталогов стоит 777, для файлов 666. Мне необходимо для файлов поставить по умолчанию 777 при создании. Как это сделать?


Ответ

Мне необходимо для файлов поставить по умолчанию 777 при создании. Как это сделать?
если коротко, то — никак. длинное изложение — ниже, а в конце упомянуты соображения по поводу того, «что, если очень хочется…».

в конечном (для процесса) итоге файл/каталог создаётся функцией open() (см. $ man 1 open и упоминание в posix).
при этом во втором аргументе должен быть передан (в том числе и) бит O_CREAT (для каталога — ещё и O_DIRECTORY), а третьим аргументом должен идти набор бит, задающих разрешения процессам (в зависимости от того, от чьего имени они действуют) на доступ к создаваемому файлу/каталогу.
но указанный набор бит — не «окончательный приговор». как минимум на него может оказать влияение file mode creation mask (umask) — свойство процесса (наследуемое дочерними процессами), указывающее, какие биты разрешений надо скрыть («замаскировать») у создаваемого файла/каталога. именно «скрыть», но не добавить.
отсюда, надеюсь, становится чуть понятнее, почему, если мы указали процессу «ничего не скрывать» (т.е., umask a=rwx, или, в числовом виде — umask 0), каталог создаётся с битами исполнимости, а файл всё равно — без этих битов: процесс просто не запрашивал установку этих битов при вызове функции open()
почему же не запрашивал? потому что создатели данной конкретной программы, породившей запущенный вами процесс, руководствовались стандартом posix
When a file that does not exist is created, the following features defined in the System Interfaces volume of POSIX.1-2008 shall apply unless the utility or function description states otherwise: ... 3. If the file is a regular file, the permission bits of the file shall be set to: S_IROTH | S_IWOTH | S_IRGRP | S_IWGRP | S_IRUSR | S_IWUSR (see the description of File Modes in XBD Headers, ) except that the bits specified by the file mode creation mask of the process shall be cleared. If the file is a directory, the permission bits shall be set to: S_IRWXU | S_IRWXG | S_IRWXO
мой вольный перевод:
когда создаётся файл, который до этого не существовал, следующие возможности (features) должны быть применены (если иное не не отмечено в описании утилиты или функции): ... 3. если это обычный файл, должны быть выставлены следующие биты разрешений: S_IROTH | S_IWOTH | S_IRGRP | S_IWGRP | S_IRUSR | S_IWUSR (см. описание file modes в ) за исключением тех битов, которые должны быть скрыты (удалены) согласно значению file mode creation mask (umask) процесса. если файл является каталогом, должны быть выставлены биты: S_IRWXU | S_IRWXG | S_IRWXO
или, чуть проще:
обычные файлы должны иметь биты a=rw (синонимы: ugo=rw и u=rw,g=rw,o=rw), в числовом виде — 0666 (в восьмиричной системе счисления) каталоги должны иметь биты a=rwx (синонимы: ugo=rwx и u=rwx,g=rwx,o=rwx), в числовом виде — 0777 (в восьмиричной системе счисления) биты, указанные в umask, должны быть скрыты (удалены)

так можно ли изменить такое (подчиняющееся стандарту) поведение программ? теоретически — можно. известные мне варианты:
изучите документацию к программе (или её исходный код). возможно, ей можно указать (например, через конфигурационные файлы) создавать файлы с нужным вам набором бит (т.е., переопределять третий аргумент функции open()). программу можно пересобрать, исправив умолчальное значение набора бит. можно воспользоваться каким-нибудь монитором изменения файлов (например, подсистемой inotify программы linux) или какой-то аналогичной «пост-обработкой».

Комментариев нет:

Отправить комментарий