Маски прав доступа linux

Что такое umask и как установить права на файл или директорию

Очередной пост из серии «Ликбез». Всегда хотел это понять, но вечно что-то мешало.
Подглядел вот здесь, довольно легкое и доходчивое объяснение (прошу не путать ликбез с академическим толкованием) того, как посчитать umask, если знаешь какие права в итоге должен иметь твой файл или директория. Как правило, при администрировании Linux систем, нам больше всего приходится сталкиваться с фактическими правами, а вот с umask возникают некоторые трудности. Автор оригинальной статьи сам немного запутался, но я все исправил.

Что такое umask?

При создании файла или директории, среда операционной системы присваивает им определенные права доступа по умолчанию, и umask — это пользовательская маска (user mask), которая используется для определения конечных прав доступа.

Как установить umask по умолчанию?

Сперва, нам необходимо понять, как узнать текущее значение нашей umask. Сделать это очень просто:

Umask для всех пользователей по умолчанию устанавливается в файлах /etc/.bashrc или /etc/.profile.
После процедуры начальной инсталляции Linux, по умолчанию она равна 0022 (022) или 0002 (002).
Если в этих файлах, мы просто добавим или изменим строку с umask:

То при следующем входе мы получим новое значение umask. Если выполним эту команду в текущем сеансе, то, соответственно, изменим значение для маски на время работы сеанса.

Что такое umask равное 0022 и 0002?

В операционной системе Linux базовые права для директории равны 0777 (rwxrwxrwx), а для файла 0666 (rw-rw-rw).

По умолчанию umask 0002 используется для обычного пользователя. С этой маской права по умолчанию, для директории, равны 775, а для файла 664.

Для суперпользователя (root) umask по умолчанию равна 0022. С этой маской права по умолчанию, для директории, равны 755, а для файла 644.

Как посчитать (определить) права файла для маски 022 (пользователь root):
Права по умолчанию: 666
Вычитаемое значение umask: 022 (-)
Итоговые права: 644

Как посчитать (определить) права директории для маски 022 (пользователь root):
Права по умолчанию: 777
Вычитаемое значение umask: 022 (-)
Итоговые права: 755

Итоги

Таким образом: umask «отбирает» необходимые права в нужных разрядах: 7-ка полностью все, 2-ка права на запись, 0 оставляет по умолчанию. По-моему очень просто и понятно.

К примеру вот такие команды:

 $ umask 077 $ touch file.txt $ ls -l file.txt 

приведут к такому результату:

 -rw------- 1 hb hb 0 2010-02-19 05:21 file.txt 

И напоследок, пример umask с различными (наиболее часто используемыми) значениями и результирующие (итоговые) права:

Значение umask Файл Директория
Итог Владелец Группа Остальные Итог Владелец Группа Остальные
0000 666 rw- rw- rw- 777 rwx rwx rwx
0002 664 rw- rw- r— 775 rwx rwx r-x
0022 644 rw- r— r— 755 rwx r-x r-x
0007 660 rw- rw- 770 rwx rwx
0077 600 rw- 700 rwx
0027 640 rw- r— 750 rwx r-x
0277 400 r— 500 r-x
Читайте также:  Проброс портов linux localhost

Калькулятор umask

Конечно-же, ограниченный упрощенный метод подсчета и приведенная таблица не способны покрыть множество вариантов значений umask, поэтому, для более полной и четкой картины, предлагаю вам воспользоваться следующим наглядным инструментом:
«Онлайн umask калькулятор»

19 февраля, 2010 , 23:55
handyblogger[at]gmail.com

Источник

umask

The umask utility is used to control the file-creation mode mask, which determines the initial value of file permission bits for newly created files. The behaviour of this utility is standardized by POSIX and described in the POSIX Programmer’s Manual. Because umask affects the current shell execution environment, it is usually implemented as built-in command of a shell.

Meaning of the mode mask

