Как уже было отмечено, пользователи в ОС семейства Unix могут владеть файлами. Следует отметить, что в Unix файловая подсистема обеспечивает унифицированный интерфейс доступа к данным, расположенным на дисковых накопителях, и к периферийным устройствам. Т. е. доступ ко всем устройствам осуществляется через специальные файлы устройств. В ОС семейства Unix файлы имеют двух владельцев: владельца-пользователя и владельца-группу. Владельцем-пользователем вновь созданного файла является пользователь, создавший файл. Владелец-группа для вновь созданного файла определяется по-разному в различных версиях систем. В BSD-версиях UNIX владелец-группа определяется по группе, владеющей каталогом, в котором создается файл. В AT&T системах владельцем-группой становится первичная группа, которой принадлежит пользователь, создавший файл.

В Unix существуют три базовых класса доступа к файлу:

u – класс доступа для пользователя-владельца;

g – класс доступа для группы-владельца;

о – класс доступа для остальных пользователей.

Для каждого класса Unix поддерживает три типа прав доступа:

r – право на чтение;

w – право на запись;

x – право на исполнение.

Список прав доступа можно получить с помощью утилиты lsl. Например:

- rwx rw - r - - 1 root wheel 1077 Jun 1 18:05 /usr/home/sergey/myinfo

Из приведенного примера видно, что для файла /usr/home/sergey/myinfo владельцем-пользователем является root, владельцем группой – wheel, права для владельца-пользователя rwx, владельца-группы rw, и для остальных пользователей r. Первый символ указывает тип файла: ‘d’ – каталог, ‘с’ – файл байт-ориентированного устройства, ‘b’ - файл блок-ориентированного устройства, ‘s’ – сокет, ‘p’- именованный канал, ‘l’ – символическая ссылка.

НЕ нашли? Не то? Что вы ищете?

Права доступа могут быть изменены только владельцем файла или суперпользователем при помощи утилиты chmod. Изменить владельца-пользователя и владельца-группу может только суперпользователь при помощи утилит chown и chgrp.

Общий формат chmod следующий:

u

g + r

chmod o - w file1 file2 ….

a = x

В качестве аргументов указываются классы доступа (‘u’- владелец-пользователь, ‘g’ - владелец-группа, 'о' — остальные пользовате­ли, 'а' — все классы пользователей), права доступа ('r' - чтение, ‘w’ - за­пись и 'х' - выполнение) и операция, которую необходимо произвести (‘+’ - добавить, ‘-‘ - удалить и ‘=’ - присвоить) для списка файлов file1, file2 и т. д. Например

chmod u+w, og+r-wx text1 text2

Также можно установить сразу все девять прав доступа, используя числовую форму команды. Число определяется следующим образом: нужно представить права доступа в двоичном виде (0 — отсутствие соответствующего права, 1 — его нали­чие) и каждую триаду, соответствующую классу доступа, в свою очередь преобразовать в десятичное число. Допустим chmod 754 * эквивалентно chmod u=rwx,g=rx,o=r * (rwx=111b=7; r-x=101b=5; r--=100b=4 )

Значение прав доступа различно для разных типов файлов. Для файлов опе­рации, которые можно производить, следуют из самих названий прав досту­па. Например, чтобы просмотреть содержимое файла командой cat, поль­зователь должен иметь право на чтение (r). Редактирование файла, т. е. его изменение, предусматривает наличие права на запись (w). Наконец, для того, чтобы запустить некоторую программу на выполнение, необходимо иметь право на исполнение (х). Исполняемый файл может быть как скомпили­рованной программой, так и скриптом командного интерпретатора shell. В последнем случае для выполнения необходимо иметь также право на чтение, поскольку при выполнении скрипта командный интерпретатор должен иметь возможность считывать команды из файла. Все сказанное, за исключением права на выполнение, справедливо и для других типов файлов: специальных файлов уст­ройств, именованных каналов и сокетов. Для символических связей права доступа вообще не использу­ются, поскольку контролируются целевым файлом (для символических связей права всегда равны lrwxrwxrwx).

