Управление доступом в Linux/UNIX системах

Управление доступом в Linux/UNIX системах

В данном посте рассматривается управление доступом в Linux/UNIX системах. Будут рассмотрены следующие вопросы:

  • Общие правила управления доступом
  • Атрибуты объектов в Linux
  • Первый и одиннадцатый символы
  • Изменение разрешений
  • Числовой формат разрешений
  • Umask, setuid, setgid, sticky bit, immutable bit
  • SELinux

Ниже обозначаются некоторые общие/базовые правила управления доступом в Linux/UNIX системах:

  • Объекты (например, файлы и процессы) имеют владельцев. Владельцы обладают обширным (но необязательно неограниченным) контролем над своими объектами.
  • Пользователь является владельцем новых объектов, создаваемых им самим.
  • Пользователь root с особыми правами, известный как суперпользователь, может действовать как владелец любого объекта в системе.
  • Только суперпользователь может выполнять административные операции особого значения (например, выполнять некоторые системные вызовы).

Далее подробнее рассматривается каждый из пунктов.

Файл в традиционной модели Linux/UNIX-подобных систем принадлежит владельцу и группе. Владелец файла имеет особую привилегию, недоступную другим пользователям системы: ему разрешено менять права доступа к файлу. В частности, владелец может задать права доступа так, что никто, кроме него, не сможет обращаться к файлу (права можно установить настолько строгими, что даже сам владелец файла не сможет им воспользоваться). Владельцем файла всегда является один пользователь, тогда как в группу владельцев могут входить несколько пользователей.

Учетная запись root в Linux/UNIX принадлежит пользователю-администратору, известному как суперпользователь. Root имеет неограниченные привилегии над системой. Определяющей характеристикой учетной записи суперпользователя является значение UID, равное нулю:

[root@dushanbe ~]# id

uid=0(root) gid=0(root)

Другими словами система Linux/UNIX позволяет суперпользователю (т.е. всякому процессу, текущий идентификатор пользователя которого равен нулю) выполнять над файлом или процессом любую допустимую операцию (например, создание файлов устройств, увеличение лимитов использования ресурсов и повышение приоритетов процессов, конфигурирование сетевых интерфейсов и т.д.).

Зная чей-либо пароль, можно непосредственно зарегистрироваться в системе под его именем, введя команду su имя_пользователя. В ответ будет выдан запрос на ввод пароля. При использовании в качестве ключа команды su дефиса (-) интерпретатор перейдет в режим регистрации. Точная реализация этого режима зависит от конкретного интерпретатора команд, но обычно в этом режиме меняются количество и имена файлов запуска, считываемых интерпретатором – при использовании дефиса, интерпретатор загрузит среду исполнения нового пользователя, без использования дефиса – среда исполнения останется прежней. Например, при исполнении команды su test, выполняется вход в систему под пользователем test, но среда исполнения не изменится. Однако, команда su – test, позволит нам не только войти в систему под пользователем test, но и загрузить его среду исполнения – что даст доступ к его переменным окружения, настройкам интерпретатора и т.д.

В примере ниже видно, как подгружается домашняя директория, в зависимости от того, была выполнена команда su с дефисом,

[root@dushanbe ~]# pwd

/root

[root@dushanbe ~]# su test

[test@dushanbe root]$ pwd

/root

или без него.

[root@dushanbe ~]# pwd

/root

[root@dushanbe ~]# su - test

[test@dushanbe ~]$ pwd

/home/test

Чаще всего для получения прав суперпользователя применяется утилита sudo.

Sudo — это программа для Linux/Unix систем, которая позволяет пользователям запускать программы с привилегиями безопасности другого пользователя, по умолчанию суперпользователя.

В отличие от связанной команды su, пользователи должны предоставить свой пароль для аутентификации. После аутентификации, если файл конфигурации, который обычно находится в /etc/sudoers, позволяет предоставить пользователю доступ, система выполняет требуемую команду.  Чтобы дать пользователю права на sudo привилегии, надо добавить пользователя в группу wheel.

[rustam@dushanbe ~]$ /sbin/service httpd restart

rustam is not in the sudoers file. This incident will be reported.

[root@dushanbe ~]# usermod –aG wheel rustam

[rustam@dushanbe ~]$ /sbin/service httpd restart

Operation not permitted

[rustam@dushanbe ~]$ sudo /sbin/service httpd restart

[sudo] password for rustam:

Stopping httpd: [  OK  ]

Starting httpd: [  OK  ]

 

Атрибуты объектов в Linux

Каждый файл в Linux имеет владельца и группу, связанные с ним. Пользователи, не являющиеся владельцем и не состоящие в группе, относятся к остальным пользователям (other). Ниже подробно рассматривается атрибуты файла на примере листинга, где выполнена команда ls –l.

