Брандмауэры и специальное программное обеспечение



Pdf просмотр
страница8/42
Дата15.02.2017
Размер6.16 Mb.
Просмотров1429
Скачиваний0
ТипАнализ
1   ...   4   5   6   7   8   9   10   11   ...   42
Режим доступа по умолчанию
Каждый файл обязан иметь владельца, группу и режим доступа. Поэтому эти три элемента всегда по тем или иным правилам назначаются каждому создаваемому файлу. В нормальных условиях владельцем созданного файла назначается создавший его пользователь. В качестве группы, владеющей файлом, назначается группа входа в систему этого пользователя. Режим доступа к файлу, назначаемый ему по умолчанию, определяется при помощи значения umask (user mask) пользователя.
Значение umask — это восьмеричное число, которое конъюнктируется либо с числом 0777, либо с числом 0666 (в зависимости от типа файла), в результате получается набор разрешений на доступ, назначаемый создаваемому файлу по умолчанию. Для тех, кто не знаком с булевой арифметикой, приведу другую формулировку: значение umask, рассматриваемое как восьмеричное число, вычитается либо из
0777, либо из 0666, в зависимости от типа файла. Полученное в результате вычитания число и является начальными правами доступа к файлу.
Тип файла влияет на начальный режим доступа следующим образом: если команда file показывает, что созданный файл является бинарным исполняемым файлом, значение umask вычитается из 0777, для всех остальных файлов значение umask вычитается из 0666.
В OpenLinux при входе пользователя в систему выполняется файл из/etc/config.d/ shells (обычно это bashrc), который и устанавливает значение umask пользователя. Для суперпользователя это значение равно
022, для обычного пользователя — 002. Таким образом, бинарным исполняемым файлам, создаваемым суперпользователем, по умолчанию назначается режим 755 (rwxr-x-r-x), а всем остальным файлам назначается режим 644 (rw-r--r--). Бинарным файлам, создаваемым обычными пользователями, назначается режим 775 (rwxrwxr-x), а всем остальным файлам назначается режим 664 (rw-rw-r--). Узнать текущее значение umask можно, выполнив команду umask без аргументов. Для изменения значения umask нужно вызвать эту команду с новым значением в качестве аргумента (например, umask 222).
Изменение разрешений на доступ к файлу
Управлять доступом к файлу позволяют команды chown и chmod. Первая из них меняет владельца файла, а вторая — режим доступа к файлу. Изменять владельца файла и режим доступа к файлу может только пользователь, обладающий соответствующими правами на доступ к файлу или каталогу. Если у вас нет разрешения на запись в файл или каталог, вы не сможете применить к нему эти команды. Команда chown принимает в качестве аргументов имена владельца и/или группы, за которыми следует имя файла или каталога, для которого их надо установить. Имя группы отделяется от имени владельца точкой.
Например, допустим, что владельцем файла foo является пользователь silvia и что этот файл принадлежит группе silvia. Если вы намерены сделать владельцами этого файла пользователя root и группу gifs, вы должны выполнить следующую команду:
chown root.gifs foo
Если требуется изменить только имя владельца или группы, в команде можно указать только root или
.gifs.
Команда chmod меняет режим доступа к файлу. Как и при использовании предыдущей команды, если у вас нет доступа на запись в файл или каталог, вы не сможете изменить его режим. Режим файла можно задавать в восьмеричном представлении, о котором говорилось ранее. Например, если значение umask для вас равно 002, то созданный вами файл сценария изначально будет обладать режимом 664. Попытка выполнения такого файла приведет к сообщению об ошибке «permission denied» (разрешение отсутствует).
Вполне предсказуемый результат, поскольку файл сценария является не бинарным, а текстовым файлом, и потому разрешение на выполнение этого файла по умолчанию не назначается. Добавление права на выполнение означает изменение режима файла с 664 на 755 (rwxr-xr-x). Чтобы изменить режим указанным образом, следует выполнить команду:
chmod 755 filename
Иногда восьмеричное представление является не слишком удобным, например, если требуется изменить всего один бит режима. В таком случае можно воспользоваться другим способом настройки режима: для настройки режима в команде chmode указывается буква, оператор и еще одна буква.
Принцип здесь следующий: первая буква, а вернее буквы, задают, для кого следует изменить режим.
Для этой цели используются буквы из набора u, g, о, а, где и обозначает владельца, g — группу, о — всех остальных пользователей, а — все три категории. После этого указывается один из операторов: +, = или -.
Оператор + устанавливает указанный за ним бит, оператор - сбрасывает указанный за ним бит, а оператор
= сбрасывает все биты, кроме указанного. После оператора указывается модифицируемый бит (г, w или х).
Вернемся к примеру со сценарием. Если вы решили, что на самом деле вам нужен режим не 755, а 775, то добавить недостающий режим 020 можно командой:
chmod g+w filename
Этот метод позволяет устанавливать или сбрасывать лишь некоторые биты режима, оставляя остальные без изменений.
Заключение
В этой главе вы ознакомились с основами безопасности файлов в Linux. Вы узнали о типах файлов, разрешениях на доступ к файлам и о том, как их изменить. Вы также узнали, каким образом файлу назначается режим доступа по умолчанию и как этим управлять.
Следующая глава закрывает тему прав доступа к файлам, рассказывая о дополнительных правах, о которых не рассказывалось в данной главе.