Для каталогов система трактует права доступа несколько по-другому. Право чтения каталога позволяет получить имена файлов (точнее только имена и их индексные дескрипторы), находящихся в данном каталоге. Чтобы получить дополнительную информацию о файлах каталога (например, подробный листинг команды ls -l), необходимо иметь право на выполнение для катало­га. Это право также необходимо, чтобы получить доступ к содержимому файла (например, прочитать его с помощью команды cat) и для того, чтобы перейти в каталог, т. е. сделать его текущим с помощью команды cd. Кроме того, для того чтобы сделать каталог текущим, право на выполнение необходимо иметь для всех каталогов на пути к ука­занному. Права r и x действуют независимо, право х для каталога не требует нали­чия права r, и наоборот. Комбинацией этих двух прав можно добиться ин­тересных эффектов, например, создания «темных» каталогов, файлы кото­рых доступны только в случае, если пользователь заранее знает их имена, поскольку получение списка файлов таких каталогов запрещено. Создание, удаление и переименование файлов требует наличия прав w и x на каталог. При этом при удалении файлов не учитываются права доступа для самого файла. Т. е. если пользователь имеет право w на каталог, то он может удалить в нем файл, на который не имеет никаких прав. Можно изменить подобное поведение операционной системы с помощью специальных дополнительных флагов, которые будут рассмотрены ниже.

Операционная система UNIX производит проверку прав доступа при создании, открытии (для чтения или записи), запуске на выполнение или удалении файла. При этом выполняются следующие проверки:

1. Если операция запрашивается суперпользователем (с UID=0), доступ разрешает­ся. Никакие дополнительные проверки не производятся. Это позволяет администратору иметь неограниченный доступ ко всей файловой системе.

2. Если операция запрашивается владельцем файла, то доступ разрешается при условии, что требуемое право доступа определено для владельца-пользователя, в противном случае доступ запрещается.

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

4. Если требуемое право доступа для прочих пользователей (other) уста­новлено, доступ разрешается, в противном случае доступ запрещается.

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

-rwx --- r-- 2 root guest 1056 Jun 1 19:13 special. info

Если пользователь gstuser является членом группы guest, то доступ к файлу special.info для него будет запрещен, хотя все остальные пользователи, не входящие в эту группу, имеют право чтения на этот файл. Эта возможность позволяет выделять группы пользователей, обладающих ограниченными правами.

Помимо рассмотренных основных прав доступа, имеются еще дополнительные права. Это биты SUID, SGID и Sticky-бит. Данные биты можно установить или убрать с помощью стандартной утилиты chmod. При использовании символьного режима данные биты указываются буквами s и t соответственно, а при использовании числового режима SUID соответствует 4000, SGID2000 и Sticky-бит – 1000. При просмотре прав доступа данные биты указываются вместо соответствующих битов x строчными буквами s и t. Следует отметить, что в большинстве случаев использование данных битов без установки соответствующих битов x лишено смысла (например установка SUID без установки бита x для владельца файла). Поэтому в этом случае при просмотре прав доступа биты будут указаны прописными буквами S и T, что указывает на некорректное их использование.

Рассмотрим область применения дополнительных битов. Биты SUID и SGID позволяют установить для файлов EUID и EGID процесса, равными UID или GID владельца-пользователя и владельца-группы файла. Sticky-бит для файлов считается устаревшим режимом и в современных системах практически не используется. Для каталогов бит SGID задает режим, при котором при создании файла владельцем-группой становится группа, владеющая каталогом. Это позволяет некоторым Unix системам имитировать поведение систем версии BSD, для которых такое правило наследования действует по умол­чанию. Sticky-бит для каталогов устанавливает режим, при котором пользователь может удалять файлы из каталога, только если он имеет право w для этих файлов. Это перекрывает режим по умолчанию, при котором для удаления файлов достаточно только прав w и x на сам каталог. Примером использования данного режима может служить каталог /tmp, который являет­ся открытым на запись для всех пользователей, но в котором может ока­заться нежелательной возможность удаления пользователем чужих времен­ных файлов.

