Red Hat System Administration I 8.2

Управление разрешениями по умолчанию и доступом к файлам

Задачи

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

  • управлять разрешениями по умолчанию для новых файлов, создаваемых пользователями;

  • объяснить влияние специальных разрешений;

  • использовать специальные разрешения и разрешения по умолчанию, чтобы назначить группу-владельца для файлов, созданных в определенном каталоге.

Специальные разрешения

Специальные разрешения — это четвертый тип разрешений в дополнение к основным типам (пользователь, группа и остальные). Как следует из названия, эти разрешения предоставляют дополнительные функции, связанные с доступом, помимо тех функций, которые дают основные типы разрешений. В этом разделе подробно описано влияние специальных разрешений. В таблице ниже приведена сводная информация по ним.

Таблица 7.2. Влияние специальных разрешений на файлы и каталоги

Специальное разрешение

Влияние на файлы

Влияние на каталоги

u+s (suid)

Файл выполняется от имени пользователя, который владеет файлом, а не пользователя, который вызвал его выполнение.

Не влияет.

g+s (sgid)

Файл выполняется от имени группы, которая владеет файлом.

Для новых файлов, созданных в каталоге, в качестве группы-владельца задается группа-владелец каталога.

o+t (sticky)

Не влияет.

Пользователи с разрешением на запись в каталог могут удалять только те файлы, которыми они владеют; они не могут удалять или принудительно сохранять данные в файлы, принадлежащие другим пользователям.


Наличие разрешения setuid для исполняемого файла означает, что команды будут выполняться от имени пользователя, являющегося владельцем файла, а не от имени пользователя, который выполнил команду. Рассмотрим в качестве примера команду passwd.

[user@host ~]$ ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 35504 Jul 16  2010 /usr/bin/passwd

В длинном списке найти разрешения setuid можно по букве s в нижнем регистре там, где обычно должно быть x (разрешения на выполнение владельцем). Если у владельца нет разрешений на выполнение, s заменяется на S в верхнем регистре.

Специальное разрешение setgid для каталога означает, что файлы, созданные в этом каталоге, наследуют группу-владельца от каталога, а не от создавшего их пользователя. Это разрешение обычно используется в общих каталогах групп для автоматического перевода файла из стандартной частной группы в общую группу, а также в тех случаях когда файлы в каталоге всегда должны принадлежать определенной группе. Рассмотрим в качестве примера каталог /run/log/journal.

[user@host ~]$ ls -ld /run/log/journal
drwxr-sr-x. 3 root systemd-journal 60 May 18 09:15 /run/log/journal

Если установить разрешение setgid для исполняемого файла, команды будут выполняться от имени группы, которой принадлежит этот файл, а не от имени пользователя, выполнившего команду (так же, как при использовании setuid). Рассмотрим в качестве примера команду locate.

[user@host ~]$ ls -ld /usr/bin/locate
-rwx--s--x. 1 root slocate 47128 Aug 12 17:17 /usr/bin/locate

В длинном списке найти разрешения setgid можно по букве s в нижнем регистре там, где обычно должно быть x (разрешения на выполнение группой). Если у группы нет разрешений на выполнение, s заменяется на S в верхнем регистре.

Разрешение sticky bit для каталога задает устанавливает специальное ограничение на удаление файлов. Только владелец файла (и пользователь с правами root) может удалять файлы в этом каталоге. Рассмотрим в качестве примера каталог /tmp.

[user@host ~]$ ls -ld /tmp
drwxrwxrwt. 39 root root 4096 Feb  8 20:52 /tmp

В длинном списке найти разрешения sticky bit можно по букве t в нижнем регистре там, где обычно должно быть x (разрешения на выполнение остальными). Если у остальных нет разрешений на выполнение, t заменяется на T в верхнем регистре.

Установка специальных разрешений

  • В символьном формате: setuid = u+s; setgid = g+s; sticky = o+t

  • В цифровом формате (четвертая предшествующая цифра): setuid = 4; setgid = 2; sticky = 1

Примеры

  • Добавление бита setgid для каталога directory:

    [user@host ~]# chmod g+s directory
  • Установка бита setgid для каталога directory и добавление разрешений на чтение, запись и выполнение для пользователя и группы без предоставления доступа остальным:

    [user@host ~]# chmod 2770 directory

Разрешения по умолчанию для файлов

Когда вы создаете новый файл или каталог, ему назначаются начальные разрешения. На эти начальные разрешения влияют два фактора. Первый ― создаете вы обычный файл или каталог. Второй ― текущая пользовательская маска (umask).

Если вы создаете новый каталог, операционная система назначает ему восьмеричные разрешения 0777 (drwxrwxrwx). Если вы создаете новый обычный файл, операционная система назначает ему восьмеричные разрешения 0666 (-rw-rw-rw-). Необходимо явно добавлять разрешение на выполнение для обычного файла. Так злоумышленникам будет сложнее скомпрометировать сетевую службу, чтобы она создала новый файл и сразу же запустила его как программу.

