Безопасность в Linux

Автор работы: Пользователь скрыл имя, 11 Декабря 2013 в 12:53, реферат

Описание работы

С самого начала операционная система Linux была многопользовательская. Это значит, что безопасность и контроль над информацией были встроены в систему с момента ее создания. Защита файлов основывается на регулировании доступа для чтения, записи и исполнения, предоставляемого владельцу файла, членам его группы и всем остальным пользователям. Для каталогов бит исполнения интерпретируется разрешение поиска в каталоге. Рассмотрим некоторые аспекты безопасности системы.

Файлы: 1 файл

Безопасность в Linux.doc

— 87.00 Кб (Скачать файл)

Тема 6.3 Безопасность в Linux

 

С самого начала операционная система Linux была многопользовательская. Это значит, что безопасность и контроль над информацией были встроены в систему с момента ее создания. Защита файлов основывается на регулировании доступа для чтения, записи и исполнения, предоставляемого владельцу файла, членам его группы и всем остальным пользователям. Для каталогов бит исполнения интерпретируется разрешение поиска в каталоге. Рассмотрим некоторые аспекты безопасности системы.

 

Основные понятия безопасности системы Linux

 

У каждого пользователя зарегистрированного в системе Linux есть свой уникальный UID (User ID – идентификатор пользователя), который представляет собой целое число в пределах от 0 до 65 535. добавить пользователя в систему может только root c помощью команды adduser. Идентификатором владельца помечаются файлы, процессы и другие ресурсы. По умолчанию владельцев файла является пользователь, создавший этот файл, хотя владельца можно сменить. В действительности манипулирует файлами не сам пользователь, а запущенный им процесс (например, утилита rm или cat). Каждый процесс системы обязательно принадлежит какому-нибудь пользователю, и идентификатор пользователя (UID) – обязательное свойство любого процесса Linux. Когда программа login запускает стартовый командный интерпретатор, она приписывает ему UID, полученный в результате диалога. Все процессы, запущенные пользователем во время терминальной сессии, будут иметь его идентификатор. Утилита id выводит входное имя пользователя и соответствующий ему UID, а также группу по умолчанию и полный список групп, членом которых он является. Ниже приведен пример того, как узнать идентификаторы пользователя и членство в группах

$ id

uid=503(methody) gid=503(methody) группы=503(methody)

$ id shogun

uid=400(shogun) gid=400(shogun) г

руппы=400(shogun),4(adm),10(wheel),19(proc)

 

Пользователи могут  организовываться в группы, которые  также нумеруются 16-разрядными целыми числами, называемыми GID (Group ID – идентификатор группы). Назначение пользователя к группе выполняется вручную системным администратором и заключается в создании нескольких записей в системной базе данных, в которой содержится информация о том, какой пользователь к какой группе принадлежит. Пользователь может быть членом нескольких групп, равно как и несколько пользователей могут быть членами одной и той же группы. Одна из групп – группа по умолчанию – является для пользователя основной: когда (не вполне точно) говорят о «GID пользователя», имеют в виду именно идентификатор группы по умолчанию. GID пользователя вписан в учетную запись и хранится в /etc/passwd. В файле /etc/group содержится полная информация о группах (имя группы, пароль, идентификатор группы, список пользователей данной группы).

С каждым выполняемым  процессом в ОС UNIX связываются реальный идентификатор пользователя (real user ID), действующий идентификатор пользователя (effective user ID) и сохраненный идентификатор пользователя (saved user ID). Все эти идентификаторы устанавливаются с помощью системного вызова setuid, который можно выполнять только в режиме суперпользователя. Аналогично, с каждым процессом связываются три идентификатора группы пользователей - real group ID, effective group ID и saved group ID. Эти идентификаторы устанавливаются привилегированным системным вызовом setgid.

Пользователь, UID которого равен 0, является суперпользователем или root. Он может читать и писать все файлы в системе. Процессы с UID=0 также обладают возможностью обращаться к небольшой группе системных вызовов, доступ к которым запрещен обыкновенным пользователям.

 

Системные вызовы безопасности

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

Некоторые системные вызовы, относящиеся к безопасности:

 

s=chmod (path, mode) - изменить режим защиты файла

s=access (path, mode) - проверить разрешение доступа к фалу, используя действительные UID и GID

uid=getuid() - получить действительный UID

uid=geteuid() - получить рабочий UID

gid=getgid() - получить действительный GID

gid=getegid() - получить рабочий GID

s=chown(path, jwner, group) - изменить владельца и группу

s=setuid(uid) - установить UID

s=setgid(gid) - установить GID

 

Системный вызов access проверяет, будет ли разрешен определенный тип доступа при заданных UID и GID. Этот системный вызов нужен, чтобы избежать появления дыр в системе безопасности. К последним трем системным вызовам разрешено обращаться только суперпользователю, так как они изменяют владельца файла, UID и GID процесса.

 

Реализация безопасности

 

При входе пользователя в систему  программа регистрации login запрашивает у пользователя его имя и пароль. Программа сопоставляет файл с login-ом в каталоге /etc/passwd с имеющейся в нем базой данных всех login-ов этой машины (для смены пароля используется команда passwd). Если пароль введен верно, то программа регистрации считывает из файла /etc/passwd имя программы оболочки - shell, которая необходима пользователю. Программа регистрации использует системные вызовы setuid и setgid, чтобы установить для себя UID и GID. Затем открывает клавиатуру для стандартного ввода и экран для стандартного вывода, выполняет оболочку, которую указал пользователь и таким образом, завершая свою работу. С этого момента начинает работу оболочка с установленными UID и GID, а также стандартными потоками ввода, вывода и ошибок, настроенными на устройства ввода-вывода по умолчанию. Все процессы, которые она запускает при помощи системного вызова fork (то есть команды, вводимые пользователем с клавиатуры), автоматически наследуют UID и GID оболочки. Все файлы, создаваемые этими процессами, также будут иметь эти значения.

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

 

