Установка umask для каталога так, чтобы все каталоги, исполняемый файл (.sh, .cmd, .bat) были 750, а обычный файл 640

Необходимо создать и изменить существующий файл и каталог так, чтобы все каталоги и исполняемые файлы (*.sh, *.bat, *.cmd ..) составляли 750, а обычный файл - 640 . Мне нужно это в оболочке и Python как.

Мне нравится устанавливать umask на 027, в то время как по умолчанию 022 для существующей директории.... не могу изменить umask по умолчанию. В основном нужно установить директорию umask

1 ответ

Кажется, вы не можете установить umask для каталога, см. Аналогичные вопросы и ответы.

Давай читать man umask чтобы увидеть, какие у вас есть варианты:

ОПИСАНИЕ

umask() устанавливает маску создания режима файла вызывающего процесса (umask) на mask & 0777 (т. е. используются только биты разрешения доступа к файлу маски) и возвращает предыдущее значение маски.

Umask используется open(2), mkdir(2) и другими системными вызовами, которые создают файлы для изменения разрешений, предоставляемых вновь создаваемым файлам или каталогам. В частности, права доступа в umask отключены от аргумента mode для open (2) и mkdir(2).

В качестве альтернативы, если родительский каталог имеет ACL по умолчанию (см. Acl(5)), umask игнорируется, ACL по умолчанию наследуется, биты разрешения устанавливаются на основе унаследованного ACL, а биты разрешения, отсутствующие в аргументе mode, преобразуются выкл. Например, следующий ACL по умолчанию эквивалентен umask 022:

u::rwx,g::r-x,o::r-x

Сочетая эффект этого ACL по умолчанию с аргументом режима 0666 (rw-rw-rw-), получаемое разрешение файла будет 0644 (rw-r- r--).

Я бы сказал, что у вас есть три варианта:

  1. Оставьте umask в покое и периодически запускайте скрипт, который устанавливает необходимые разрешения для файлов и каталогов.
  2. Бежать umask 027 когда вы создаете файлы или каталоги в этом конкретном месте - это повлияет на текущий процесс. Бежать umask 022 когда вы сделали.
  3. Включите и используйте ACL. Поскольку вы отметили этот вопрос setfacl Вы, вероятно, уже рассматриваете этот метод:

    setfacl -Rdm u::rwx,g::r-x,o::--- .
    touch a
    mkdir b
    

    Бежать ls -al а также getfacl * чтобы увидеть результаты:

    -rw-r-----  a
    drwxr-x---+ b
    
    # file: a
    user::rw-
    group::r--
    other::---
    
    # file: b
    user::rwx
    group::r-x
    other::---
    default:user::rwx
    default:group::r-x
    default:other::---
    

Примечание. Разрешения по умолчанию не различаются в зависимости от расширений файлов: если вы хотите, чтобы.sh,.cmd и.bat имели 750, а другие файлы 640, ваш лучший вариант - 1. выше.

Другие вопросы по тегам