[rustam@dushanbe ~]$ ls -l /home/rustam

-rw-r--r--. 1 rustam  rustam        124    Mar 31 20:10       .bashrc

-rwxr-xr-x. 1 root    root          943360 May 21 20:10       only.for.root

-rw-rw-r--. 1 rustam  development   116    Nov 30 10:21       helloworld.C

В этом примере владельцем файла .bashrc является пользователь rustam, и этот файл принадлежит группе rustam, которая является основной группой этого пользователя. Аналогично, владельцем файла only.for.root является пользователь root, и файл принадлежит группе root. Владельцем файла helloworld.C является пользователь rustam, но этот файл принадлежит группе development. Имена групп и пользователей принадлежат различным пространствам имен, поэтому указанное имя может являться как именем пользователя, так и именем группы. В действительности многие дистрибутивы по умолчанию создают для каждого нового пользователя назначаемую ему группу с таким же названием.

Описывается каждый из параметров вывода команды ls –l:

-rw-rw-r--. 1      rustam    development     116           Nov 30 10:21           helloworld.C

Разрешения файла  владелец     группа    размер файла  дата последнего изменения    имя файла

Подробнее описание разрешений файла.

В модели безопасности Linux для каждого объекта файловой системы существует три типа разрешений: чтение (r), запись (w) и выполнение (x). Разрешение на запись также позволяет изменять или удалять объект. Кроме того, эти разрешения указываются отдельно для владельца файла, членов группы файла и для всех остальных.

В столбце листинга содержится строка из 11 символов. Одиннадцатый символ был введен не так давно, о нем будет рассказано ниже. Первый символ указывает на тип объекта (в этом примере символ “-” означает обычный файл rw-r–r–.), а остальные девять символов образуют три группы по три символа в каждой. Первая группа содержит разрешения на чтение, запись и выполнение для владельца файла. Символ “-” означает, что соответствующее разрешение не предоставлено (-rwr–r–.). Таким образом, пользователь rustam может читать и записывать в файл .bashrc, но не выполнять его, тогда как пользователь root может читать, записывать и выполнять файл only.for.root. Вторая группа содержит разрешения на чтение, запись и выполнение для группы файла (например, -rw-rwr–.). Члены группы development могут читать и записывать в файл helloworld.C (который принадлежит пользователю rustam), а все остальные пользователи системы (третья группа) могут только читать его (-rw-rw-r.). Аналогично, члены группы root и все остальные могут читать или выполнять файл only.for.root.

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

[rustam@dushanbe ~]$ ls -l /home

total 32

drwxr-x---. 38 test   test      12288 Nov 30 10:49 editor

drwxr-xr-x. 41 rustam rustam     4096 Nov 30 10:51 iam

Первый символ

Первый символ в подробном выводе содержимого директории описывает тип объекта (d означает директорию). Вывод команды ls -l может содержать объекты файловой системы, отличные от файлов и директорий, что можно определить по первому символу листинга. Другие типы объектов файловой системы:

Код       Тип объекта

–             Обычный файл

d            Директория

l             Символическая ссылка

c            Специальное символьное устройство

b            Специальное блочное устройство

p            Буфер FIFO

s            Сокет

­

Одиннадцатый символ

Одиннадцатый символ в выводе команды ls (-rw-r–r–.) является нововведением, поэтому в некоторых дистрибутивах он пока не применяется. В других случаях одиннадцатым символом может быть пробел, поэтому можно не заметить его. Этот символ указывает на использование альтернативного метода доступа к файлу. Если символ, следующий за битами режима файла, является пробелом, альтернативный метод доступа не используется. Если же этот символ является печатным знаком, то используется альтернативный метод доступа. Таким методом может являться, например, список контроля доступов. Символ ‘.’ (точка) команды GNU ls означает, что для файла используется только контекст безопасности SELinux (о нем ниже). Файлы, для которых используются любые другие комбинации альтернативных методов доступа, отмечены знаком ‘+’ (плюс).

Изменение разрешений

Разрешения для файла можно изменять несколькими способами. Для этого используется команда chmod.

Предполагается, что надо добавить сценарию разрешение на исполнение. Для этого используется команда chmod с опцией +x.

[rustam@dushanbe ~]$ ls -l /home/rustam

-rw-rw-r--. 1 rustam  rustam        20 Mar 31  2010 run.sh

[rustam@dushanbe ~]$ chmod +x run.sh

[rustam@dushanbe ~]$ ls -l /home/rustam

-rwxrwxr-x. 1 rustam  rustam        20 Mar 31  2010 run.sh

Подобным образом можно использовать опцию +r для установки разрешений на чтение и опцию +w для установки разрешений на запись. Фактически, можно использовать любые комбинации опций r, w и x. Например, команда chmod +rwx одновременно устанавливает для файла разрешения на чтение, запись и выполнение. Запуск chmod в такой форме добавляет разрешения, которые еще не были установлены.