The mode mask contains the permission bits that should not be set on a newly created file, hence it is the logical complement of the permission bits set on a newly created file. If some bit in the mask is set to 1 , the corresponding permission for the newly created file will be disabled. Hence the mask acts as a filter to strip away permission bits and helps with setting default access to files.

The resulting value for permission bits to be set on a newly created file is calculated using bitwise material nonimplication (also known as abjunction), which can be expressed in logical notation:

That is, the resulting permissions R are the result of bitwise conjunction of default permissions D and the bitwise negation of file-creation mode mask M .

  • Linux does not allow a file to be created with execution permissions, the default creation permissions are 777 for directories and only 666 for files.
  • Under Linux, only the file permission bits of the mask are used — see umask(2) . The suid, sgid and sticky bits of the mask are ignored.

For example, let us assume that the file-creation mode mask is 027 . Here the bitwise representation of each digit represents:

  • 0 stands for the user permission bits not set on a newly created file
  • 2 stands for the group permission bits not set on a newly created file
  • 7 stands for the other permission bits not set on a newly created file

With the information provided by the table below this means that for a newly created file, for example owned by User1 user and Group1 group, User1 has all the possible permissions (octal value 7 ) for the newly created file, other users of the Group1 group do not have write permissions (octal value 5 ), and any other user does not have any permissions (octal value 0 ) to the newly created file. So with the 027 mask taken for this example, files will be created with 750 permissions.

Octal Binary Meaning
0 000 no permissions
1 001 execute only
2 010 write only
3 011 write and execute
4 100 read only
5 101 read and execute
6 110 read and write
7 111 read, write and execute
Читайте также:  Install pip3 on kali linux

Display the current mask value

To display the current mask, simply invoke umask without specifying any arguments. The default output style depends on implementation, but it is usually octal:

When the -S option, standardized by POSIX, is used, the mask will be displayed using symbolic notation. However, the symbolic notation value will always be the logical complement of the octal value, i.e. the permission bits to be set on the newly created file:

Set the mask value

Note: Umask values can be set on a case-by-case basis. For example, desktop users may find the restricted permissions on their home folder sufficient ( useradd -m creates the directory with 700 permission by default), as they make all files within unaccessible to other users. Should this not be practical (for example when using Apache HTTP Server), and public files are stored amongst private ones, then consider restricting the umask instead.

You can set the umask value through the umask command. The string specifying the mode mask follows the same syntactic rules as the mode argument of chmod (see the POSIX Programmer’s Manual for details).

System-wide umask value can be set in /etc/profile (e.g. /etc/profile.d/umask.sh ) or in the default shell configuration files (e.g. /etc/bash.bashrc ). Most Linux distributions, including Arch, set a umask default value of 022 . One can also set umask with pam_umask.so but it may be overridden by /etc/profile or similar.

If you need to set a different value, you can either directly edit such file, thus affecting all users, or call umask from your shell’s user configuration file, e.g. ~/.bashrc to only change your umask, however these changes will only take effect after the next login. To change your umask during your current session only, simply run umask and type your desired value. For example, running umask 077 will give you read and write permissions for new files, and read, write and execute permissions for new folders.

Set umask value for KDE / Plasma

Setting the umask value via /etc/profile does no longer work for KDE / Plasma sessions because these are started as systemd user units.

The umask value can be set via pam_umask.so or a systemd drop-in file:

/etc/systemd/system/user@.service.d/override.conf

Using pam_umask.so allows to set the system-wide umask value for both, text console and graphical KDE sessions in one single place. Any changes in /etc/profile or systemd configuration can be omitted. Therefore, pam_umask.so needs to be enabled in a configuration file that is included by both, /etc/pam.d/login and /etc/pam.d/systemd-user .

Add the following line to /etc/pam.d/system-login :

# session optional pam_umask.so umask=022

See also

Источник

Команда UMASK: задаем маску прав для файлов и каталогов в Linux

Права доступа к файлам и директориям в Linux

Команда UMASK (англ. user file creation mode mask — маска режима создания пользовательских файлов) позволяет задать маску прав пользователя для новых файлов и каталогов в Linux.