Кроме рассмотренных выше прав доступа, в некоторых системах используются дополнительные права доступа. Например, в BSD системах существует специальный флаг noschg, установка которого запрещает изменять и удалять файл. Кроме того, некоторые современные версии систем Unix поддерживают управление списками доступа ACL.

Как уже было отмечено, права процессов зависят от прав пользователя, запустившего процесс. В операционных системах семейства Unix процессы имеют четыре идентификатора, связанных с правами доступа. Это идентификаторы пользователя RUID, EUID (реальный и эффективный) и идентификаторы группы RGID, EGID. RUID и RGID всегда устанавливаются равными UID и GID пользователя, запустившего процесс. По умолчанию EUID и EGID также будут равны UID и GID пользователя, запустившего процесс. Однако, как было отмечено выше, если для файла установлены биты SUID или SGID, то EUID и EGID будут равны UID и GID владельца-пользователя и владельца-группы соответственно. В качестве примера можно привести утилиту passwd, владельцем которой является root, и у нее установлен бит SUID. Это дает право любому пользователю изменять свой пароль и сохранить изменения в файле паролей. Стоит также отметить, что в любом случае утилита passwd может по битам RUID и EUID определить, запустил ее суперпользователь, либо другой пользователь от имени суперпользователя. И соответственно для обычных пользователей она может предоставить лишь ограниченные права. Например, суперпользователь может изменять пароль любого пользователя, даже не зная его старого пароля. При запуске дочерних процессов они наследуют права доступа родительского процесса. Поэтому устанавливать биты SUID и SGID следует с большой осторожностью и только для программ, которые не имеют возможно­сти запуска произвольных задач, поскольку, например, командный интерпретатор, запущенный от имени суперпользователя, предоставляет почти неограниченные возможности.

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

Для того чтобы другой пользователь мог выполнять операции от имени root, существует 2 варианта: команда su и утилита sudo. Для использования команды su, пользователь должен войти в систему под любым произвольным именем и затем вызвать команду su без параметров. При этом будет запрошен пароль суперпользователя, и в случае указания правильного пароля, будет запущен командный интерпретатор с правами суперпользователя. Во многих системах пользователь должен также являться членом группы с GID=0. В общем случае команда su позволяет запускать командный интерпретатор от имени любого пользователя, указанного в качестве параметра. Команда su предназначена, в основном, для системных администраторов, а не для обычных пользователей. В некоторых случаях может возникнуть необходимость разрешить для некоторых пользователей выполнение некоторых команд от имени суперпользователя. Для этого можно использовать утилиту sudo. Программа sudo принимает в качестве параметра командную строку, которая подлежит выполнению с правами пользователя root. В файле /usr/local/etc/sudoers содержится список пользователей и перечень команд, которые они имеют право выполнять на указанных машинах. Если все разрешения совпадают, то перед выполнением указанной команды sudo запрашивает у пользователя его пароль и выполняет указанную команду от имени суперпользователя. Программа sudo ведет файл регистрации выполненных команд, а также вызвавших их пользователей и времени вызова. Редактировать файл sudoers может только суперпользователь с помощью специальной утилиты visudo. Он должен соблюдать большую аккуратность при установке разрешений в файле sudoers и должен предоставить пользователям минимальный набор команд, достаточный для выполнения требуемых операций.

Таким образом, можно сделать вывод, что подсистема безопасности ОС семейства Unix достаточно эффективна, и большинство систем Unix по всем параметрам соответствуют классу безопасности C2. Однако стоит отметить, что администратор системы должен очень ответственно подходить к вопросам безопасности, поскольку какое-либо некорректное действие (например, предоставление пользователям возможности доступа к файлу паролей, возможности запуска командного интерпретатора с правами root, возможности запуска непроверенных или ненадежных скриптов и программ от имени суперпользователя) могут свести на нет все достоинства системы безопасности Unix.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15