Как я выяснил, при использовании umask максимальные разрешения, которые вы можете дать файлам, равны 666. Что и делается umask 0000
. Это из-за разрешений на создание файлов по умолчанию, которые кажутся 666 в каждой системе, которую я знаю.
Я знаю, для файлов нам нужны права на исполняемые файлы, чтобы показать их содержимое.
Но почему мы ограничиваем разрешения по умолчанию для создания файлов на 666?
permissions
filesystems
files
Питер
источник
источник
umask
сumask 0000
- которое все еще ограничивает разрешения для файлов 666. (Но, очевидно, папки используют 777)Ответы:
Насколько я могу судить, это жестко запрограммировано в стандартные утилиты. Я
strace
d одновременноtouch
создать новый файл иmkdir
создать новый каталог.touch
Следа производится следующим образом :в то время как
mkdir
след произвел это:Если не считать кодирование процесса создания файла / каталога в C, я не вижу способа изменить разрешения по умолчанию. Однако мне кажется, что не делать файлы исполняемыми по умолчанию имеет смысл: вы не хотите, чтобы какой-либо случайный текст был случайно неверно истолкован как команды оболочки.
Обновить
Чтобы дать вам пример того, как биты разрешений жестко закодированы в стандартные утилиты. Вот некоторые соответствующие строки из двух файлов в
coreutils
пакете, который содержит исходный код для обоихtouch(1)
иmkdir(1)
, среди прочего:mkdir.c
:Другими словами, если режим не указан, установите для него значение
S_IRWXUGO
(читай: 0777), измененное параметромumask_value
.touch.c
еще понятнееТо есть дать каждому право на чтение и запись (читай: 0666), что
umask
, конечно , будет изменено процессом создания файла.Вы можете быть в состоянии обойти это программно только: то есть при создании файлов из любой программы C, где вы делаете системные вызовы напрямую или из языка , что позволяет сделать низкоуровневый системный вызов (смотрите, например , в Perl
sysopen
Underperldoc -f sysopen
).источник
umask file
иumask dir
. Установите два разных значения по умолчанию и отлично. Но сейчас у меня нет возможности создавать файлы с exec perms.mkdir(1)
предлагает вам-m
переключатель, чтобы указать режим каталога во время создания. Однако с файлами, поскольку при создании файла используетсяopen(2)
системный вызов, инструмент, который вы используете для создания файла, - это тот, который отвечает за передачу битов режима,open
и вы не получите права голоса в этом вопросе.install(1)
по умолчанию копирует ваш файл в новое место и устанавливает биты выполнения, но это все еще не происходит во время создания.touch
например, отвечает за установку правильных значений. Вы знаете, где хранятся значения? Может быть, они установлены по всей системе - чтобы мы могли их изменить? Потому что я хочу вырваться на свободу ;)Во-первых, нет глобального значения по умолчанию, разрешения зависят от приложения, которое создает файл. Например, эта маленькая программа на C создаст файл '/ tmp / foo' с разрешениями 0777, если umask равен 0000 (в любом случае разрешения будут 0777 & ~ umask):
При этом многие приложения создают файлы с разрешениями 0666. У этого есть две причины:
источник