Принципы защиты

 

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

 

Защита файлов

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

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

На последнем факте  стоит остановиться более подробно. Важно понимать, что имена файлов и файлы как таковые - это не одно и то же. В частности, при наличии нескольких жестких связей с одним файлом несколько имен файла реально представляют один и тот же файл и ассоциированы с одним и тем же i-узлом. Любому используемому в файловой системе i-узлу всегда однозначно соответствует один и только один файл. I-узел содержит достаточно много разнообразной информации и среди этой информации находится часть, позволяющая файловой системе оценить правомощность доступа данного процесса к данному файлу в требуемом режиме.

Общие принципы защиты одинаковы  для всех существующих вариантов  системы: Информация i-узла включает UID и GID текущего владельца файла. Кроме  того, в i-узле файла хранится шкала, в которой отмечено, что может делать с файлом пользователь - его владелец, что могут делать с файлом пользователи, входящие в ту же группу пользователей, что и владелец, и что могут делать с файлом остальные пользователи. Мелкие детали реализации в разных вариантах системы различаются.

 

Права доступа

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

При создании объектов файловой системы, файлов, каталогов и т. п., каждому в обязательном порядке приписывается ярлык. Ярлык включает в себя UID хозяина файла, GID, которой принадлежит файл, тип объекта и набор так называемых атрибутов, а также некоторую дополнительную информацию. Атрибуты определяют, кто и что имеет право делать с файлом.

Для каждого  файла предусмотрены три вида прав доступа:

  1. чтение (read) – просмотр, исследование содержимого файлов, в случае каталогов - просмотр перечня имен файлов в каталоге;
  2. запись (write) - изменение и удаление содержимого файлов, для каталогов это дает право создавать в каталоге новые файлы и каталоги или удалять существующие;
  3. выполнение (execute) - запуск файла как программы, для каталога это означает возможность поиска файлов в этом каталоге.

Эти типы прав доступа  могут быть предоставлены трем классам пользователей:

  1. владелец (user) файла;
  2. группа (group), в которую входит владелец;
  3. все, прочие (other) пользователи.

При выяснении отношений  между файлом и пользователем, запустившим  процесс, роль определяется так:

  1. Если UID файла совпадает с UID процесса, пользователь – хозяин файла, владелец;
  2. Если GID файла совпадает с GID любой группы, в которую входит пользователь, он – член группы, которой принадлежит файл;
  3. Если ни UID, ни GID файла не пересекаются с UID процесса и списком групп, в которые входит запустивший его пользователь, этот пользователь – посторонний.

 

Интерпретация прав доступа

Команда ls -l позволяет вывести на экран перечень файлов с дополнительными сведениями, включающими информацию о правах доступа в следующем формате (команда ls –d выведет информацию не о содержимом каталога, а о самом каталоге):

$ ls –l

total 30

-rwхr--r-- l larry users 517 Mar13  19:05  student

 

Первая выводная строка (total 30) показывает объем дискового  пространства в байтах. Первый символ в каждой строке (d, -, l, b или c) говорит о типе файла:

      • d – справочник;
      • - – обыкновенный файл;
      • l – символическая связь;
      • b – специальный блочный файл;
      • c – специальный символьный файл.

Девять позиций, содержащих буквы r, w или х – это права доступа. Далее следует цифра, отвечающая за количество жестких связей (команда ls –lL позволяет выводить информацию не о символьной ссылке, а о файле, на который он указывает). Значение поля «количество жестких ссылок» практически для всех каталогов равно двум, а не одному. На самом деле этого и следовало ожидать, потому что любой каталог файловой системы Linux всегда имеет не менее двух имен: собственное (например, tmp) и имя "." в самом этом каталоге (tmp/.). Если же в каталоге создать подкаталог, количество жестких ссылок на этот каталог увеличится на 1 за счет имени ".." в подкаталоге (например, tmp/subdir1/..).

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

В строке -rw-r--r-- по порядку указаны права владельца, группы и всех остальных:

  • первые три позиции rwх представляют права доступа владельца файла, т.е. владелец может читать файл, писать в него и выполнять его.
  • следующие три символа r-- представляют права доступа группы для данного файла, пользователи этой группы имеют право только читать файл (r).
  • последние три символа представляют права доступа остальных пользователей, для них доступно только чтение (r--) и запрещены запись и выполнение.

Теперь расшифруем наш пример:

-rwхr--r--  l  larry  users  517  Mar13  19:05  student

Рассматриваемый объект с именем student является файлом, об этом говорит « - » вначале строки. Владельцем файла student является larry, который входит в группу users. Владелец имеет право на чтение, запись и выполнение собственного файла (rwх), группу и прочие пользователи имеют право только на чтение файла (r--r--). Файл имеет одну жесткую связь, единица (1) после букв прав доступа. Размер файла 517 байт. Файл был модифицирован последний раз 13 Марта в 19:05.

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

 

Информация о работе Безопасность в Linux