Я полагаю, что umask - что-то, что управляет полномочиями файла, но не полностью понимайте это.
После выполнения umask 0644
в терминале я не могу считать файлы, которые я создаю с текстовым редактором командной строки nano
. Я заметил, что полномочия того файла установлены на 0022
вместо значения по умолчанию 0755
.
Как umask работает? Я думал, что мог просто удалить каждую цифру в umask от 0777
, 7 - 6 = 1
и 7 - 4 = 3
, таким образом, я ожидаю полномочия быть 0133
, но по-видимому, дело обстоит не так.
umask действует как ряд полномочий, которые приложения не могут установить на файлах. Это - маска создания режима файла для процессов и не может быть установлено для каталогов сама. Большинство приложений не создало бы файлы с, выполняют набор полномочий, таким образом, у них было бы значение по умолчанию 666
, который затем изменяется umask.
Поскольку Вы установили umask для удаления битов чтения-записи для владельца и битов чтения для других, значение по умолчанию такой как 777
в приложениях привел бы к файлу полномочиям тому, чтобы быть 133
. Это означало бы, что Вы (и другие) могли выполнить файл, и другие смогут записать в него.
Если Вы хотите к make-файлам не, читаются/пишутся/выполняются любым, но владельцем, необходимо использовать umask как 077
выключить те полномочия для группы и других.
Напротив, umask 000
сделает недавно созданные каталоги читаемыми, перезаписываемыми, и передаваемый по наследству для всех (полномочия будут 777
). Такой umask очень небезопасен, и Вы никогда не должны устанавливать umask на 000
.
Значение по умолчанию umask на Ubuntu было 022
что означает, что недавно созданные файлы читаемы всеми, но только перезаписываемы владельцем:
user@computer:~$ touch new-file-name
user@computer:~$ ls -dl new-file-name
-rw-r--r-- 1 user user 0 Apr 1 19:15 new-file-name
При запуске в Ubuntu, Сновещательной (11.10), значение по умолчанию umask было ослаблено к 002
, который разворачивает доступ для записи к группе владельца:
user@computer:~$ touch new-file-name
user@computer:~$ ls -dl new-file-name
-rw-rw-r-- 1 user user 0 Apr 1 19:15 new-file-name
Для просмотра текущей установки umask откройте терминал и выполните команду:
umask
Для изменения umask настроек текущей оболочки к чему-то еще скажите 077, работайте:
umask 077
Чтобы протестировать, работает ли эта установка или нет, можно создать новый файл (полномочия файла существующего файла не будут затронуты), и покажите информацию о файле, работайте:
user@computer:~$ touch new-file-name
user@computer:~$ ls -dl new-file-name
-rw------- 1 user user 0 Apr 1 19:14 new-file-name
Установка umask наследована процессами, запущенными с той же оболочки. Например, запустите текстовый редактор GEdit путем выполнения gedit
в терминале и сохранили файл с помощью gedit. Вы заметите, что недавно созданный файл затронут тем же umask, устанавливающим как в терминале.
Если Вы находитесь в системе, это совместно используется многочисленными пользователями, желательно, чтобы другие не могли считать файлы в Вашем корневом каталоге. Для этого umask очень полезен.Править ~/.profile
и добавьте новую строку с:
umask 007
Необходимо повторно войти в систему для этого изменения umask в ~/.profile
вступить в силу. Затем, необходимо изменить существующие полномочия файла файлов в корневом каталоге путем удаления чтения, записать и выполнить бит для мира. Откройте терминал и выполнитесь:
chmod -R o-rwx ~
Если Вы хотите этот umask, устанавливающий, применяются ко всем пользователям в системе, Вы могли отредактировать файл профиля в масштабе всей системы в /etc/profile
.
В дополнение к хорошему обсуждению в принятом ответе стоит добавить еще некоторые точки о umask
, со ссылкой на то, как этим управляют в 12,04 и вперед.
Umask и pam_umask
Значение по умолчанию umask находится теперь в /etc/login.defs
а не в /etc/profile
, как официальное примечание в /etc/profile
чтения:
# The default umask is now handled by pam_umask.
# See pam_umask(8) and /etc/login.defs.
Pam_umask
кратко объяснен ниже, и нужно сказать, что файл по умолчанию для пользователя для размещения его пользовательского начинающегося umask тих ~/.profile
.
Pam_umask
один из многих важных модулей PAM, которые крайне важны для операции Ubuntu (выполненный apropos '^pam_'
найти страницы справочника для других). В странице справочника для pam_umask
это отмечено это
pam_umask является модулем PAM для установки маски создания режима файла текущей среды. umask влияет на полномочия по умолчанию, присвоенные недавно созданным файлам.
Примечание по значению по умолчанию umask
Новые папки в $HOME
может быть создан mkdir
со значением по умолчанию 775 полномочий и файлы, созданные с touch
со значением по умолчанию 664 полномочий, даже когда значение по умолчанию umask равняется 022. Это кажется, сначала, противоречащим, и стоит объяснить.
В то время как значение по умолчанию umask 022 на Ubuntu, это не целая история, поскольку существует установка в /etc/login.defs
это позволяет umask быть 002 для некорневых пользователей, если условие соблюдают (см. выборку ниже). На нормальной установке, /etc/login.defs
содержит установку USERGROUPS_ENAB yes
. Это что
Позволяет установить umask битов группы для совпадения с битами владельца (примеры: 022-> 002, 077-> 007) для некорневых пользователей, если uid совпадает с ценурозом, и имя пользователя совпадает с именем основной группы.
Следовательно, почему Вы видите следующее с stat
когда новая папка создается с mkdir
в системе отдельного пользователя такой как мой (uid и ценуроз то же):
Access: (0775/drwxrwxr-x) Uid: ( 1000/username) Gid: ( 1000/username)
Для получения дополнительной информации посмотрите man pam_umask
и страницы справочника Ubuntu онлайн.
Это довольно старо, но это стоит упомянуть. Вычислять для umask, в отличие от полномочий файловой системы. Восьмеричные umasks вычисляются через поразрядное И унарного дополнения аргумента с помощью битового "НЕ". Восьмеричные нотации следующие:
Octal value : Permission
0 : read, write and execute
1 : read and write
2 : read and execute
3 : read only
4 : write and execute
5 : write only
6 : execute only
7 : no permissions
Затем можно вычислить для установки umask надлежащих предварительных миссий такой:
$ umask 077
$ mkdir dir1
$ touch file
$ ls -ld dir1 file
drwx------ 2 amrx amrx 4096 2011-03-04 02:05 dir1
-rw------- 1 amrx amrx 0 2011-03-04 02:05 file
Можно просто вычесть umask из основных полномочий определить заключительное разрешение для файла следующим образом:
666 – 022 = 644
666
022
(666-022)
: 644 (rw-r–r–)
Можно просто вычесть umask из основных полномочий определить заключительное разрешение для каталога следующим образом:
777 – 022 = 755
777
022
(777-022)
: 755 (rwxr-xr-x)
Другие ответили, объяснили действительно хорошо понятие umasking и почему это требуется. Позвольте мне добавить свои два цента и дать Вам математический пример о том, как полномочия на самом деле вычисляются.
В первую очередь, “Маска” не означает, “вычитают”, в арифметическом смысле – существует, не одалживают или несут включенный, во-вторых, umask
маска; это не число, которое будет вычтено.
В-третьих, маска выключает биты полномочий. Если они уже выключены, umask
не вносит изменения в разрешение,
Например, предположите, что необходимо размаскировать 077
от системных значений по умолчанию для файлов, который является 666
и каталоги, который является 777
.
Команда, которую Вы будете использовать,
umask 077
(размаскируйте значение в двоичном файле, 000 111 111
)
То, что это размаскировало, сделает, это, выключит любой из первых шести LSBs (младшие значащие биты), если они будут 1
и не внесет изменения, если какой-либо из них будет уже выключен.
Вот то, как заключительное разрешение вычисляется:
file permisison 666 = 110 110 110
unmask value 077 = 000 111 111
will result in, 600 = 110 000 000
Наблюдайте как оба 110
значения изменились на 000
.
Точно так же
directory permission 777 = 111 111 111
unmask value 077 = 000 111 111
will result in, 700 = 111 000 000
Фундаментальное понятие:
Если Вы похожи на большинство людей и не понимаете, какого черта "восьмеричные umasks вычисляются через поразрядное, И унарного дополнения аргумента с помощью битового "НЕ"" означает, вот мое простое объяснение:
В первую очередь, думайте о том, какова "маска". Маска блокирует что-то. Думайте о клейкой ленте. В этом случае umask похож на клейкую ленту для блокирования/запрещения полномочий при создании нового файла или dir.
Полномочия по умолчанию при создании нового dir octal 777 (111 111 111)
, и новый файл octal 666 (110 110 110)
. Мы устанавливаем umask для блокирования/запрещения определенных полномочий.
1
средства блокировать/запрещать то разрешение (помещенная клейкая лента по тому биту).0
позволит разрешению пройти (никакая клейкая лента по тому биту).Так octal 022 (000 010 010)
маска означает отключать group write
и others write
, и позвольте всем другим полномочиям пройти.
Вычисление:
Вот вычисление в качестве примера для нового файла (значение по умолчанию 666 разрешений) с 022 umask:
perm mask result
----------------------------
u 1 0 1 (pass through)
1 0 1 (pass through)
0 0 0 (pass through)
----------------------------
g 1 0 1 (pass through)
1 1 0 (disable)
0 0 0 (pass through)
----------------------------
o 1 0 1 (pass through)
1 1 0 (disable)
0 0 0 (pass through)
Таким образом, это - то, как Вы заканчиваете с результатом 644 при создании нового файла.
Более легкий путь:
Но если обратные вычисления маски просто смущают Вас, существует более легкий способ использовать символьную umask нотацию. При использовании этого метода затем Вы просто указываете биты передачи вместо битов маски.
umask u=rwx,g=rx,o=rx
средства позволяют, проходят для user rwx
, group rx
, other rx
. Который подразумевает, отключают group w
, others w
. Если Вы работаете, эта команда затем проверяют umask
, Вы доберетесь 022
.umask u=rwx,g=,o=
средства позволяют, проходят для user rwx
. Который подразумевает, отключают весь доступ для group
и others
. Если Вы работаете, эта команда затем проверяют umask
, Вы доберетесь 077
.Бонусное вычисление:
Если Вы на самом деле хотите понять то, что "восьмеричные umasks вычисляются через поразрядное, И унарного дополнения аргумента с помощью битового "НЕ"" означает, вот некоторые логические таблицы, которые могут помочь продемонстрировать. Помните, маска укусила 1
средства отключают, 0
средства проходят.
perm mask result
----------------
0 1 0 (mask 1 always disables)
1 1 0 (mask 1 always disables)
0 0 0 (mask 0 passes through)
1 0 1 (mask 0 passes through)
Если Вы делаете таблицу с NOT(mask)
, теперь это - просто простое AND
логическая таблица!
perm NOT(mask) result
---------------------
0 0 0 (mask 1 always disables)
1 0 0 (mask 1 always disables)
0 1 0 (mask 0 passes through)
1 1 1 (mask 0 passes through)
Таким образом, формула для него: result = perm AND (NOT mask)