Содержание
Введение 8
1. Основные понятия компьютерной безопасности 10
2. Локальная и сетевая безопасность Linux 15
2.1. Пользователи и пароли 18
2.2. Особенности файловой системы Linux 24
2.2.1. Права доступа 24
2.2.2. Атрибуты файлов 29
2.2.3. Механизм квот 33
2.3. Библиотека PAM 36
2.4. Брандмауэр 48
2.5. Удаленное управление 57
3. Средства усиления безопасности в Linux 63
3.1. Linux ACLs 63
3.2. LIDS 65
3.3. AIDE 71
4. Техника безопасности 74
Заключение 80
Список литературы 82
Приложение 83
Введение
Постоянно растущий интерес к безопасности различных сетевых ОС, а в особенности к UNIX-подобным системам, как раз и побудил меня выбрать именно эту тему работы. Проблема информационной безопасности, начиная с момента появления необходимости в ней, постоянно тревожит умы сотни тысяч людей, заставляя их совершенствовать средства ее обеспечения. По проблемам безопасности информационных систем написано очень много книг и статей, каждый день выходят очерки, в которых сообщается о новых продуктах, совершенствовании существующих систем безопасности, описываются по шагам методы защиты от различных вторжений, методы устранения их последствий. Эта тема постоянно развивается, и интерес к ней никогда не угаснет. Проблема информационной безопасности будет актуальной до тех пор, пока существует информация, которую необходимо оградить от постороннего глаза.
Задачей данной работы является обзор средств как стандартных, так и не совсем, которые предоставляет операционная система Linux для безопасного функционирования, безопасной работы пользователей, а также сохранности конфиденциальной информации, для хранения которой эта ОС может использоваться. В работе затрагиваются не только вопросы, имеющие непосредственное отношение к безопасности ОС Linux. Поскольку Linux - сетевая ОС, и основным ее назначением является работа в сети, было бы неправильным не затронуть вопросы сетевой безопасности.
Работа поделена на четыре части: первая часть является теоретическим обзором основных терминов компьютерной безопасности; во второй части рассматриваются аспекты локальной и сетевой безопасности системы; третья часть является обзором дополнительных средств, предоставляемых разработчиками мира UNIX для контроля, регистрации и предотвращения угроз безопасности ОС Linux и четвертая часть представляет собой дополнительный раздел, в котором рассматривается техника безопасной работы с персональным компьютером и монитором.
1. Основные понятия компьютерной безопасности
У различных категорий людей слово «безопасность» вызывает свои ассоциации. Имеется множество разновидностей этого термина, которые связаны с различными сферами деятельности человека. Например, государственная безопасность или безопасность жизнедеятельности, политическая или строительная безопасность. Вообще таких разновидностей большое количество, в каждом случае к этому термину предъявляются специфические для конкретного рода деятельности требования, отличные от всех остальных. Обобщенное же определение термина «безопасность» можно сформулировать так: безопасность – это набор средств и требований, направленных на предотвращение запрещенных действий, выполнение которых может привести к нежелательным последствиям.
Термин «информационная безопасность» появился сравнительно недавно, с развитием вычислительной техники и ЭВМ. Информационная безопасность включает в себя кроме безопасности используемого программного обеспечения, также безопасность аппаратных средств, безопасность каналов связи и многое другое.
Под безопасностью же операционной системы понимается помимо безопасности самого ядра операционной системы еще и безопасность программного обеспечения, установленного на ней. Другими словами, безопасность операционной системы – это комплекс мер, направленных на предотвращение действий со стороны пользователя или других программ, которые могут привести к нарушению нормального функционирования операционной системы.
Если есть запрет, появится и человек, который попытается его нарушить!
С развитием информационных технологий и внедрением компьютера практически
во все сферы деятельности появились люди, так называемые «кракеры» (от
англ. cracker – «взломщик компьютерных сетей и программ»), которые
различными ухищрениями и нестандартными методами пытаются с целью
собственной выгоды получить несанкционированный доступ к информации,
которая для них не предназначена. Порой это приводит к плачевным
последствиям для владельца этой информации. Тогда и возникла потребность в
борьбе с «информационными вредителями». Были разработаны целые комплексы
программ для усиления информационной безопасности и борьбы с кракерами. А
поскольку любым электронно-вычислительным комплексом управляет определенная
ОС, то, соответственно, для обеспечения безопасности системы в целом
необходимо позаботиться о безопасности самой ОС.
Каждый производитель по-своему взглянул на безопасность своей ОС. В итоге одни системы оказались достаточно защищенными, защиту других обойти было не просто, а третьи оказались практически беззащитными перед взломщиками. Степень защищенности ОС Linux – еще одной UNIX-подобной ОС реального времени, рассматривается в этой работе.
Изучая безопасность ОС, нельзя не коснуться теории компьютерной безопасности. Теория компьютерной безопасности оперирует тремя основными понятиями: угроза, уязвимость и атака.
Угроза безопасности компьютерной системы – это потенциально возможное происшествие, которое может оказать нежелательное воздействие на саму систему (такое, как перезагрузка, зависание), а также на информацию, находящуюся в ней (удаление, порча файлов и так далее).
Уязвимость компьютерной системы – это такая неудачная или не совсем корректная ее характеристика, которая представляет возможным возникновение угрозы. Уязвимости как раз и являются причиной возникновения неприятных ситуаций.
К уязвимостям можно отнести следующие состояния информационных систем:
1. Несовершенство используемого программного обеспечения
Программное обеспечение написано человеком, а человек склонен допускать ошибки. При создании программного продукта проследить все связи и возможные ошибки практически невозможно, даже когда над проектом работает большое количество людей. Создатели программных продуктов стараются как можно лучше оптимизировать код программы и избавить его от ошибок, но, тем не менее, предусмотреть все возможные ситуации не представляется возможным. Иногда такие недоработки не несут никаких критических последствий для самой программы или данных, которыми она оперирует, но бывает, что они позволяют использовать программу в целях, отличных от тех, для которых она создавалась первоначально, иногда с очень серьезными последствиями (порча данных, например). Такие недоработки в программе обычно называют «дырами».
Еще существует такое понятие, как «люк». Люком называют специальные
комбинации действий над программой, которые позволяют обойти некоторые
этапы выполнения. Обычно люки используются программистами при разработке и
тестировании программ с целью обхода уже проверенных блоков и в конце
должны «закрываться», то есть программный код, отвечающий за люк, должен
быть удален из готовой программы. Но то, что должно, делается не всегда.
Программист попросту может забыть про люк, в результате люк остается в
готовой программе и может представлять угрозу для правильного выполнения.
2. Неправильная настройка программного обеспечения
Безопасность системы во многом зависит от правильной настройки программного обеспечения, установленного в ней. За правильную настройку программ, установленных на пользовательском компьютере, отвечает сам пользователь компьютера (обычно, его владелец), за правильную настройку программ и сервисов, работающих на специализированном компьютере, обслуживающем запросы пользователей (сервере), отвечает администратор. В обоих случаях эти лица несут полную ответственность за сохранность данных и нормальное функционирование программ на обслуживаемом компьютере. От того, насколько правильно настроено то или иное программное обеспечение, может зависеть, получит злоумышленник доступ к компьютеру или нет.
Атака на компьютерную систему – это алгоритм действий, с помощью которых может быть осуществлен поиск уязвимостей и их использование с целью осуществления угрозы.
Существуют три основных вида угроз:
. Угрозы раскрытия
. Угрозы целостности
. Угрозы отказа в обслуживании
Угроза раскрытия заключается в том, что информация становится известной тому, кому не следовало бы ее знать. В терминах компьютерной безопасности угроза раскрытия имеет место всякий раз, когда получен доступ к некоторой конфиденциальной информации, хранящейся в вычислительной системе или передаваемой от одной системы к другой. Иногда вместо слова "раскрытие" используются термины "кража" или "утечка".
Угроза целостности включает в себя любое умышленное изменение
(модификацию или даже удаление) данных, хранящихся в вычислительной системе
или передаваемых из одной системы в другую. Обычно считается, что угрозе
раскрытия подвержены в большей степени государственные структуры, а угрозе
целостности - деловые или коммерческие.
Угроза отказа в обслуживании возникает всякий раз, когда в результате некоторых действий блокируется доступ к некоторому ресурсу вычислительной системы. Реально блокирование может быть постоянным, чтобы запрашиваемый ресурс никогда не был получен, или оно может вызвать только задержку запрашиваемого ресурса, достаточно долгую для того, чтобы он стал бесполезным. В таких случаях говорят, что ресурс исчерпан.
Вывод.
В этой главе был осуществлен обзор основных терминов компьютерной безопасности, рассмотрены такие понятия, как угроза безопасности, уязвимость системы, атака на систему, описаны основные виды атак.
2. Локальная и сетевая безопасность Linux
Linux является сетевой ОС, поэтому провести четкую границу между
локальной и сетевой безопасностью очень сложно. Но, поскольку компьютер, на
котором установлена ОС Linux, может выступать как в качестве
пользовательского компьютера, так и в качестве сервера, подключение его к
сети не гарантируется. При отсутствии сети неуместно говорить о сетевой
безопасности, потому что сетевой угрозы в принципе не существует.
Следовательно, разделение общей безопасности системы на две составляющие
вполне целесообразно.
Учитывая все это, можно сделать вывод, что локальная безопасность является обязательной практически в любом случае, кроме тех, когда к компьютеру имеет доступ только один человек – его владелец. Сетевая же безопасность является актуальной только в том случае, когда компьютер с установленной на нем Linux имеет выход в сеть. Сетевая безопасность является дополняющим звеном локальной безопасности, которые вместе определяют общую безопасность системы в целом. В принципе, локальную безопасность можно считать последним барьером в общей безопасности системы.
Локальная безопасность – это правила, меры и усилия, направленные на защиту системы изнутри, от локальных пользователей.
ОС Linux является полноценной многопользовательской системой с простой
и распределенной архитектурой. Архитектура ОС Linux приведена на рисунке
2.1.
Рис. 2.1. Структура операционной системы Linux
Linux является многопользовательской системой, и тот факт, что в систему могут иметь одновременный доступ огромное число людей, как доверенных, так и нет, представляется более чем очевидным.
Зачем же необходимо обезопасить систему от локальных пользователей?
Для ответа на этот вопрос сначала рассмотрим, что представляется возможным пользователю, который имеет доступ в систему.
- После входа в систему пользователю выделяется определенная часть машинных ресурсов (дискового пространства, оперативной памяти, процессорного времени и так далее). Хорошо, если ОС изначально настроена на правильное разделение ресурсов. А если нет? Достаточно одному пользователю запустить пару-тройку «тяжелых» программ, как время ожидания для других программ даже на мощной машине может выйти за грань допустимого.
- Существуют программы, которые должен запускать только суперпользователь (пользователь root). Обычно с помощью этих программ осуществляется настройка системных параметров операционной системы, неправильная конфигурация которых может отрицательно отразиться на ее работоспособности. Случайный запуск такой программы обычным пользователем может привести к фатальным последствиям для всей системы в целом.
- «Гуляя» по дереву каталогов на жестком диске, пользователь может попасть в ту часть, в которой ему быть не положено (например, в каталог, где хранятся файлы других пользователей). Личные файлы каждого пользователя должны быть доступны ему и только ему, если, конечно, он сам не решит иначе.
Перечисленные примеры – это лишь малая часть. Иногда, даже сам этого не осознавая, неопытный пользователь может представлять потенциальную угрозу, если ему предоставить неограниченные права. К тому же сама порядочность пользователя – это роскошь, которую в современном мире может себе позволить не каждый.
Теперь рассмотрим, какие же средства предоставляет система Linux для обеспечения локальной безопасности.
2.1. Пользователи и пароли
Пользователь – это человек, пользующийся ресурсами и возможностями, которые ему предоставляет тот или иной сервис. Пользователь не обязан знать все аспекты функционирования этих сервисов, все, что ему необходимо знать – это как пользоваться ими.
В Linux каждый пользователь имеет свой уникальный числовой
идентификатор, по которому он идентифицируется в системе. Этому
идентификатору для более удобной работы соответствует имя пользователя.
Например, для привилегированного пользователя root зарезервирован нулевой
идентификатор.
Все имена пользователей Linux и соответствующие им идентификаторы хранятся в специальном файле passwd. Этот файл располагается в каталоге etc, который, в свою очередь, находится в корневом каталоге системы /. Файл имеет обычную текстовую форму.
Пример файла пользовательских имен passwd. root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync mail:x:8:12:mail:/var/spool/mail:/sbin/nologin uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
Каждая запись в этом файле разделена двоеточиями на 7 частей:
1. Имя пользователя. Это поле содержит имя пользователя. Для операционной системы не важно, какое имя имеет пользователь, система ориентируется на идентификатор, а имя играет, пожалуй, только информационное значение для человека, работающего в системе.
2. Поле пароля. Это поле в ранних версиях Linux содержало зашифрованный пароль, а теперь, когда была введена технология теневых паролей, в этом поле просто ставится x. Практического применения это поле не имеет.
3. Идентификатор пользователя (UID). В системе Linux каждый пользователь имеет уникальный идентификационный номер, который однозначно определяет его в системе. Этот номер используется в различных целях, например, при установке прав доступа на файлы. Права доступа будут рассмотрены в следующем разделе.
4. Идентификатор группы, к которой принадлежит этот пользователь (GID).
Концепция групп будет рассмотрена в следующих разделах.
5. Поле комментария. В этом поле может храниться любая дополнительная информация о пользователе, например, его полное имя.
6. Полный путь к домашнему каталогу пользователя. В ОС Linux для
каждого пользователя создается его домашний каталог, в котором он может
хранить свои документы. Обычно эти каталоги располагаются в директории
/home корневого каталога и по умолчанию имеют имена владельцев.
7. Путь к командной оболочке. Последнее поле содержит полный путь к
рабочей оболочке пользователя (по умолчанию такой оболочкой является bash).
Эта оболочка запускается, когда пользователь проходит процедуру
аутентификации. В целях безопасности для системных пользователей в этом
поле очень часто ставится /sbin/nologin. В приведенном примере пользователь
bin имеет как раз такое значение в поле командного интерпретатора. Сама по
себе программа nologin не является оболочкой, единственное ее назначение –
не допустить вход в систему. Поэтому при попытке входа под именем
пользователя, у которого в качестве рабочей оболочки установлена
/sbin/nologin, ничего не происходит. Обычно такой подход используется при
создании пользователей, которые являются системными, то есть от имени
которых выполняются какие-то действия внутри системы. А поскольку таким
пользователям не нужна рабочая оболочка, хорошим решением, с точки зрения
безопасности, будет установка поля оболочки в /sbin/nologin. Еще одним
распространенным решением в таких ситуациях является установка этого поля в
значение /bin/false. Как известно, в Linux, да и в большинстве других
операционных систем, успешное завершение программы определяется типом
возвращаемого значения. Если возвращается нулевое значение, выполнение
программы прошло успешно, если ненулевое – в процессе выполнения программы
возникли ошибки. На основе возвращаемого значения система аутентификации
делает вывод о том, пройдена ли аутентификация успешно или она
«провалилась». false – программа, которая независимо от внешних факторов
всегда возвращает значение, отличное от нуля, что в данном случае означает
возникновение ошибок при запуске оболочки, и управление снова возвращается
системе аутентификации.
При входе в систему программа, предоставляющая доступ, производит
чтение информации о пользователях как раз из файла passwd. Право на запись
в этот файл имеет только привилегированный пользователь root, читать же его
могут все пользователи системы (права доступа описываются в разделе
«Особенности файловой системы Linux»).
Этот файл никогда не редактируется вручную, хотя, в принципе, это вполне допустимо. Обычно для редактирования файла пользователей используют специальные программы: useradd, usermod и userdel.
Программа добавления useradd позволяет добавить нового пользователя в
систему. Для управления процессом создания пользователя эта программа может
принимать различные параметры в командной строке. Например, параметр –s
задает используемый пользователем shell, а параметр –g – группу, к которой
принадлежит создаваемый пользователь. Помимо добавления записи о
пользователе в файл /etc/passwd, программа useradd создает домашний каталог
пользователя, который по умолчанию должен размещаться в директории /home.
Путь к пользовательскому каталогу может быть определен с помощью параметра
–d, за которым следует полный путь от корневого каталога до каталога
пользователя.
Программа usermod позволяет изменять такие параметры, как рабочая оболочка пользователя, домашний каталог, группа, идентификатор пользователя и так далее.
Нетрудно догадаться, что выполняет программа userdel. Она удаляет пользователя из системы. Подробная информация об этих программах содержится в соответствующих man-руководствах.
Имя пользователя не является секретной информацией, и его могут без проблем узнать другие пользователи системы. Но в таком случае должна существовать опасность входа одного пользователя под именем другого. Однако этого не происходит. Используется такое понятие, как аутентификация.
Аутентификация – это установление подлинности пользователя, то есть установление факта того, что пользователь с таким именем является именно тем, за кого себя выдает.
Для аутентификации в ОС Linux используется уже давно проверенное и доказавшее свою надежность средство – пароль.
Пароль – это набор символов (секретное слово), известный только его владельцу и используемый для удостоверения его подлинности.
Каждый пользователь в системе имеет свой собственный пароль. Наличие
пароля – необходимая составляющая политики безопасности пользователей
Linux. Пароль является как бы пропуском пользователя в систему. Без пароля,
зная только имя пользователя, проникнуть в систему невозможно.
Пароли хранятся в отдельном файле /etc/shadow. В ранних версиях Linux имена и пароли пользователей хранились в одном файле /etc/passwd. Но практика показала, что для обеспечения более надежной защиты паролей необходимо создание отдельного файла для их хранения. Таким образом, технология выделения отдельного файла shadow для хранения паролей получила название технологии «теневых паролей».
Пример файла и его структура приведены ниже. root:$1$pOy8fNrf$uOh/dQlI03BMIdEAhWrE.0:12369:0:99999:7::: bin:*:12245:0:99999:7::: daemon:*:12245:0:99999:7::: sync:*:12245:0:99999:7:::
Файл shadow, как и файл passwd, разделен на несколько частей двоеточиями:
1. Имя пользователя. Это поле просто дублируется из файла passwd.
2. Хэш пароля. Пароль в Linux никогда не хранится в открытом виде, в
отличие от имени пользователя. При установке пароля до сохранения его в
файле он шифруется по специальному алгоритму. По умолчанию таким алгоритмом
является алгоритм одностороннего шифрования DES (Data Encryption Standard).
Использование одностороннего алгоритма шифрования исключает возможность
расшифровки пароля.
Остальные поля содержат различную служебную информацию.
Файл паролей имеет права только на чтение и только для суперпользователя (права доступа описываются в разделе «Особенности файловой системы Linux»). Его содержимое является недоступным для рядовых пользователей, таким образом, исключается возможность раскрытия зашифрованного пароля.
Для изменения пароля в Linux изначально включена специальная программа passwd. В качестве параметра в командной строке она получает имя пользователя и при запуске требует ввода пароля для этого пользователя. При вводе в целях безопасности пароль не отображается на экране монитора, существует очень высокая вероятность допустить ошибку, особенно когда пароль состоит из цифр и символов различного регистра. Поэтому ввод пароля осуществляется 2 раза для проверки правильности ввода. После подтверждения пароль шифруется и сохраняется в файле /etc/shadow.
При входе в систему процедурой получения имени и пароля пользователя
управляет программа mingetty. mingetty – это программа, выдающая
приглашение для ввода имени пользователя и пароля на виртуальную консоль.
После ее запуска на экране монитора появляется строка-приглашение ко вводу
имени и пароля пользователя. После ввода имени и пароля программа передает
управление программе login. login – это программа-посредник, которая
осуществляет проверку существования, корректности и соответствия имени
пользователя и его пароля в системе. Пароль с помощью механизмов
аутентификации шифруется и сравнивается с хэшем из файла. После успешного
завершения процедуры аутентификации программа login запускает системную
оболочку для взаимодействия пользователя с операционной системой, так
называемый shell (от англ. shell – «оболочка»). Путь к исполняемому файлу
shell указывается в последнем седьмом поле записи файла passwd. Обычно по
умолчанию используется bash (Bourne Shell). Выдается приглашение ко вводу
команд с символом # или $ в конце (по умолчанию символ # используется в
приглашении суперпользователя, а символ $ - в приглашении обычного
пользователя). С этого момента система готова принимать от пользователя
команды на выполнение.
Для более удобного управления доступом к ресурсам в Linux все пользователи объединяются в группы. В данном случае группа – это множество пользователей, объединенных по каким-либо критериям.
К какой группе принадлежит пользователь, говорит 4 поле регистрационной записи в файле passwd. Наличие групп позволяет создать гибкую политику безопасности, основанную на разделении доступа к ресурсам. Значение групп для разделения доступа более подробно описывается в разделе «Особенности файловой системы Linux».
Практическое применение рассмотренной информации приводится в приложении в примере 1.
2.2. Особенности файловой системы Linux
Для организации и постоянного хранения информации на различных ее носителях ОС использует так называемую файловую систему.
Файловая система – это методы и структуры данных, которые используются
ОС для хранения файлов на диске или в его разделе.
У каждой ОС имеется своя файловая система, отличная от всех других. От надежности, эффективности и безопасности работы файловой системы во многом зависит качество функционирования ОС в целом.
В настоящее время во всех дистрибутивах ОС Linux для хранения
информации активно используется файловая система ext2 (The Second Extended
File System). Ext2 является файловой системой с богатыми функциональными
возможностями, а тот факт, что ext2 была разработана специально для Linux,
уже говорит о необходимости присутствия в ней средств контроля и
безопасности.
Основные характеристики файловой системы ext2: максимальный объем файловой системы – 4 Тбайт; максимальная длина файла – 2 Гбайт; максимальная длина имени файла – 255 символов; присутствует поддержка трех ячеек времени изменения файла; также имеется возможность расширения файловой системы; присутствуют механизмы защиты информации и возможность изменять размер блока.
2.2.1. Права доступа
Рассмотрим ситуацию, когда пользователь А для хранения очень важных
документов использует свой домашний каталог. Информация, хранящаяся в
документах, является строго конфиденциальной, а по сему никто, кроме ее
владельца, не должен получить к ней доступ. Пользователь В просто из
любопытства, а может и со злобными намерениями, сделал попытку получить
содержимое этих документов. Результатом попытки явилась ошибка с описанием
‘permission denied’ (‘доступ запрещен’). Появлением ошибки послужило
отсутствие у пользователя B прав на чтение документов, принадлежащих
пользователю А. Из приведенного примера можно сделать вывод, что права
доступа позволяют ограничить доступ к определенной информации, или, проще
говоря, оградить некоторую информацию от определенных пользователей.
Концепция файловой политики безопасности Linux строится на том, что любой файл системы имеет 3 категории владельцев: собственно владельца файла или, проще говоря, его создателя, какую-либо группу пользователей, в которую чаще всего входит владелец файла, и всех остальных. Таким образом, привилегированный пользователь или владелец файла, поскольку только он имеют возможность изменять права доступа, может построить политику файловой безопасности, определяя права отдельно для владельца файла, для группы пользователей и для всех остальных пользователей системы.
Права доступа к файлу или каталогу описываются тремя восьмеричными цифрами, самая левая из которых – права доступа владельца, средняя – права группы, правая – права доступа для всех остальных. Каждая из этих восьмеричных цифр представляет собой битовую маску из 3-х бит. Эти биты отвечают за право на чтение, запись и исполнение файла или каталога. Если бит установлен в 1 – операция разрешена, если в 0 – запрещена.
Для различных типов файлов значения прав доступа немного отличаются.
Право на чтение файла позволяет пользователю читать содержимое файла.
Для каталога установка права на чтение позволяет читать файлы, находящиеся
в этом каталоге.
Право на запись файла позволяет пользователю изменять его содержимое.
Для каталога - создавать файлы внутри каталога.
Право на выполнение для файла позволяет запускать файл на выполнение в качестве программы. Для каталога установка этого права дает возможность пользователю входить в каталог и просматривать его содержимое.
Какие права доступа определены для каждого файла, можно узнать, набрав
в терминале команду ls с ключом –l:
[root@app tmpdir]# ls –l
lrwxrwxrwx 1 root users 86 Фев 7 19:49 linkfile -> myfile
drwxr-xr-x 1 root users 4096 Фев 7 19:49 lnk
-rwxr----- 1 anotheruser users 97 Фев 7 19:48 myfile1
-rw-rw-r-- 1 root users 84 Фев 7 19:45 myfile2
В первой колонке представлены права доступа к файлу. Эта колонка содержит 10 символов. Первый из них слева говорит о том, к какому типу принадлежит файл, то есть является ли он файлом, каталогом, ссылкой и так далее. Далее слева направо представлены права доступа соответственно для владельца, для группы, и в конце – для всех остальных. Вторая колонка отображает количество жестких ссылок для этого файла. Третья указывает на имя владельца файла, четвертая – на имя группы-владельца, пятая колонка – размер файла, шестая – дата создания файла, седьмая - имя файла.
Как видно из примера, linkfile является символической ссылкой на файл
myfile. Об этом говорит буква l в самой левой части колонки прав доступа.
Для символических ссылок задание прав доступа возможно, но вряд ли имеет
смысл. Дело в том, что символическая ссылка указывает на файл, который
имеет свои права доступа, поэтому при доступе по символической ссылке
проверяются права конечного файла. Файл lnk является каталогом, о чем
говорит буква d в поле прав доступа. Поле владельца говорит о том, что
владельцем каталога является пользователь root, а группа-владелец – users.
Владелец имеет право на чтение файлов в каталоге, запись файлов и чтение
содержимого каталога. Буква r (от слова Read) говорит о возможности для
данного пользователя выполнять операции чтения файлов каталога, буква w (от
слова Write) – о возможности записи файлов в каталог, последняя буква x (от
слова eXecute) дает право на просмотр содержимого каталога. Пользователи,
входящие в группу users, имеют право только на чтение файлов этого каталога
и на получение его содержимого (буквы r и x), право на запись файлов в этот
каталог у них отсутствует. Все остальные пользователи имеют те же права
доступа, что и группа-владелец. Последние два файла myfile1 и myfile2
являются обычными файлами. Файл myfile2 имеет права чтения и записи для
владельца (пользователя root) и группы users, все остальные имеют право
только читать файл. Файл myfile1 имеет права на чтение, запись и выполнение
для владельца, коим в данном случае является пользователь anotheruser.
Группа users имеет право только на чтение этого файла, а все остальные
пользователи вообще не могут выполнять какие-либо действия с этим файлом.
Изменение прав доступа к файлу осуществляется при помощи стандартной
системной команды chmod. Права доступа при вызове команды могут задаваться
как битовой маской в десятичном представлении, так и при помощи символов.
Подробно использование этой команды описано на соответствующей man-
странице.
Помимо прав доступа существуют так называемые модификаторы доступа. К модификаторам доступа относятся Sticky bit, SUID и SGID.
Sticky bit (S). Для файлов установка этого модификатора в современных дистрибутивах потеряла свое значение. Установка Sticky bit для каталога позволяет пользователю записывать файлы в этот каталог, но удалять из этого каталога он может только те файлы, владельцем которых он является, или в том случае, если ему явно заданы права записи.
SUID (s). Если файлу установлен модификатор доступа SUID и файл
исполняемый, то файл при запуске на выполнение получает не права
пользователя, запустившего его, а права владельца файла. Такие приемы
используются для того, чтобы пользователь мог работать с некоторыми
системными файлами, владельцем которых является привилегированный
пользователь. К примеру, для того, чтобы пользователь мог самостоятельно
изменить свой пароль при помощи программы passwd, у этой программы,
владельцем которой является пользователь root, должен быть установлен бит
SUID, поскольку она работает с файлом shadow, модификацию которого имеет
право производить только пользователь root.
SGID (s). Если файл имеет модификатор доступа SGID, то это аналогично
установке бита SUID, только вместо владельца файла используется группа,
которой принадлежит файл. В случае установки SGID для каталога файлы,
содержащиеся в этом каталоге, будут иметь установки группы такие же, как у
каталога.
[root@app mydir]# ls –l
-rwsr--r-x 1 anotheruser users 97 Фев 7 19:48 myfile1
В приведенном примере видно, что файл myfile1 имеет установленный бит
SUID. При запуске файла любым пользователем системы (права на выполнение
установлены для всех) файл будет выполнять действия от имени его владельца,
в данном случае от имени пользователя anotheruser.
Модификаторы доступа при правильном использовании представляют очень мощное и гибкое средство. С другой стороны, неправильная настройка системы с использованием этих модификаторов может свести все действия по обеспечению безопасности к нулю. Особенно опасной представляется ситуация, когда тот же SUID установлен на исполняемый файл, принадлежащий привилегированному пользователю. При выполнении файла запустивший его пользователь получает право выполнять операции, доступные только пользователю root. Если даже файл не выполняет никаких системных операций и не работает с системными файлами, неправильное его использование может привести к очень неприятным последствиям.
Практическое применение рассмотренной информации приводится в приложении в примере 2.
2.2.2. Атрибуты файлов
В файловой структуре операционной системы всегда есть файлы, которые не должны изменяться в процессе функционирования системы, например, исполняемые файлы или файлы, которые должны быть откорректированы только однажды при настройке системы и не должны изменяться впоследствии, примером могут служить конфигурационные файлы. Есть и такие, которые могут быть дополнены, но не могут быть удалены или перезаписаны. Наличие средств, гарантирующих выполнение перечисленных условий, позволяет очень сильно повысить безопасность файловой системы, сохранив первоначальную целостность данных при различных типах атак.
Начиная с версии ядра 1.1, в файловой системе Linux помимо прав доступа
присутствует поддержка расширенных атрибутов файлов. В последних версиях
ядра 2.4 присутствует поддержка следующих атрибутов:
. Atime (A). Каждый раз, когда система обращается к файлу, происходит изменение ячейки времени последнего обращения к файлу. Установка атрибута atime позволяет избежать обновления времени последнего обращения и увеличить производительность файловой системы, особенно в тех случаях, когда обращения к файлам происходят очень часто. Однако, отсутствие времени последней модификации файла представляет угрозу изменения файла без последующей регистрации этого действия, что может угрожать безопасности.
. Sync (S). Установка атрибута sync позволяет сразу фиксировать все изменения, происходящие с файлом, на жестком диске синхронно с процессом, который осуществляет эти изменения. Это обеспечивает более безопасную работу, но может также снизить производительность из-за прямой постоянной записи на диск.
. Append (a). Этот атрибут позволяет открывать файл только с целью его дополнения. Усечение или перезапись файла запрещается. Для каталога установка этого атрибута означает, что удалять файлы, содержащиеся в этом каталоге, запрещено, хотя создание новых и модификация существующих возможны.
. Immutable (i). Файл с установленным атрибутом immutable не может подвергаться никаким изменениям вообще. Если установить этот атрибут для каталога, процессы смогут модифицировать файлы, находящиеся в нем, но не смогут создавать или удалять файлы. Для обеспечения безопасности имеет большое значение.
. No Dump (d). Установка атрибута no dump дает указание процессу, осуществляющему создание дампа, игнорировать этот файл и не включать его в создание резервной копии.
. Compress (c). Этот атрибут позволяет производить прозрачное сжатие файлов перед записью их на диск. При доступе к файлу он декомпрессируется и конечному процессу представляется уже в нормальном виде.
. Secure Deletion (s). Если этот атрибут установлен, то при удалении файла все блоки, в которых он располагался, заполняются нулями, то есть производится полное удаление файла, а не только его дескриптора.
. Undelete (u). При удалении файла с этим атрибутом система сохраняет все блоки файла на диске, что позволяет при желании восстановить удаленный файл.
Последние версии ядер, начиная с 2.4, игнорируют значения последних трех атрибутов: compress, secure deletion и undelete. Разработчики посчитали, что их дальнейшее использование не имеет смысла.
Для изменения и просмотра установленных атрибутов в стандартный системный пакет Linux входят две программы chattr и lsattr. Первая позволяет изменять атрибуты, добавлять или снимать их, вторая позволяет получить список установленных атрибутов. Пример работы програ