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

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

16.10.2017 11:20:58 Просмотров 25 Источник

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

У вопроса есть решение - Посмотреть?

https://ru.stackoverflow.com/questions/731385/%d0%9a%d0%b0%d0%ba-%d0%b8%d0%b7%d0%bc%d0%b5%d0%bd%d0%b8%d1%82%d1%8c-%d0%bf%d1%80%d0%b0%d0%b2%d0%b0-%d0%b4%d0%be%d1%81%d1%82%d1%83%d0%bf%d0%b0-%d0%bf%d0%be-%d1%83%d0%bc%d0%be%d0%bb%d1%87%d0%b0%d0%bd%d0%b8%d1%8e-unix#comment1110344_731385
если речь про оболочки, то — никак. см.: unix.stackexchange.com/q/287278/110559

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

Стас Борзых

16.10.2017 11:27:12

Для каждого пользователя linux можно задать маску которая будет устанавливать права на новые файлы и папки по умолчанию например: umask 777 На все файлы и папки при создание будет стоять 777 Все просто вроде...

Ссылки для просвещения: wiki Подробние и с примерами на все случаи

https://ru.stackoverflow.com/questions/731385/%d0%9a%d0%b0%d0%ba-%d0%b8%d0%b7%d0%bc%d0%b5%d0%bd%d0%b8%d1%82%d1%8c-%d0%bf%d1%80%d0%b0%d0%b2%d0%b0-%d0%b4%d0%be%d1%81%d1%82%d1%83%d0%bf%d0%b0-%d0%bf%d0%be-%d1%83%d0%bc%d0%be%d0%bb%d1%87%d0%b0%d0%bd%d0%b8%d1%8e-unix/731390#comment1110143_731390
глупость написали... umask задаёт шаблон, и отбирает права от тех что есть по умолчанию,а не задаёт по умолчанию.
https://ru.stackoverflow.com/questions/731385/%d0%9a%d0%b0%d0%ba-%d0%b8%d0%b7%d0%bc%d0%b5%d0%bd%d0%b8%d1%82%d1%8c-%d0%bf%d1%80%d0%b0%d0%b2%d0%b0-%d0%b4%d0%be%d1%81%d1%82%d1%83%d0%bf%d0%b0-%d0%bf%d0%be-%d1%83%d0%bc%d0%be%d0%bb%d1%87%d0%b0%d0%bd%d0%b8%d1%8e-unix/731390#comment1110187_731390
нет, читай внимательно вторую ссылку
https://ru.stackoverflow.com/questions/731385/%d0%9a%d0%b0%d0%ba-%d0%b8%d0%b7%d0%bc%d0%b5%d0%bd%d0%b8%d1%82%d1%8c-%d0%bf%d1%80%d0%b0%d0%b2%d0%b0-%d0%b4%d0%be%d1%81%d1%82%d1%83%d0%bf%d0%b0-%d0%bf%d0%be-%d1%83%d0%bc%d0%be%d0%bb%d1%87%d0%b0%d0%bd%d0%b8%d1%8e-unix/731390#comment1110348_731390
вы б хоть проверили прежде чем писать.
Является ответом!
aleksandr barakin

16.10.2017 03:40:44

Мне необходимо для файлов поставить по умолчанию 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, <sys/stat.h>) 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 в <sys/stat.h>) за исключением тех битов, которые должны быть скрыты (удалены) согласно значению file mode creation mask (umask) процесса. если файл является каталогом, должны быть выставлены биты: S_IRWXU | S_IRWXG | S_IRWXO

или, чуть проще:

  1. обычные файлы должны иметь биты a=rw (синонимы: ugo=rw и u=rw,g=rw,o=rw), в числовом виде — 0666 (в восьмиричной системе счисления)
  2. каталоги должны иметь биты a=rwx (синонимы: ugo=rwx и u=rwx,g=rwx,o=rwx), в числовом виде — 0777 (в восьмиричной системе счисления)
  3. биты, указанные в umask, должны быть скрыты (удалены)