В последнем примере разрешение на выполнение было установлено для владельца, группы и всех остальных. Для выборочной установки разрешений можно использовать префиксы u (установка разрешений для пользователя/владельца – user), g (установка разрешений для групп – group) и o (установка разрешений для всех остальных – others). Префикс a (от слово all) устанавливает разрешения для всех пользователей (что эквивалентно отсутствию какого-либо префикса вообще). В листинге ниже показано, как добавить разрешения на запись и выполнение пользователю и группе другой копии файла сценария.

[rustam@dushanbe ~]$ ls -l /home/rustam

-r--r--r--. 1 rustam  rustam        20 Mar 31  2010 run2.sh

[rustam@dushanbe ~]$ chmod ug+wx run2.sh

[rustam@dushanbe ~]$ ls -l /home/rustam

-rwxrwxr--. 1 rustam  rustam        20 Mar 31  2010 run2.sh

Иногда требуется не добавить разрешения, а отозвать их. Для этого надо заменить + на -, и все указанные разрешения будут отозваны. К примеру:

[rustam@dushanbe ~]$ ls -l /home/rustam

-rwxr-xrw-. 1 rustam  rustam        20 Mar 31  2010 run2.sh

[rustam@dushanbe ~]$ chmod o-rwx run2.sh

[rustam@dushanbe ~]$ ls -l /home/rustam

-rwxr-x---. 1 rustam  rustam        20 Mar 31  2010 run2.sh

Для установки только определенного набора разрешений вместо знаков + или – используется знак =. Если необходимо установить различные разрешения для пользователя, группы и всех остальных, вы можете разделить различные выражения запятыми, например, ug=rwx,o=rx; можно также указывать разрешения в числовом формате, как это будет описано далее.

Числовой формат разрешений

Выше для установки разрешений использовали символы ugoa и rxw. В каждой группе существует три типа разрешений. Вместо символов для установки разрешений можно использовать восьмеричные числа. При таком способе установки разрешений может потребоваться использовать до четырех восьмеричных чисел. Первое число будет рассмотрено при обсуждении атрибутов (см. ниже). Второе число определяет разрешения для пользователя/владельца, третье число разрешения для группы, а четвертое число определяет разрешения для всех остальных. Каждое из этих трех чисел формируется путем сложения необходимых разрешений: чтение (4), запись (2) и выполнение (1). Например, сценарий run.sh был создан с разрешениями -rw-r–r–, что соответствует значению 644 в восьмеричной форме. Установка разрешений на выполнение для всех пользователей и групп без исключения изменит это значение на 755.

[rustam@dushanbe ~]$ touch run.sh

[rustam@dushanbe ~]$ ls -l

total 0

-rw-r--r--    1 rustam    rustam            0 Aug 25 17:44 run.sh

[rustam@dushanbe ~]$ chmod 755 run.sh

[rustam@dushanbe ~]$ ls -l

total 0

-rwxr-xr-x    1 rustam    rustam            0 Aug 25 17:44 run.sh

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

Символическое представление            Восьмеричное значение

rwx                                                                7

rw-                                                                 6

r-x                                                                  5

r–                                                                   4

-wx                                                                 3

-w-                                                                 2

–x                                                                  1

—                                                                  0

Umask

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

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

Каким образом значение 022 даёт файлу разрешения 644? Все просто – значение маски равняется вычитаемому значению из базовых прав (666 для файлов и 777 для директорий), то есть 666-022=644. Таким образом, при маске 022 права по умолчанию для файлов будут равны 644. Например, если необходимо, чтобы директории по умолчанию создавались с правами 700, то надо задать маску 077 (777-700=077).

[rustam@dushanbe ~]$ umask

0022

[rustam@dushanbe ~]$ touch file1

[rustam@dushanbe ~]$ ls -l

total 0

-rw-r--r--    1 rustam    rustam            0 Aug 25 17:48 file1

[rustam@dushanbe ~]$ umask 0255

[rustam@dushanbe ~]$ touch file2

[rustam@dushanbe ~]$ ls -l

total 0

-rw-r--r--    1 rustam    rustam            0 Aug 25 17:48 file1

-r---w--w-    1 rustam    rustam            0 Aug 25 17:48 file2

Setuid и setgid, sticky bit

