Брандмауэры и специальное программное обеспечение 8 Часть 4
Вид материала | Реферат |
- Муниципальное общеобразовательное учреждение средняя общеобразовательная школа №12, 174.77kb.
- Управление экономикой и создание экономических информационных систем Изучив данную, 148.93kb.
- Программное обеспечение ЭВМ, 209.59kb.
- Программное обеспечение вычислительной системы, 824.71kb.
- Учебная программа (Syllabus) Дисциплина: Интерфейсы компьютерных систем (iks 3304), 321.31kb.
- Реферат по Информационной безопасности Тема: «Антивирусы», 711.1kb.
- Пк программный комплекс; по программное обеспечение; ппо прикладное программное обеспечение, 208.41kb.
- Лекция 4 Обеспечивающие подсистемы асу. Математическое, программное, лингвистическое,, 59.3kb.
- Математическое и программное обеспечение систем оперативной оценки характеристик сложных, 247.51kb.
- Учебная программа (Syllabus) Дисциплина «Инструментальные средства разработки программ», 374.12kb.
Взлом паролей
Один из способов проверки безопасности системы подразумевает, что вы ставите себя на место злоумышленника и пытаетесь думать и действовать так, как действовал бы человек, пытающийся нарушить вашу защиту. Это означает, что вы прогуливаетесь среди пользователей, подсматривая, не прикреплен ли к какому-нибудь монитору записанный пароль, не оставил ли кто-нибудь на столе бумажку с записанными на ней идентификационными данными, или же «проходите мимо» как раз в то утреннее время, когда пользователи входят в систему (быть может, удастся заметить, как кто-нибудь из них будет набирать пароль на клавиатуре).
Это также означает, что вы должны обращать внимание на ориентацию монитора пользователя, имеющего доступ к чувствительной информации, дабы выяснить, видна ли она кому-нибудь еще. Далее, когда эти пользователи отлучаются от своего рабочего места, запускают ли они заблокированную паролем программу-заставку (screen saver), а может, выходят из системы или же не делают ничего?
СОВЕТ
Однако наилучший способ проверить на прочность систему парольной безопасности и отношение пользователей к ней — попытаться взломать пароли пользователей. Регулярное выполнение программы взлома паролей способно дать достаточно хорошую оценку крепости вашей системы парольной защиты.
Хороших программ для взлома паролей написано множество, и все время появляются еще более развитые программы. Тем не менее, какой бы хорошей не была программа, взлом паролей всегда связан со значительными вычислительными и временными затратами, поэтому лучше заниматься этим ночью, когда вычислительная нагрузка на систему со стороны пользователей достигает своего минимума.
Заключение
В этой главе было продолжено рассмотрение вопросов безопасности, имеющих отношение к пользователям и группам. Сначала было рассказано о двух схемах членства пользователей в группах: группа по умолчанию и частные группы пользователей. Затем я рассказал о том, как сменить группу входа в систему и как выполнить подстановку пользователя. После чего были рассмотрены вопросы безопасности пользователей, в том числе как лучше всего защитить пользователей от самих себя и от других пользователей, обеспечив при этом требуемые возможности по доступу к файлам. Наконец, была затронута тема паролей и рассказано, какие пароли следует считать хорошими, а какие — плохими. Материал этой главы логически продолжает изложенное в первой главе. Вместе эти две главы дают сведения, необходимые для понимания материала следующих двух глав.
3 Файлы и права доступа
В данной главе рассматриваются следующие вопросы:
- какую роль файлы играют в операционной системе Linux;
- типы файлов;
- права доступа к файлам;
- настройка прав доступа по умолчанию;
- изменение прав доступа.
В этой главе рассказывается о файлах как таковых и о правах доступа к ним в частности. В ней продолжается разговор о пользователях и группах, начатый в главах 1 и 2, и рассматривается их связь с файлами и правами доступа.
Linux: файловая система
Linux — это файловая система. И потому все устройства, имеющиеся в вашей Linux-системе — принтеры, дисководы, жесткие диски и т. д., — представляются в ней в виде файлов. В результате все, что можно сделать с файлом, можно сделать и с устройством. Как и в файл, в устройство можно передавать информацию при помощи программ или каналов и аналогичным же образом получать информацию из него. Получение информации из устройства не имеет особого смысла для устройств типа принтера, который может только принимать файлы для печати. Тем не менее и экрану, на который вы смотрите, и остальным устройствам (модему, принтеру, жесткому диску, разделам диска и т. д.), каждому из них в Linux соответствует свой файл.
Управляет всем этим хозяйством ядро системы. Когда кто-то запрашивает доступ к устройству, ядро определяет, обладает ли запрашивающая сторона правами доступа к соответствующему файлу устройства. При этом происходит анализ
идентификаторов пользователя (UID), запросившего доступ, и идентификаторов всех групп (GID), к которым принадлежит данный пользователь. На основании этого анализа выносится вердикт, разрешить запрошенный доступ или нет.
Типы файлов
В Linux имеется несколько различных типов файлов. О них и пойдет речь далее. После чего мы обсудим этот вопрос с точки зрения безопасности.
Выполнив команду ls -la, можно получить много разнообразной информации о файлах каталога, в том числе и о том, к какому типу принадлежит тот или иной файл. Рассмотрим список файлов некоего каталога, в котором содержатся файлы различных типов:
drwxr-xr-x 24 root root 2048 Sep 4 00:01 .
drwxr-xr-x 20 root root 1024 Aug 26 19:09 ..
drwxr-xr-x 3 root root 1024 Jul 22 22:17 .civctp
crw-rw-r-- 1 root root 29, 0 Aug 5 09:12 fbO
brw-rw-rw- 1 root root 2, 0 Jul 27 19:14 fdO
-rw-r--r-- 1 root root 694 Sep 2 21:02 foo
srwxrwxrwx 1 root root 0 Sep 3 19:18 mysql.sock
prw------- 1 root root 0 Sep 3 19:14 initctl
lrwxrwxrwx 1 root root 4 Aug 5 08:49 sh -> bash
Обратите внимание на самый левый столбец. В этом столбце содержатся символы d, d, d, с, b, -, s, p, l. Каждый из этих символов соответствует определенному типу файла (см. табл. 3.1). Символ «d» обозначает каталог (от английского слова «directory»). Каталоги тоже являются файлами, однако некоторые файловые операции для них просто не имеют смысла и потому не приводят к ожидаемым результатам. Самые первые два каталога списка, то есть каталоги с именами «.» и «..», имеют предопределенное значение. Точка всегда соответствует текущему каталогу, две точки — родительскому каталогу. Исключением является корневой каталог (/), для которого имя «..» соответствует ему самому, а не каталогу верхнего уровня. Подкаталог с именем «..» присутствует в каждом каталоге файловой системы Linux, благодаря чему для перемещения вверх по дереву каталогов всегда можно использовать простую команду «cd ..». Два специальных каталога с именами «.» и «..» можно рассматривать как ссылки, более того, они ими и являются. Так как эти два каталога являются ссылками, то эти ссылки можно разорвать. В этом случае команда cd .. будет вести себя так же, как и для корневого каталога, то есть при ее выполнении вы останетесь в том же каталоге, в котором и были. Для осуществления низкоуровневых операций над диском, которые невозможно выполнить обычными средствами, можно воспользоваться программой debugfs. В частности, эту программу можно использовать для разрыва ссылки «..», однако следует помнить, что многие программы и сценарии полагаются на эту ссылку, так что действовать нужно обдуманно.
ВНИМАНИЕ
Разрыв ссылки может иметь далеко идущие последствия. Поэтому не делайте этого, если вы не до конца понимаете, к чему могут привести ваши действия.
Таблица 3.1. Типы файлов
Обозначение типа Тип Примеры
Обычный файл Файлы данных, текст, программы
d Каталог /bin
b Блочное устройство /dev/hda (первый жесткий диск
на первом IDE-интерфейсе)
с Символьное устройство /dev/ttyS1 (аналог com2 в DOS)
s Сокет /dev/log
р Именованный канал (named pipe) /dev/inictl (именованный эквивалент
операции «|»)
I Символическая ссылка /dev/modem -> /dev/ttyS1
Но вернемся к списку файлов. В нем присутствует еще один каталог, в начале имени которого стоит символ точки (.). Информация о файлах, имена которых начинаются с точки (по-английски их называют dot files), при обычном запуске команды ls не отображается. Чтобы получить информацию о таких файлах, необходимо в командной строке ls указать ключ -а. В остальном это вполне обычные файлы, большинство которых являются файлами конфигурации. Информация об этих файлах скрывается не из соображений безопасности, а для удобства. Как правило, такие файлы являются служебными (их используют многие программы, например командная оболочка bash), поэтому обычные пользователи напрямую с ними не работают. Чтобы эти файлы лишний раз не отвлекали внимание обычных пользователей, операционная система скрывает их, отображая информацию о них только тогда, когда это действительно нужно. Однако не стоит использовать этот механизм для того, чтобы утаить что-либо от пользователей. Если вы хотите блокировать доступ к какому-либо файлу, лучше использовать для этой цели соответствующую конфигурацию разрешений на доступ.
Следующие два файла (помеченные буквами с и b) являются файлами устройств. Первое устройство является символьным, второе — блочным. Традиционно все файлы устройств располагаются в каталоге /dev. При желании, однако, их можно хранить и в другом месте, например, на гибком диске или в оперативной памяти (на виртуальном диске). Когда ядро получает запрос на использование файла устройства, оно сначала узнает из информации о файле, какой драйвер (модуль) управляет этим устройством, после чего данный драйвер используется для работы с устройством в соответствии с правами доступа, назначенными файлу этого устройства. Различие между символьными и блочными устройствами заключается в том, что символьные устройства передают данные последовательно, символ за символом, тогда как блочные устройства передают данные параллельно, обычно 8 байт за раз, и не посимвольно, а целыми блоками.
Тут вы должны были бы насторожиться. Если доступ к устройству осуществляется через файлы, то выходит, что любой пользователь может создать файл устройства, например, в своем домашнем каталоге или на гибком диске и смонтировать его. Таким образом он получит это устройство в полное свое распоряжение. Совершенно верно. Поэтому крайне не рекомендуется разрешать обычным пользователям бесконтрольно создавать и монтировать файлы устройств. На самом деле не все так просто. Файлы устройств считаются специальными, поэтому только пользователь root (иначе говоря, обладатель нулевого идентификатора пользевателя) может выполнять предназначенную для создания файлов устройств программу mknod. Таким образом, от вас требуется обеспечить, чтобы никто не смог смонтировать раздел (на жестком диске или просто гибкий диск), содержащий активные файлы устройств. Хорошей мерой предосторожности является также проверка наличия файлов устройств в подкаталогах каталога /home. Для этой процедуры можно использовать следующие две строчки:
find /home -type b -print
find /home -type с -print
ССЫЛКА
Подробней о монтировании файловых систем рассказывается в главе 5.
На самом деле вопрос, нужны ли обычному пользователю файлы устройств в его домашнем каталоге, является спорным. Настолько спорным, что вам обязательно следует обсудить его с пользователями, в домашних каталогах которых обнаружились эти файлы.
Следующий файл, с типом «-», является обычным файлом. К категории обычных файлов относится большинство файлов в системе Linux. В эту категорию входят исполняемые файлы, файлы данных или файлы с текстовым содержимым (обыкновенные текстовые файлы ASCII, файлы сценариев, многие конфигурационные файлы и т. п.).
В следующей строке листинга показан файл типа «s», то есть сокет. В данном случае это сокет программы mysql Среди сведений, выводимых на экран по команде netstat -а, можно обнаружить следующую строку:
unix О [АСС] STREAM LISTENING 12210 /tmp/mysql.sock
Таким образом вы можете убедиться в том, что это действительно активный сокет, через который программа ожидает поступления данных (сокет относится к категории LISTENING). Подробней о сокетах рассказывается в следующих главах книги.
ССЫЛКА
Команда netstat обсуждается в главе 10.
После сокета размещается информация о файле, являющимся именованным каналом (named pipe). Файлы этого типа обозначаются символом «р». Назначение именованного канала точно такое же, как и у любого другого канала: он передает данные, выводимые одной программой, на вход другой программы.
Последний файл листинга является символической ссылкой (symbolic link). Символическую ссылку иногда называют мягкой ссылкой (soft link). Файл символической ссылки — это указатель, который указывает на другой файл или каталог. Файл, на который указывает ссылка, называется целевым файлом (target file). Содержимое самого целевого файла в файле символической ссылки не хранится, файл символической ссылки содержит в себе только сведения о том, в каком месте файловой системы расположен целевой файл. Поэтому удаление целевого файла оставляет все указывающие на него символические ссылки в подвешенном состоянии, поскольку они более никуда не указывают. Файл символической ссылки всегда создается без каких-либо ограничений на доступ, однако при работе с символической ссылкой используются права на доступ к файлу, на который указывает эта ссылка. Для Macintosh приблизительным аналогом символической связи является псевдоним (alias), а для Windows — ярлык (shortcut).
ПРИМЕЧАНИЕ
На диске информация о файле хранится в блоке, называемом индексным дескриптором или inode (information node). Файл принадлежит каталогу, если номер его индексного дескриптора встречается среди номеров индексных дескрипторов, перечисленных в файле каталога. Индексный дескриптор содержит всю важную информацию о файле, такую как номер индексного дескриптора, тип файла, права доступа, номер версии, идентификаторы группы и пользователя, размер, время последнего доступа (atime), время создания (ctime), время модификации (mtime), номера блоков, содержащих данные файла, и прочее. Содержимое индексного дескриптора можно посмотреть с помощью программы debugfs.
Кроме символической ссылки в Linux существует еще один похожий тип файлов, который называется «жесткая ссылка» (hard link) или просто ссылка (link). Понять смысл этой концепции поможет другой список файлов, содержащий информацию, выводимую при указании ключей -i и -I:
20512 -rwxr-xr-x 3 root root 49280 Jul 27 19:37 gunzip
20512 -rwxr-xr-x 3 root root 49280 Jul 27 19:37 gzip
20512 -rwxr-xr-x 3 root root 49280 Jul 27 19:37 zcat
Сведения, выдаваемые командой ls при указании этих ключей, практически идентичны предыдущим, только в данном случае слева появился новый столбец, в котором для всех трех записей указано число 20512. В этом столбце выводится номер индексного дескриптора (inode) файла. Индексный дескриптор — это место, в котором хранится вся важная информация о файле. Говоря иначе, в индексном дескрипторе хранится вся информация о файле, выводимая командой ls, а также другая важная информация. Обратите внимание, что три файла с различными именами обладают одним и тем же индексным дескриптором (в самом левом столбце стоит одно и то же число). Это означает, что три различных файловых имени на самом деле соответствуют одному и тому же файлу. Если посмотреть на размер файла, то можно убедиться, что во всех трех случаях он один и тот же, а именно 49 280 байт. Таким образом, команда ls выводит не список файлов каталога, а список принадлежащих каталогу ссылок на файлы. Файл же представляет собой некоторый набор данных, идентифицируемый при помощи номера индексного дескриптора (inode). Получается, что сам по себе файл не привязан к какому-либо каталогу и не обладает именем, однако на него может указывать одна или несколько ссылок, которые могут располагаться в разных местах файловой системы. Файл существует, пока есть хотя бы одна указывающая на него ссылка. Поэтому только удаление самой последней из всех указывающих на файл ссылок является действительно значимым и приводит к потере информации, содержащейся в этом файле. Число, содержащееся в столбце непосредственно слева от первого появления слова root, соответствует количеству ссылок, указывающих на файл. Например, если удалить файл zcat, то с файлами gunzip и gzip ничего не случится, однако вместо числа 3 в третьем столбце будет стоять число 2. На вновь созданный каталог всегда указывают две ссылки. Первая из них содержится в родительском каталоге. Вторая содержится в самом созданном вами каталоге. Эта ссылка обладает именем «.» и указывает на каталог, в котором она содержится. Если счетчик ссылок, указывающих на некоторый каталог, равен единице, значит, для этого каталога ссылка с именем «.» разорвана. Напомню, что помимо ссылки с именем «.» во вновь созданном каталоге автоматически появляется ссылка с именем «..», которая указывает на родительский каталог.
Жесткие ссылки ссылаются на номера индексных дескрипторов (inode), каждый из которых уникален в пределах одной файловой системы, поэтому жесткие ссылки не могут указывать на файл, расположенный в другой файловой системе или на другом разделе диска. Символические ссылки, напротив, могут указывать на файлы, располагающиеся в других разделах и на других дисках. Владельцем символической ссылки назначается создавший ее пользователь, но для определения прав на доступ используется набор разрешений целевого файла. Таким образом, хотя создать символическую ссылку, указывающую на файл, может любой пользователь, при использовании этой ссылки для доступа к целевому файлу система может отказать этому пользователю в доступе. Решение будет приниматься на основании набора разрешений целевого файла. Если у пользователя, обращающегося по ссылке, недостаточно прав для доступа к целевому файлу, ему будет отказано, хотя, повторюсь, сама символическая ссылка, то есть файл этой ссылки, не имеет никаких ограничений на доступ. При обращении по жесткой ссылке информация о правах на доступ к файлу и сведения о владельце файла извлекаются из индексного дескриптора файла.