так можно ли изменить такое (подчиняющееся стандарту) поведение программ? теоретически — можно. известные мне варианты:

  1. изучите документацию к программе (или её исходный код). возможно, ей можно указать (например, через конфигурационные файлы) создавать файлы с нужным вам набором бит (т.е., переопределять третий аргумент функции open()).
  2. программу можно пересобрать, исправив умолчальное значение набора бит.
  3. можно воспользоваться каким-нибудь монитором изменения файлов (например, подсистемой inotify программы linux) или какой-то аналогичной «пост-обработкой».
https://ru.stackoverflow.com/questions/731385/%d0%9a%d0%b0%d0%ba-%d0%b8%d0%b7%d0%bc%d0%b5%d0%bd%d0%b8%d1%82%d1%8c-%d0%bf%d1%80%d0%b0%d0%b2%d0%b0-%d0%b4%d0%be%d1%81%d1%82%d1%83%d0%bf%d0%b0-%d0%bf%d0%be-%d1%83%d0%bc%d0%be%d0%bb%d1%87%d0%b0%d0%bd%d0%b8%d1%8e-unix/731544#comment1110751_731544
теоретически можно подменить (intercept) соответствующие системные вызовы (syscall): LD_PRELOAD=/path/to/your/open.so (libc open) или LKM (если без libc)
https://ru.stackoverflow.com/questions/731385/%d0%9a%d0%b0%d0%ba-%d0%b8%d0%b7%d0%bc%d0%b5%d0%bd%d0%b8%d1%82%d1%8c-%d0%bf%d1%80%d0%b0%d0%b2%d0%b0-%d0%b4%d0%be%d1%81%d1%82%d1%83%d0%bf%d0%b0-%d0%bf%d0%be-%d1%83%d0%bc%d0%be%d0%bb%d1%87%d0%b0%d0%bd%d0%b8%d1%8e-unix/731544#comment1110762_731544
@jfs, ну, для меня это высшая математика. напишете свой ответ с дополнительными предложениями?
https://ru.stackoverflow.com/questions/731385/%d0%9a%d0%b0%d0%ba-%d0%b8%d0%b7%d0%bc%d0%b5%d0%bd%d0%b8%d1%82%d1%8c-%d0%bf%d1%80%d0%b0%d0%b2%d0%b0-%d0%b4%d0%be%d1%81%d1%82%d1%83%d0%bf%d0%b0-%d0%bf%d0%be-%d1%83%d0%bc%d0%be%d0%bb%d1%87%d0%b0%d0%bd%d0%b8%d1%8e-unix/731544#comment1110777_731544
я это предложил как дополнительные к вашему ответу теоретические варианты стандартное поведение изменить. Не всё что можно сделать, следует делать.
https://ru.stackoverflow.com/questions/731385/%d0%9a%d0%b0%d0%ba-%d0%b8%d0%b7%d0%bc%d0%b5%d0%bd%d0%b8%d1%82%d1%8c-%d0%bf%d1%80%d0%b0%d0%b2%d0%b0-%d0%b4%d0%be%d1%81%d1%82%d1%83%d0%bf%d0%b0-%d0%bf%d0%be-%d1%83%d0%bc%d0%be%d0%bb%d1%87%d0%b0%d0%bd%d0%b8%d1%8e-unix/731544#comment1111151_731544
@alexanderbarakin, у меня ещё 1 голос остался незаюзанным. Кидай заявку в модеры.
https://ru.stackoverflow.com/questions/731385/%d0%9a%d0%b0%d0%ba-%d0%b8%d0%b7%d0%bc%d0%b5%d0%bd%d0%b8%d1%82%d1%8c-%d0%bf%d1%80%d0%b0%d0%b2%d0%b0-%d0%b4%d0%be%d1%81%d1%82%d1%83%d0%bf%d0%b0-%d0%bf%d0%be-%d1%83%d0%bc%d0%be%d0%bb%d1%87%d0%b0%d0%bd%d0%b8%d1%8e-unix/731544#comment1111310_731544
@alexanderbarakin, ну блииииин.
Помочь в развитии проекта:
Закрыть X