Ребята, привет! Расскажите мне пожалуйста, как работает команда umask, касательно логики цифр к примеру 0002.....Не могу понять по какому принципу это считается....
Маска umask
команда umask используется системным администратором для установки значения кода прав доступа по умолчанию,
которое будет присваиваться каждому файлу, созданному пользователем.
Вы, как пользователь, можете модифицировать данное значение по умолчанию.
С файлом или каталогом ассоциируются три группы прав доступа - для владельца, группы и остального мира.
Права доступа для этих трех групп присваиваются с помощью восьмеричных чисел - по одному для каждой группы.
Значения для каждой группы зависят от следующих трех битов:
р бит чтения (0 или 1)
р бит записи (0 или 1)
р бит выполнения (0 или 1)
Используя двоичную арифметику, значение кода прав доступа можно варьировать от 0
(все биты имеют нулевое значение) до 7 (все биты имеют значение 1).
Следует быть внимательным при интерпретации значения, ассоциированного с umask.
Значение umask можно использовать для порождения значения кода прав доступа по умолчанию, вычитая его из 777.
То есть, если значение umask равно 022, то значение кода прав доступ будет 777 - 022 = 755
(чтение, запись, выполнение - только для владельца; чтение и выполнение - для группы; чтение и выполнение - для всех остальных).
Для установки значения кода прав доступа, скажем, в 751 следует установить umask в 026 (777 - 026 = 751).
Реальная команда будет такой:
umask 026
http://www.mironovs.com/os/unix-os/umask.html
Спасибо большое! Очень доходчиво;)
Termo, Спасибо, можно я немного дополню?
Итак:
Реальные права файла после создания будут:
ПРАВА_ДЛЯ_СОЗДАНИЯ & ~umaskПРАВА_ДЛЯ_СОЗДАНИЯ равны 0666 для файлов, и 0777 для каталогов(по умолчанию). umask по умолчанию равна 0022. По правилам булевой алгебры, файлы получаются с правами 0644, а каталоги 0755, т.е. единички в маске сбрасывают единички в правах:
666: 110110110
022: 000010010
-----------------
644: 110100100Тем не менее, программист может изменить ПРАВА_ДЛЯ_СОЗДАНИЯ, например на 0766, тогда файла будут
0766&~0022=0744т.о., некоторые программы могут создавать файлы, которые можно исполнять. Если нам это не нужно, достаточно сменить umask на 0133, тогда файлы будут получатся со сброшенным байтом исполнения.
(конечно вредоносные программы смогут это обойти, но обычно у них на такое не хватает мозгов)
Кроме того, мы можем использовать umask для совместной работы - установка umask в 0007 приведёт к тому, что файлы будут иметь права 0660, т.е,
хозяин может читать и писать
группа тоже может и читать и писать
все остальные даже посмотреть не могут.
Да, забыл написать где выставлять эту umask:
Это вообще говоря зависит от дистрибутива. В Slackware (да вроде и не только в ней) umask выставляется в файле /etc/profile (это для всех. менять может только root). Можно сделать личную umask, в файле ~/.bashrc или ~/.bash_login (зависит от того, как вы вошли). Что-бы изменения вступили в силу надо выйти и войти. Этих файлов обычно нет - их надо сделать. Лично у меня есть только ~/.bashrc, а вместо ~/.bash_login - символьная ссылка на ~/.bashrc (потому я всегда вхожу в одно и тоже окружение, независимо от способа входа). Это скрытые файлы.
А как назначить umask только для одной директории, или для пользователя у которого оболочка /bin/false, к примеру пользователь transmission? Решил не создавать новую тему, раз уже есть такая.
C transmission проблему решил в файле конфигурации. Я так понимаю, выставлять отдельный umask на директорию не получится.