Атрибуты SUID/SGID для файлов
и каталогов
4

В данной главе рассматриваются следующие вопросы:
- атрибуты SUID и SGID для файлов и каталогов;
- потенциальная опасность применения атрибутов SUID/SGID;
- контроль файлов с атрибутами SUID/SGID;
- изменение разрешений на доступ;
- специальные атрибуты файловой системы ext2;
- использование команды chattr;
- использование команды Isattr.
Помимо базовых атрибутов файлов и каталогов, определяющих конфигурацию разрешений на чтение, запись и выполнение, в файловой системе Linux используются некоторые дополнительные атрибуты, о которых будет рассказано в данной главе. Мы рассмотрим, для чего нужны эти дополнительные атрибуты, как устанавливать их с помощью команды chmod и в чем заключается опасность их использования с точки зрения безопасности.
После этого я расскажу вам об атрибутах, поддерживаемых только в файловой системе ext2, их назначении и модификации.
Атрибуты SUID/SGID
В главе 1 я рассказал вам о файле /etc/shadow, в котором содержатся хэширован-ные значения всех паролей системы. Чтение и модификация этого файла разрешаются только суперпользователю. Тем самым этот файл ограждается от посягательств злоумышленников, которые могут воспользоваться содержащимися в нем сведениями для получения реальных паролей системы. Кроме хэшированных паролей в этом файле хранится число дней, по истечении которых пользователю будет предложено сменить свой пароль. Однако если изменять этот файл дозволено только суперпользователю, то каким же образом обычный пользователь сможет изменить свой пароль? Очень просто. Атрибуты команды passwd таковы, что она всегда выполняется от имени суперпользователя и потому имеет полный доступ к файлу паролей.
При нормальных условиях исполняемый файл выполняется от имени вызвавшего его пользователя, то есть имеет те же самые привилегии или ограничения, что и пользователь. Однако если установить у исполняемого файла специальный атрибут, называемый SUID (Set User ID), то независимо от того, кто запускает программу, эта программа всегда будет выполняться от имени своего владельца.
Когда речь заходит о программах с атрибутом SUID, то, как правило, подразумеваются программы, выполняемые от имени суперпользователя, поскольку таково наиболее распространенное использование этого атрибута. Как правило, этот атрибут устанавливается для того, чтобы обычный пользователь мог запускать программы, которым для выполнения их функций необходимы привилегии суперпользователя.
Однако этот атрибут может понадобиться и обычному пользователю, как способ сделать доступной для остальных программу, которой иначе может пользоваться только он. Такими программами могут быть, например, средства доступа к персональным базам данных пользователя, которые этот пользователь желает сделать доступными для других пользователей.
Необходимо заметить: установка атрибута SUID в отношении файла сценария ничего не меняет.
Сценарий, как и прежде, будет выполняться от имени вызвавшего его пользователя, поскольку установка этого атрибута действует только для бинарных исполняемых файлов. Чтобы добиться SUID-эффекта для сценария, можно установить атрибут SUID на все вызываемые им программы или же вызывать их при помощи специальной программы-оболочки (которая легко пишется на языке С), обладающей атрибутом
SUID.
Помимо атрибута SUID есть схожий с ним атрибут SGID. Файл, для которого установлен этот атрибут, всегда выполняется от имени группы, которая обладает этим файлом. Для пользователя, который хочет сделать доступной для остальных свою личную программу, применение атрибута SGID зачастую оказывается лучшим решением, чем использование атрибута SUID.