Каждый раз, когда пользователь Linux создаёт новый файл или каталог, операционная система запрашивает маску прав для того, чтобы установить корректные права файлу или папке. В цифровом представлении значение маски по умолчанию 002 или 022 в зависимости от дистрибутива Linux. Например, в Ubuntu оно 002, а в Debian 022. Установка прав на файл или папку производится по следующей формуле: от максимальных прав отнимается маска, полученное число и будет правами на файл или каталог.

Читайте также:  Linux настройка репозиториев debian

Для файлов это: 666 — 002 = 664;

Для каталогов: 777 — 002 = 775.

А если маска 022? Тогда права будут высчитаны следующим образом:

Для файлов: 666 — 022 = 644;

Для каталогов: 777 — 022 = 755.

Аналогично и для других значений пользовательской маски.

Так как права на файлы устанавливаются на основе прав 666 (-rw-rw-rw-), то задать права на выполнение файлов с помощью маски не получится. С каталогами такого ограничения нет, так как там права выставляются на основе прав 777 (drwxrwxrwx). Ещё одно ограничение заключается в том, что команда umask действует в рамках одной сессии терминала.

Синтаксис команды выглядит следующим образом:

UMASK [-p] [-S] [маска_в_цифровом_представлении]

Как видим, нам доступно всего два параметра:

-p — вывести текущее значение маски в цифровом представлении, пригодное для повторного использования;

-S — вывести текущее значение маски в символьном представлении.

Примеры использования команды umask :

Просмотр текущего значения маски:

Просмотр текущего значения маски в символьном представлении:

Команда UMASK: задаем маску прав для файлов и каталогов в Linux

Возможно вы задались вопросом, почему на скриншоте значение маски отображается как 0022. Обычно первую цифру отбрасывают, если только не устанавливаются специальные атрибуты.

Команда UMASK: задаем маску прав для файлов и каталогов в Linux

Если вы привыкли к символьному отображению прав, то задать маску можно и иначе:

Команда UMASK: задаем маску прав для файлов и каталогов в Linux

Здесь есть один тонкий момент, который нужно разъяснить. В начале этой статьи мы рассматривали примеры расчётов прав на файлы и каталоги. Напомню, что они получались путём вычитания маски. Таким образом, пользовательская маска представляет собой запреты. Та же маска 002 не накладывает запретов на владельца файла или каталога и группу, которая сопоставлена файлу/каталогу, но для остальных пользователей накладывается запрет на редактирование содержимого файла или каталога. Но, если мы задаём маску через символьное отображение, то мы прописываем права, а не запреты.

Группы прав можно объединять:

В примере выше мы выставили одни и те же права владельцу и группе. Если нужно задать одинаковые права всем, то можно использовать параметр a (all):

Команда UMASK: задаем маску прав для файлов и каталогов в Linux

Прописывать все права досконально не обязательно. Если нужно разрешить или запретить определённые действия, то нужно просто указать что и для кого мы разрешаем (+) или запрещаем (-).

Пример добавления разрешения:

Пример добавления запрета:

Можно даже комбинировать описанные выше способы:

В этом примере мы дали полный доступ владельцу и группе, одновременно с этим лишив остальных пользователей прав на чтение и редактирование.

Команда UMASK: задаем маску прав для файлов и каталогов в Linux

Все эти манипуляции изменяют значение пользовательской маски только в текущей сессии терминала. Можно ли изменить значение маски по умолчанию? Да. Если хотите изменить значение маски для пользователя, отредактируйте файл конфигурации оболочки пользователя: ~/.bashrc или ~/.zshrc.

Команда UMASK: задаем маску прав для файлов и каталогов в Linux

Можно изменить и общее для всей операционной системы значение umask . Обычно требуется отредактировать один из следующих файлов: /etc/bash.bashrc, pam_umask.so или /etc/profile. Зависит от дистрибутива. Учтите, что значение маски для пользователя имеет приоритет над общесистемным значением.

Источник

Оцените статью
Adblock
detector