Однако в сеансе командной оболочки также будет установлена пользовательская маска для дальнейшего ограничения первоначальных разрешений. Это восьмеричная битовая маска, которая используется для очистки разрешений новых файлов и каталогов, создаваемых процессом. Если в маске установлен какой-либо бит, то соответствующее разрешение в новых файлах очищается. Например, маска 0002 очищает бит записи для остальных пользователей. Начальные нули показывают, что специальные разрешения пользователя и группы не удаляются. Маска 0077 очищает все разрешения группы и остальных пользователей для новых файлов.

Команда umask без аргументов отображает текущее значение пользовательской маски командной оболочки.

[user@host ~]$ umask
0002

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

Системные значения маски по умолчанию для командной оболочки Bash определены в файлах /etc/profile и /etc/bashrc. Пользователи могут переопределять системные значения по умолчанию в файлах .bash_profile и .bashrc в своих домашних каталогах.

Пример пользовательской маски

В следующем примере объясняется, как пользовательская маска влияет на разрешения для файлов и каталогов. Посмотрите на разрешения пользовательской маски по умолчанию для файлов и каталогов в текущей оболочке. У владельца и группы-владельца есть разрешения на чтение и запись для файлов, а у остальных пользователей есть разрешение на чтение. У владельца и группы-владельца есть разрешения на чтение, запись и выполнение для каталогов. Единственное разрешением для остальных пользователей ― чтение.

[user@host ~]$ umask
0002
[user@host ~]$ touch default
[user@host ~]$ ls -l default.txt
-rw-rw-r--. 1 user user 0 May  9 01:54 default.txt
[user@host ~]$ mkdir default
[user@host ~]$ ls -ld default
drwxrwxr-x. 2 user user 0 May  9 01:54 default 

Если задать для пользовательской маски значение 0, разрешения на доступ к файлам для остальных пользователей изменятся с чтения на чтение и запись. Разрешения на доступ к каталогу для остальных пользователей изменятся с чтения и выполнения на чтение, запись и выполнение.

[user@host ~]$ umask 0
[user@host ~]$ touch zero.txt
[user@host ~]$ ls -l zero.txt
-rw-rw-rw-. 1 user user 0 May  9 01:54 zero.txt
[user@host ~]$ mkdir zero
[user@host ~]$ ls -ld zero
drwxrwxrwx. 2 user user 0 May  9 01:54 zero 

Чтобы замаскировать все разрешения на доступ к файлам и каталогам для остальных пользователей, задайте для пользовательской маски значение 007.

[user@host ~]$ umask 007
[user@host ~]$ touch seven.txt
[user@host ~]$ ls -l seven.txt
-rw-rw----. 1 user user 0 May  9 01:55 seven.txt
[user@host ~]$ mkdir seven
[user@host ~]$ ls -ld seven
drwxrwx---. 2 user user 0 May  9 01:54 seven

Маска 027 гарантирует, что для новых файлов пользователь получает разрешения на чтение и запись, а группа получает разрешение на чтение. Для новых каталогов группа получает разрешения на чтение и запись, а остальные пользователи не получают никаких разрешений.

[user@host ~]$ umask 027
[user@host ~]$ touch two-seven.txt
[user@host ~]$ ls -l two-seven.txt
-rw-r-----. 1 user user 0 May  9 01:55 two-seven.txt
[user@host ~]$ mkdir two-seven
[user@host ~]$ ls -ld two-seven
drwxr-x---. 2 user user 0 May  9 01:54 two-seven 

Значение маски по умолчанию для пользователей задается сценариями запуска командной оболочки. По умолчанию, если UID учетной записи ― 200 или больше, а имя пользователя и имя основной группы совпадают, будет назначена пользовательская маска 002. В противном случае будет использоваться маска 022.

Как пользователь root, вы можете изменить это поведение, добавив сценарий запуска оболочки с именем /etc/profile.d/local-umask.sh, похожий на вывод в этом примере:

[root@host ~]# cat /etc/profile.d/local-umask.sh
# Overrides default umask configuration
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
    umask 007
else
    umask 022
fi

В предыдущем примере будет задана маска 007 для пользователей с UID, превышающим 199, у которых имя пользователя совпадает с именем основной группы, и 022 для всех остальных. Чтобы задать для всех маску 022, можно создать этот файл со следующим содержимым:

# Overrides default umask configuration
umask 022

Чтобы глобальные изменения пользовательской маски вступили в силу, необходимо выйти из оболочки и снова выполнить вход. Пока вы этого не сделаете, будет действовать пользовательская маска, настроенная в текущей оболочке.

Ссылки

Man-страницы bash(1), ls(1), chmod(1) и umask(1)