Для каталогов атрибут SGID имеет иное значение. Обычно он устанавливается для каталога, содержащего файлы, используемые совместно несколькими пользователями. Если у каталога установлен атрибут SGID, то любому файлу, созданному в нем, в качестве группы-владельца назначается группа этого каталога, а не группа создавшего файл пользователя. Поэтому если установить этот атрибут у каталога с gif-файлами и сделать владельцем этого каталога группу gifs, то всем файлам, создаваемым в нем, в качестве владельца будет назначаться группа gifs. Если блокировать доступ к этому каталогу для всех остальных пользователей, за исключением владельца и группы, то размещенные в каталоге файлы будут доступны только пользователям, принадлежащим к группе gifs.
Последним атрибутом, который необходимо упомянуть, является так называемый «sticky bit»
(липкий бит). Устанавливается он аналогично атрибутам SUID и SGID, о чем будет рассказано далее. Для исполняемых файлов этот атрибут имеет скорее историческое, чем практическое значение: в прошлом он предписывал ядру выгружать завершившуюся программу из памяти не сразу же, а лишь спустя некоторое время, что позволяло избежать постоянной загрузки с диска наиболее часто вызываемых программ. Теперь же завершившаяся программа выгружается из памяти лишь тогда, когда возникает нехватка памяти, поэтому для Linux никакой смысловой нагрузки этот атрибут не несет (в некоторых других Unix-системах он используется, но для иных целей). Для каталога этот атрибут означает, что только владельцам дозволено изменять содержащиеся в нем файлы. Если пользователь не является владельцем файла, то изменить его он не сможет. Далее мы еще рассмотрим, где и как используется этот атрибут.
Опасность применения атрибутов SUID/SGID
Неразумное количество SUID-программ, разбросанных по всей системе, может привести к проблемам. Как говорилось ранее, для некоторых программ этот атрибут является действительно необходимым, поскольку без него обычные пользователи не смогут воспользоваться этими программами.
Однако список этих программ не должен содержать ничего лишнего.
В частности, в нем не должно быть программ, позволяющих пользователю выполнять произвольные команды или обращаться к командной оболочке. Как и у всякого правила, здесь могут быть свои исключения, но общий подход в данном случае следующий: если нет действительно весомых причин назначать некоторому файлу атрибут SUID, значит, делать этого не следует. Кроме того, вряд ли имеет смысл разрешать пользователям иметь SUID-программы в своих домашних каталогах.
Перечень SUID-файлов системы можно получить при помощи команды:
find / -perm +u+s -exec ls -l {} \:
В моей системе присутствуют следующие файлы SUID:
-r-sr-xr-x
I root root
2105164 Aug 30 07:25 /usr/local/bin/vmware
-
PWS
--
X
--
X
1 root root
606031 Jul 22 20:07 /usr/local/bin/ssh1
---S--X--X
1 root bin
1647592 Jul 25 13:34 /usr/local/bin/xlock
-rwsr-xr-x
1 root root
285151 Aug 21 17:23 /usr/local/sbin/mtr
-rwsr-xr-x
1 root root
17134 Aug 27 10:55 /usr/XllR6/bin/cardinfo
-
PWS
--
X
--
X
1 root root
7150 Jul 27 20:25 /usr/X11R6/bin/Xwrapper
-rwsr-xr-x
1 root root
177280 Jul 28 00:32 /usr/bin/lpq
-rwsr-xr-x
1 root root
235672 Jul 28 00:32 /usr/bin/lpr
-rwsr-xr-x
1 root root
171060 Jul 28 00:32 /usr/bin/lprm
-rwsr-xr-x
1 root root
14576 Jul 27 19:17 /usr/bin/rcp
-rwsr-xr-x
1 root root
10512 Jul 27 19:17 /usr/bin/rlogin
-rwsr-xr-x
1 root root
7840 Jul 27 19:17 /usr/bin/rsh
-r-sr-xr-x
1 root bin
8703 Jul 27 19:16 /usr/bin/passwd
-rws--x--x
2 root root
556924 Jul 28 03:05 /usr/bin/suidperl
-rws--x--x
2 root root
556924 Jul 28 03:05 /usr/bin/sperl5.00502
-rwsr-xr-x
1 root root
38752 Jul 27 20:15 /usr/bin/chage
-rwsr-xr-x
1 root root
28244 Jul 27 20:15 /usr/bin/expiry
-rwsr-xr-x
1 root root
32268 Jul 27 20:15 /usr/bin/gpasswd
-rwsr-xr-x
1 root root
28320 Jul 27 20:15 /usr/bin/newgrp
-rwsr-xr-x
1 root root
13872 Jul 27 20:27 /usr/bin/chfn
-rwsr-xr-x
1 root root
13712 Jul 27 20:27 /usr/bin/chsh
-r-sr-sr-x
1 uucp uucp
125852 Jul 27 20:53 /usr/bin/cu
-r-sr-xr-x
1 uucp uucp
91568 Jul 27 20:53 /usr/bin/uucp
-r-sr-sr-x
1 uucp uucp
38492 Jul 27 20:53 /usr/bin/uuname
-r-sr-xr-x
1 uucp uucp
99656 Jul 27 20:53 /usr/bin/uustat
-r-sr-xr-x
1 uucp uucp
92720 Jul 27 20:53 /usr/bin/uux
---S--X--X
1 root root
23420 Jul 27 19:18 /usr/bin/crontab
-rwsr-xr-x
1 root root
173920 Jul 28 00:32 /usr/sbin/lpc
-rwsr-xr-x
1 root root
12544 Jul 27 20:48 /usr/sbin/ppplogin
-rwsr-xr-x
1 root root
17212 Jul 27 19:18 /usr/sbin/sliplogin