Традиционная система управления доступом в Linux/UNIX дополнена системой смены полномочий, которая реализуется ядром в сотрудничестве с файловой системой. Эта система позволяет выполнять специально подготовленные файлы с использованием привилегий более высокого уровня (обычно это привилегии суперпользователя). Этот механизм разрешает разработчикам и администраторам создавать условия для непривилегированных пользователей, при которых они могут выполнять привилегированные операции. Дело в том, что существует два специальных бита, устанавливаемых в маске прав доступа к файлу (подробнее о них см. ниже): “setuid” (Set User ID — бит смены идентификатора пользователя) и “setgid” (Set Group ID — бит смены идентификатора группы). Если запускается исполняемый файл, у которого установлен один из этих битов, то текущими идентификаторами создаваемого процесса становятся идентификаторы владельца файла, а не идентификаторы пользователя, запустившего программу. Смена полномочий действительна только на время работы программы.

Например, пользователи должны иметь возможность изменять свои пароли. Но поскольку пароли хранятся в защищенном файле /etc/shadow, пользователям нужно использовать команду passwd с полномочиями setuid, чтобы “усилить” свои права доступа. Команда passwd проверяет, кто ее выполняет, и, в зависимости от результата, настраивает свое поведение соответствующим образом, поэтому обычные пользователи могут менять только собственные пароли, а суперпользователь — любые.

[rustam@dushanbe ~]$ ls -l /bin/passwd

-rwsr-xr-x. 1 root root 27768 Feb 11  2017 /bin/passwd

Setuid бит отображается буквой s вместо x в первом наборе разрешений (owner).

 

[rustam@dushanbe ~]$ ls -ld test

drwxrwsr-x. 2 egdoc egdoc 4096 Nov  1 17:25 test

Setgid бит отображается буквой s вместо x во втором наборе разрешений (group).

Есть еще один бит, называемый дополнительным (sticky bit). В первых UNIX-системах дополнительный бит запрещал выгрузку программ из памяти. В эти дни он утратил свое значение и игнорируется многими системами. Если дополнительный бит установлен для каталога, то файловая система позволит удалять и переименовывать его файлы только владельцу каталога, владельцу файла или суперпользователю. Иметь одно лишь право записи в каталог недостаточно. Такая мера позволяет несколько лучше защитить каталоги вроде /tmp.

[rustam@dushanbe ~]$ $ ls -ld /tmp

drwxrwxrwt. 14 root root 300 Nov  1 16:48 /tmp

Sticky бит отображается буквой t вместо x в третьем наборе разрешений (others).

 

Immutable bit

Бит неизменяемости файла (immutable bit) может быть назначен файлу, который размещён в расширенной файловой системе (Ext3, Ext4, Extended File System), для его защиты от изменений. “immutable bit” может быть добавлен к атрибутам файла с помощью команды chattr и только суперпользователем. После того, как файлу будет назначен атрибут immutable, над этим файлом будут запрещены модификация, переименование, удаление, возможность создавать мягкие (soft) и жесткие (hard) ссылки.

Установка атрибута immutable осуществляется командой chattr следующим образом:

[root@dushanbe ~]# chattr +i /tmp/testfile

Проверить, защищен ли файл от изменений с помощью атрибута immutable можно с помощью команды lsattr:

[root@dushanbe ~]# lsattr /tmp/testfile

----i--------e-- /tmp/testfile

[root@dushanbe ~]# rm /tmp/testfile

rm: cannot remove /tmp/testfile: Operation not permitted

Удалить атрибут immutable можно всё той же командой chattr:

[root@dushanbe ~]# chattr -i /tmp/testfile

[root@dushanbe ~]# lsattr /tmp/testfile

-------------e-- /tmp/testfile
 

SELinux

SELinux — это реализация системы принудительного управления доступом доступа (mandatory access control — MAC), в которой все привилегии назначаются администраторами. В среде MAC пользователи не могут делегировать свои права и не могут устанавливать параметры контроля доступа на объекты, которыми они (пользователи) владеют.

Когда говорят о SELinux всегда упоминаются субъекты и объекты. То есть SELinux это разрешения и запреты, которые применяются в действиях между субъектами и объектами.

Субъекты – это пользователи, которые выполняют какие-либо операции в системе. Часто под субъектами также подразумеваются программы (процессы). Иначе говоря, субъекты это те, кто выполняет некие действия. Объекты — это то, над чем действия выполняются. Чаще всего под объектами подразумеваются файлы данных. Но это могут быть и устройства и даже программы.

SELinux поддерживает два режима работы:

Permissive – разрешается нарушение политики безопасности. Такие нарушения только регистрируются в системном журнале. То есть по сути SELinux не работает, а только лишь фиксирует нарушения политики безопасности.

Enforced – нарушения политики безопасности блокируются. SELinux работает полностью. В этом режиме SELinux дает максимальную защиту.

Для того, чтобы перейти в режим Permissive, можно использовать команды setenforce 0 или setenforce Permissive. Например, это может понадобиться при установке некоторых приложений.

Leave a Reply

Your email address will not be published. Required fields are marked *