-r-sr-xr-x 1 root root
21146
Jul 27 19:22 /usr/sbin/traceroute
-r-sr-xr-x
1 uucp uucp
221348 Jul 27 20:53 /usr/sbin/uucico
-r-sr-xr-x
1 uucp uucp
101852 Jul 27 20:53 /usr/sbin/uuxqt
-r-sr-x--- 1 news uucp 101368
Jul
27 23:22 /usr/libexec/inn/bin/rnews
-r-sr-x---
1 root news
51732 Jul 27 23:22 /usr/libexec/inn/bin/startinnfeed
-rwsr-xr-x
1 root root
16700 Jul 27 21:30 /usr/libexec/sendmail/mail.local
-r-sr-xr-x
1 root mail
317628 Jul 27 21:30 /usr/1ibexec/sendmail/sendmail
-rwsr-xr-x
1 root majordom
8268 Jul 27 19:55 /usr/1ib/majordomo/wrapper
-rwsr-sr-x
1 root root
91140 Jan 10 1995 /usr/1ib/svga/demos/3d
-rwsr-xr-x
1 root root
14576 Jul 27 19:19 /bin/ping
-rwsr-xr-x
1 root root
14000 Jul 27 20:32 /bin/su
-rwsr-xr-x
1 root root
54112 Jul 27 20:27 /bin/mount
-rwsr-xr-x
1 root root
27804 Jul 27 20:27 /bin/umount
-rwsr-sr-x
1 root root
6644 Jul 27 23:57 /opt/kde/bin/kcheckpass
-rwsr-xr-x
1 root root
371796 Jul 28 00:59 /opt/kde/bin/kppp
-r-sr-sr-x
1 root tty
38044 Jul 27 19:24 /sbin/dump
-r-sr-sr-x
1 root tty .
397068 Jul 27 19:24 /sbin/restore
-rwsr-xr-x
1 root root
13959 Aug 27 10:55 /sbin/cardctl
Глядя на список, в принципе можно понять, почему для этих файлов пришлось установить атрибут
SUID. Некоторым службам с ограничением доступа он нужен для того, чтобы их могли выполнять и непривилегированные пользователи. К таковым относится, например, команда изменения пароля. Другим программам, например mount или vmware, этот атрибут необходим, поскольку они обращаются к устройствам, и т. п.
Обратите внимание на группу программ, имена которых начинаются с символов uu. Владельцем этих программ является не root, a uucp. Эти программы обязательно нужно запускать от имени пользователя uucp, поскольку иначе они не будут работать. В наше время подавляющее число систем отказалось от использования UUCP в пользу более совершенной связи через Интернет, потому технология UUCP редко где используется, однако если в вашей системе до сих пор используется UUCP, вы должны принять во внимание дополнительные соображения, связанные с безопасностью. В частности, вам надо уделить внимание организации защиты при подключении через телефонную линию. Тем не менее общий подход к безопасности этой части системы такой же, как и для остальных частей, поэтому общие соображения, не относящиеся напрямую к UUCP, вполне применимы и для этой технологии.
В качестве меры предосторожности можно посоветовать время от времени выполнять приведенную ранее команду и сохранять выданный ею список SUID-файлов на гибком диске. Тогда, если вы заподозрите что-то неладное, можно будет сравнить изначальный список, хранящийся на гибком диске, с текущим перечнем файлов SUID (для этого удобно использовать утилиту diff). Благодаря этому вы сможете выяснить, появились ли в системе без вашего ведома новые SUID-фай-лы. Процедуру проверки SUID- файлов можно автоматизировать. Для этого создайте специальный сценарий и добавьте этот сценарий в набор ежедневных задач сгоп. Результаты проверки можно высылать на ваш электронный адрес по электронной почте. Разумеется существуют более удобные средства проверки, например программное средство tripwire, однако описанная процедура является достаточно простым и быстрым способом контроля SUID-файлов. Как и в других задачах, связанных с безопасностью, полезность результатов определяется тем, как вы их интерпретируете. Еще один способ проверки файлов подразумевает использование команды rpm -V, при условии, конечно, что база данных пакетов и программа rpm не были модифицированы злоумышленником.
Контроль над SUID/SGID файлами
Как вы уже, наверное, поняли, состояние файлов SUID/SGID вашей системы необходимо постоянно и тщательно контролировать. Безусловно, появление в системе новых файлов с этими атрибутами не должно оставаться незамеченным вами. То же самое можно сказать и про замену существующих файлов.
Частота осуществления этих проверок зависит от степени риска, допустимой для вашей системы.
ПРИМЕЧАНИЕ
Помните, что нет ничего плохо в том, если пользователь даст атрибуты SUID/SGID своим файлам или каталогам.
Беспокоиться нужно лишь тогда, когда в домашнем каталоге пользователя обнаружится SUID-файл, владельцем
которого является root.
Однако это всего лишь две из трех необходимых мер безопасности, связанных с SUID/SGID. He менее важно следить за обнаружением в используемых вами программах ошибок и уязвимых мест. Если вы
узнаете, что в одной из используемых вами программ обнаружена ошибка или уязвимое место, вы должны как можно быстрее заменить эту программу новой, исправленной версией или принять меры, позволяющие тем или иным образом обезопасить вашу систему от вторжения. Как правило, исправленные версии программ становятся доступными для использования уже через несколько часов после того, как становится известно о существовании ошибки или уязвимого места. Однако до появления исправленной версии бинарного файла компания-поставщик вашей операционной системы или такие агентства, как CERT
(Computer Emergency Response Team), публикуют рекомендации о том, как обезопасить систему в отсутствие исправленного бинарного файла.
СОВЕТ
Компания Caldera, как и всякий другой поставщик комплекта Linux, поддерживает список рассылки, сообщающий об
уязвимых местах и ошибках, обнаруженных в ее продуктах. Подписаться на него можно по адресу
http://www.calderasystems.com.

Настройка атрибутов
Процедура установки атрибутов SUID/SGID и атрибута «sticky bit» (липкий бит) ничем не отличается от процедуры установки обычных атрибутов (о настройке обычных атрибутов рассказывалось в главе 3).
Для этой цели используется все та же команда chmod. Соответствие между восьмеричными числами и атрибутами файла в данном случае следующее: число 4 соответствует атрибуту SUID, число 2 соответствует атрибуту SGID, наконец, число 1 соответствует атрибуту «sticky bit». При вызове chmod восьмеричное число, задающее желаемую комбинацию этих атрибутов, добавляется в качестве четвертого, самого старшего разряда восьмеричного числа, обозначающего набор разрешений на доступ к файлу (как рассказывалось в предыдущей главе, три других разряда обозначают комбинацию базовых разрешений на доступ к файлу со стороны владельца, группы и других пользователей).
Например, для того чтобы назначить файлу стандартную комбинацию разрешений на доступ, следует выполнить команду chmod 755 имя_файла. На самом деле эта команда является аналогом команды chmod
0755 имя_файла. Ноль в самом старшем восьмеричном разряде означает, что ни один из атрибутов SUID,
SGID или «sticky bit» для файла не установлен. Любое число от 1 до 7 на месте этого нуля задает некую комбинацию только что перечисленных атрибутов. Так, для установки атрибута «sticky bit» для каталога
/tmp, дабы изменять и удалять файлы в нем могли только их владельцы, необходимо выполнить:
chmod 1777 /tmp
Если вы хотите дать каталогу атрибут SGID (означающий, что в качестве владельца всех файлов, создаваемых в этом каталоге, будет назначаться группа, владеющая этим каталогом), необходимо выполнить команду chmod 2775 имя_ каталога. Аналогичным образом команда chmod 4755 имя_файла назначает файлу атрибут SUID. Чтобы назначить файлу оба атрибута, SUID и SGID (как сделано для программы си, относящейся к пакету UUCP), достаточно выполнить:
chmod 6755 cu
Здесь значение для SUID, равное 4, складывается со значением для SGID, равным 2, в результате получается значение 6, которое подставляется на четвертое знакоместо.
Проверить внесенные изменения можно с помощью команды ls -l Обратите внимание на комбинацию разрешений на доступ. Как мы уже знаем, набор базовых разрешений на доступ (чтение, запись, выполнение) обозначается латинскими буквами «rwx». Однако если для файла установлен атрибут
SUID или SGID, вместо буквы «х» в этой тройке будет указана буква «s». При назначении атрибута SUID буква «s» займет место символа «х» в тройке прав владельца файла, а для атрибута SGID — в тройке прав группы файла. Атрибут «sticky bit» отображается несколько иначе: ему соответствует буква «t» на месте буквы «х» в тройке прав доступа для остальных пользователей.
Зная, как обозначаются эти атрибуты, несложно догадаться, как устанавливать их с использованием символьной маски в качестве аргумента команды chmod. Итак, чтобы назначить файлу атрибут SUID, оставив остальные атрибуты без изменений, нужно выполнить команду chmod u+s имя_файла. Для назначения атрибута SGID маску следует заменить на u+g. В обоих случаях минус вместо плюса сбрасывает указанный атрибут. Сброс или установка атрибута «sticky bit» (липкий бит) достигается посредством маски a-t или a+t, соответственно. Таблица 4.1 представляет собой расширенную версию таблицы 3.2 и содержит описание битов для дополнительных атрибутов файла.

Таблица 4.1. Права доступа в восьмеричном виде
Разрешения
Восьмеричный
Дополнительные
Восьмеричный

Комментарии
на доступ
эквивалент
разрешения
эквивалент


-------- 000
-
--Х- -Х- -Х 0111
Число «О» в самом

старшем разряде

указывать необязательно,

обязательными являются

лишь три последующих

восьмеричных числа
--Х--Х-Х
111
--- --- --t
1001
«t» означает «sticky bit»


(липкий бит)
-w--w--w-
222
--- --s ---
2010
«s» означает атрибуты

SUID/SGID
-wx-wx-wx
333
--- --s --t
3011
Столбец «Дополнительные разрешения» показывает минимальный допустимый набор разрешений на доступ. Единицы в других разрядах стоят потому, что для назначения дополнительного атрибута необходимо, чтобы значение соответствующего разряда было ненулевым. r--r--r--
444
--s --- ---
4100 r-xr-x-r-x
555
--s --- --t
5101 rw-rw-rw
666
--s --s --s
6110 rwxrwxrwx
777
--s --s --t
7111


Поделитесь с Вашими друзьями:
1   ...   4   5   6   7   8   9   10   11   ...   42


База данных защищена авторским правом ©nethash.ru 2017
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал