ГЛАВА 1 ИДЕНТИФИКАЦИЯ ПОЛЬЗОВАТЕЛЕЙ И ЗАЩИТА СИСТЕМЫ ВАЖНЫЕ РЕКОМЕНДАЦИИ ПО ОБЕСПЕЧЕНИЮ ЗАЩИТЫ ВХОДЫ И ПАРОЛИ Сроки действия паролей Образцы записей в файле паролей /etc/passwd Менять каждые две недели Изменить только один раз Разрешить изменение пароля только суперпользователю Запирание неиспользуемых входов Особые пароли администратора РАЗРЕШЕНИЕ НА ПЕРЕУСТАНОВКУ ДЕЙСТВУЮЩЕГО ИДЕНТИФИКАТОРА ПОЛЬЗО- ВАТЕЛЯ (ДИП) И ДЕЙСТВУЮЩЕГО ИДЕНТИФИКАТОРА ГРУППЫ (ДИГ) Список файлов, принадлежащих суперпользователю, с разрешением на переустановку ДИП Выдача списка файлов с разрешением на переустановку ДИП из кор- невой файловой системы Проверка разрешений на переустановку ДИП в других файловых сис- темах ВВЕДЕНИЕ В этой главе рассматриваются вопросы обеспечения защиты вычис- лительной системы. Важные рекомендации по обеспечению защиты Рекомендации по установке паролей и прав пользователя; защита системы от несанкционированного доступа. Входы и пароли Сроки действия паролей как средства контроля за дли- тельностью промежутков времени, в течение которых уста- новленные пароли могут оставаться неизменными. "Запирание" входов с целью предотвращения их использо- вания. Защита административных команд и входов при помощи па- ролей. Разрешение на установку действующего идентификатора пользова- теля (ДИП), и разрешение на установку действующего идентифи- катора группы (ДИГ) Защита от несанкционированного использования программ, которые могут вызываться только через административные входы. ВАЖНЫЕ РЕКОМЕНДАЦИИ ПО ОБЕСПЕЧЕНИЮ ЗАЩИТЫ За обеспечение защиты, в конечном счете, отвечает каждый, кто имеет доступ к системе. Не существует абсолютно надежных средств защиты. Ни одна система не застрахована от повреждений. Следует обратить особое внимание на следующие моменты. Необходимо учитывать возможность физического доступа к маши- не; в особенности это касается малых машин. Всякий, кто имеет физический доступ к машине, может просто-напросто унести ее. Устанавливайте права доступа к каталогам и файлам таким обра- зом, чтобы обеспечить лишь необходимый уровень доступа для владельцев, группы и прочих пользователей. Каждый вход должен иметь пароль. Пароли следует регулярно ме- нять. Не используйте очевидных паролей. Бессмысленный набор из шести-восьми букв и цифр предпочтительнее каких-либо стан- дартных имен. Неиспользуемые входы следует удалять или блоки- ровать. Источником неприятностей могут быть порты двусторонней связи, не имеющие входов. Системы с портами двусторонней связи не могут считаться на- дежно защищенными. Не следует хранить особо секретную инфор- мацию на таких машинах. Пользователи, которые слишком часто употребляют команду su, могут создавать угрозу безопасности системы, т. к. они имеют доступ к файлам других пользователей без ведома последних. Эта команда представляет опасность также и тем, что для ее использования необходимо знать пароль другого пользователя. Чем большему числу известен данный вход и пароль, тем менее безопасна работа в системе. Поэтому все обращения к этой ко- манде контролируются. Для контроля за использованием команды su проверяйте содержимое файла /usr/adm/sulog. Формат файла /usr/adm/sulog описан в Приложении A "Каталоги и файлы". Входные каталоги, файлы .profile и файлы в каталогах /bin, /usr/bin, /lbin и /etc, которые доступны на запись прочим пользователям, также представляют собой уязвимое место с точ- ки зрения защиты. Если Вам нужно отойти от терминала, выйдите из системы. Не оставляйте без присмотра терминал, с которого Вы вошли в сис- тему, в особенности если Вы вошли как суперпользователь. ВХОДЫ И ПАРОЛИ К этой теме относятся следующие вопросы: сроки действия паролей образцы записей в файле /etc/passwd запирание неиспользуемых входов особые административные входы Сроки действия паролей Механизм слежения за сроками действия паролей вынуждает пользо- вателей периодически устанавливать новые пароли. Предусмотрены средства, которые запрещают пользователю изменять свой пароль до истечения определенного срока. Сроки действия паролей уста- навливaются индивидуально для каждого входа путем редактирова- ния файла паролей /etc/passwd. Фактически, устанавливая сроки действия пароля, Вы заставляете пользователя иметь для каждого входа по крайней мере два пароля. Если требуется усилить конт- роль, который дает механизм сроков действия, то можно внести изменения в файл /etc/profile, включив в него запрос еще одного входного кода, как часть процесса входа (см. процедуры 2.1, 2.2 и 2.3). Информация о сроках действия приписывается справа к полю зашиф- рованного пароля в файле /etc/passwd. Информация о сроках дей- ствия начинается с запятой, за которой следует до 4 байт (ли- тер) формата: ,Mmww Смысл этих полей следующий: M максимальная продолжительность использования данного паро- ля (в неделях, см. обозначения на рис. 1-1) m минимальный интервал, по истечении которого пользователь может установить новый пароль (в неделях, см. обозначения на рис. 1-1) ww Номер недели (от начала 1970 г.), на которой произошло последнее изменение пароля; кодируется двумя литерами ww. Эти данные вводить не нужно: система автоматически допи- сывает литеры ww к информации о сроках действия. Все временные интервалы задаются в неделях (от 0 до 63) при по- мощи специального 64-литерного алфавита. На рис. 1-1 приведено соответствие между числовыми значениями и литерами. Любая из литер может находиться в любом из четырех полей. Рис. 1-1. Кодировка сроков действия. ~-------------------------- --------------------- │ Литера │ Число недель │ -------------------------- --------------------- │ . (точка) │ 0 (ноль) │ │ │ │ │ / (наклонная черта) │ 1 │ │ │ │ │ 0 - 9 │ 2 - 11 │ │ │ │ │ A - Z │ 12 - 37 │ │ │ │ │ a - z │ 38 - 63 │ -------------------------- --------------------- Среди всех возможных сочетаний кодов выделяются два особых слу- чая: Если значения M и m равны 0 (код ,..), то это означает, что при следующем входе в систему пользователь должен будет сме- нить пароль, после чего дальнейший контроль за сроками дейст- вия снимается. Если m>M (например, код ,./), то пароль данного входа может изменить только суперпользователь. Образцы записей в файле паролей /etc/passwd Для удовлетворения потребностей различных организаций существу- ет множество вариантов управления паролями. В следующих разде- лах обсуждаются некоторые примеры. МЕНЯТЬ КАЖДЫЕ ДВЕ НЕДЕЛИ Ниже приводится пример задания сроков действия таким образом, чтобы пароль обязательно изменялся каждые две недели (0), но не чаще чем раз в неделю (/). 1. Типичная запись в файле входов и паролей пользователя jqu имеет вид: jqu:RTKESmMOE2m.E:100:1:J.Q.Username:/usr/jqu 2. Для того чобы заставить пользователя jqu изменять свой па- роль каждые две недели, но не ранее чем истечет недельный срок действия, задайте код 0/. После того как Вы отредак- тируете файл /etc/passwd (добавив к полю пароля литеры ,0/ ) строка примет вид: jqu:RTKESmMOE2m.E,0/:100:1:J.Q.Username:/usr/jqu После такого изменения пользователь jqu будет вынужден из- менить свой пароль при первом входе в систему и, далее, через каждые 2 недели. 3. После первого входа пользователя jqu в систему, к полю па- роля будут автоматически приписаны две литеры, обозначаю- щие номер недели, когда пароль был изменен: jqu:RTKESmMOE2m.E,0W9/:100:1:J.Q.Username:/usr/jqu В этом примере подразумевается, что пользователь jqu установил новый пароль в течении недели номер W9. ИЗМЕНИТЬ ТОЛЬКО ОДИН РАЗ Ниже показан способ задания сроков действия, которые заставят пользователя изменить пароль только однажды при очередном вхо- де в систему (используется код ..). 1. Приведем снова типичную запись в /etc/passwd пользователя jqu: jqu:RTKESmMOE2m.E:100:1:J.Q.Username:/usr/jqu 2. Для того чтобы заставить пользователя jqu изменить свой пароль при очередном входе в систему (и только однажды), воспользуйтесь кодом .. . После редактирования файла /etc/ passwd и добавления к полю пароля символов ,.. запись бу- дет выглядеть так: jqu:RTKESmMOE2m.E,..:100:1:J.Q.Username:/usr/jqu 3. После того как пользователь jqu сменит свой пароль, систе- ма автоматически удалит из поля пароля коды сроков дейст- вия (,..): jqu:EFDNLqsFUj.fs:100:1:J.Q.Username:/usr/jqu Обратите внимание, что зашифрованное значение пароля измени- лось. РАЗРЕШИТЬ ИЗМЕНЕНИЕ ПАРОЛЯ ТОЛЬКО СУПЕРПОЛЬЗОВАТЕЛЮ Далее показано, как нужно задать сроки действия пароля, чтобы изменить пароль данного входа мог только суперпользователь (код ./) 1. Приведем еще раз пример типичной записи в файле паролей: jqu:RTKESmMOE2m.E:100:1:J.Q.Username:/usr/jqu 2. Для того чтобы пользователь jqu не мог самостоятельно из- менить свой пароль, задайте код сроков действия ./ . После добавления литер ,./ к полю пароля, отредактированная за- пись в файле /etc/passwd будет иметь вид: jqu:RTKESmMOE2m.E,./:100:1:J.Q.Username:/usr/jqu Теперь пароль входа jqu может изменить только суперпользова- тель. Если пользователь jqu попытается сам изменить свой па- роль, то он получит сообщение о нарушении прав доступа. Запирание неиспользуемых входов Если вход не используется или становится ненужен, то следует сделать одно из двух: удалить соответствующую запись из /etc/passwd сделать недоступным (запереть) вход Запереть вход можно путем редактирования поля зашифрованного пароля в файле /etc/passwd таким образом, чтобы это поле содер- жало одну или более литер, которые не используются при шифрова- нии паролей. Так, можно записать в это поле текст Locked; (За- перт;). Литера "точка с запятой" (;) не используется при шифро- вании паролей. Этот текст будет также служить напоминанием о том, что данный вход заперт. Другой вариант текста в поле паро- ля - not valid (недействителен) - также годится для запирания, так как литера "пробел" не используется при шифровании паролей. Следующая строка в файле /etc/passwd соответствует "запертому" входу bin: bin:Locked;:2:2:0000-Admin(0000):/bin: Особые пароли администратора Существуют два наиболее употребительных способа получить доступ к системе: войдя как обычный пользователь либо как суперпользо- ватель (root). Если бы других способов получить доступ к систе- ме не существовало, то это привело бы либо к неэффективному ис- пользованию системы (если бы суперпользователь владел слишком большим числом каталогов), либо к тому, что слишком многие должны были бы знать пароль суперпользователя (очень плохо с точки зрения секретности), либо к слишком широкой доступности системных средств обычным пользователям (если бы суперпользова- телю принадлежало слишком малое число каталогов). Все эти пос- ледствия весьма нежелательны. Ключ к разумному сочетанию эффективного использования системы и надежной защиты - в использовании особых системных входов и ко- манд администратора, которые можно защитить паролями (см. про- цедуру 1.4, где описано, как это сделать). Команды, являющиеся одновременно и входами, которые можно защитить паролями, служат для выполнения ряда функций, требующихся некоторым пользовате- лям Вашего компьютера. sysadm Дает доступ ко многим полезным административным функциям для вызова которых необязательно быть суперпользователем. powerdown Отключает питание компьютера. checkfsys Проверяет указанную файловую систему. makefsys Создает файловую систему на указанном носителе. mountfsys Монтирует указанную файловую систему, делает ее доступной для использования. umountfsys Демонтирует указанную файловую систему, которая ранее была смонтирована. Перечисленные выше команды дают доступ к некоторым каталогам и системным функциям. Они могут использоваться и как входные име- на (в ответ на приглашение login: ), и как команды. Если Вы входите в систему по одному из этих имен, то непосредственно после входа указанная команда выполняется, а после завершения функции, выполняемой по этой команде, происходит выход из сис- темы и выдается приглашение для входа login: . _ Большинство из этих команд открывают доступ к важным частям операционной системы, поэтому для них желательно устанавливать пароли. Если такие пароли установлены, то всякому, кто попыта- ется войти в систему под одним из этих имен (или выполнить одну из этих команд, из shell'a) будет выдано приглашение для ввода пароля. Желательно, чтобы пароли этих команд/входов были известны лишь небольшому числу пользователей. ~--------- ---------------------------------------------------- │ Вход │ Назначение │ │ │ │ --------- ---------------------------------------------------- │ root │ Для этого входа не существует никаких ограничений;│ │ │ ему открыты все другие входы, защищенные объекты,│ │ │ права доступа. Суперпользователь имеет доступ ко│ │ │ всей операционной системе. Пароль входа root должен│ | │ │ тщательно скрываться. │ --------- ---------------------------------------------------- │ sys │ Имеет права обычного пользовательского входа по│ │ │ отношению к принадлежащим ему файлам, которые хра-│ │ │ нятся в каталоге /usr/src │ --------- ---------------------------------------------------- │ bin │ Имеет права обычного пользовательского входа по│ │ │ отношению к принадлежащим ему файлам, которые нахо-│ │ │ дятся в каталоге /bin │ --------- ---------------------------------------------------- │ adm │ Имеет права обычного пользовательского входа по │ │ │ отношению к принадлежащим ему объектным файлам, │ │ │ которые находятся в каталоге /usr/adm │ --------- ---------------------------------------------------- │ uucp │ Этому входу принадлежат объектные файлы и файлы │ │ │ накопления в каталоге /usr/lib/uucp │ --------- ---------------------------------------------------- │ nuucp │ Используется удаленными машинами для входа в сис- │ │ │ тему и инициализации пересылки файлов командой │ │ │ /usr/lib/uucp/uucico │ --------- ---------------------------------------------------- │ daemon │ Вход системного демона, который контролирует фоно- │ │ │ вую обработку │ --------- ---------------------------------------------------- │ lp │ Этому входу принадлежат объектные файлы и файлы на-│ │ │ копления в каталоге /usr/spool/lp │ --------- ---------------------------------------------------- РАЗРЕШЕНИЕ НА ПЕРЕУСТАНОВКУ ДЕЙСТВУЮЩЕГО ИДЕНТИФИКАТОРА ПОЛЬЗО- ВАТЕЛЯ (ДИП) И ДЕЙСТВУЮЩЕГО ИДЕНТИФИКАТОРА ГРУППЫ (ДИГ) Если необходимо поддерживать хотя бы минимальную защиту систе- мы, то следует соблюдать особую осторожность, устанавливая биты разрешения на переустановку ДИП и ДИГ. При помощи команды chmod(1) эти биты можно установить для любого выполняемого фай- ла. Если какой-либо пользователь вызывает выполняемый файл, у которого установлен один из этих битов, то он получает права владельца данного файла. Если пользователь копирует некоторую программу в файл с правами -rwsrwxrwx, то это может создать определенную угрозу защите системы. Например, если команда su имеет разрешение на запись для прочих пользователей, то любой может скопировать shell и получить версию команды su, не защищенную паролем. В следующем разделе приводятся примеры команд, которые позволяют выявить файлы с битом разрешения на переустановку ДИП. Дальнейшие сведения о битах разрешения на переустановку ДИП ДИГ можно найти в описаниях команд chmod(1) и chmod(2). Список файлов, принадлежащих суперпользователю, с разрешением на переустановку ДИП. Следующая командная строка служит для выдачи всех принадлещащих суперпользователю программ с разрешением на переустановку ДИП. Результат передается суперпользователю по почте. Проверяются все смонтированные маршруты, начиная с /. Следует тщательно исследовать все неожиданные записи в почте суперпользователя. # find /-user root -perm -4100 -exec ls -l {} \;| mail root you have mail # mail From root Mon Aug 27 07:20 EDT 1984 -r-sr-xr-x 1 root bin 38836 Aug 10 16:16 /usr/bin/at -r-sr-xr-x 1 root bin 19812 Aug 10 16:16 /usr/bin/crontab -r-sr-xr-x 1 root bin 27748 Aug 10 16:16 /usr/bin/shl ---s--x--x 1 root sys 46040 Aug 10 15:18 /usr/bin/ct -r-sr-xr-x 1 root sys 12092 Aug 11 01:29 /usr/lib/mv_dir -r-sr-sr-x 1 root bin 33208 Aug 10 15:55 /usr/lib/lpadmin -r-sr-sr-x 1 root bin 38696 Aug 10 15:55 /usr/bin/lpsched ---s--x--- 1 root rar 45376 Aug 18 15:11 /usr/rar/bin/sh -r-sr-xr-x 1 root sys 11416 Aug 11 01:26 /bin/mkdir -r-sr-xr-x 1 root sys 11804 Aug 11 01:26 /bin/rmdir -r-sr-xr-x 1 root bin 12524 Aug 11 01:27 /bin/df -rwsr-xr-x 1 root sys 21780 Aug 11 01:27 /bin/newgrp -r-sr-sr-x 1 root sys 23000 Aug 11 01:27 /bin/passwd -r-sr-xr-x 1 root sys 23824 Aug 11 01:27 /bin/su ? d # В этом примере: непривилегированный пользователь rar сделал персональную копию файла /bin/sh, принадлежащего суперпользова- телю, и установил для него разрешение на переустановку ДИП. Это означает, что пользователь может выполнить /usr/rar/ bin/sh и стать суперпользователем. Выдача списка файлов с разрешением на переустановку ДИП из корневой файловой системы Следующая командная строка служит для выдачи списка всех файлов с разрешением на переустановку ДИП из корневой файловой систе- мы. Как для смонтированной, так и для несмонтированной файловой системы можно использовать просто команду ncheck(1M). Нормаль- ный вывод команды ncheck -s содержит специальные файлы. В дан- ном случае, для того чтобы исключить при выдаче файлы устройств используется команда grep. Фильтрация, которая применена в этом примере для удаления специальных файлов, допустима только для корневой файловой системы (/dev/dsk/hd0s0). Вывод модифициро- ванной команды ncheck передается в качестве аргумента команде ls. Команду ls можно использовать только в том случае, если файловая система смонтирована. # ls -l 'ncheck -s /dev/dsk/hd0s0 | cut -f2 | grep -v dev' -r-sr-xr-x 1 root bin 12524 Aug 11 01:27 /bin/df -rwxr-sr-x 1 root sys 32272 Aug 10 15:53 /bin/ipcs -r-xr-sr-x 2 bin mail 32852 Aug 11 01:28 /bin/mail -r-sr-xr-x 1 root sys 11416 Aug 11 01:26 /bin/mkdir -rwsr-xr-x 1 root sys 21780 Aug 11 01:27 /bin/newgrp -r-sr-sr-x 1 root sys 23000 Aug 11 01:27 /bin/passwd -r-xr-sr-x 1 bin sys 27964 Aug 11 01:28 /bin/ps -r-xr-sr-x 2 bin mail 32852 Aug 11 01:28 /bin/rmail -r-sr-xr-x 1 root sys 11804 Aug 11 01:26 /bin/rmdir -r-sr-xr-x 1 root sys 23824 Aug 11 01:27 /bin/su -r-xr-sr-x 1 bin sys 21212 Aug 10 16:08 /etc/whodo # Здесь, кажется, не видно ничего подозрительного. Проверка разрешений на переустановку ДИП в других файловых сис- темах Следующая командная строка иллюстрирует применение команды ncheck для поиска файлов с разрешением на переустановку ДИП в файловой системе /usr (/dev/dsk/hd0s2; предполагается, что сис- тема имеет один диск с делением по умолчанию). В этом примере полные маршрутные имена файлов начинаются с /usr, но начальная часть имен (/usr) командой ncheck не выдается. # ncheck -s /dev/dsk/hd0s2 | cut -f2 /dev/dsk/hd0s2: /bin/at /bin/crontab /bin/sh1 /bin/sadp /bin/timex /bin/cancel /bin/disable /bin/enable /bin/lp /bin/lpstat /bin/ct /bin/cu /bin/uucp /bin/uuname /bin/uustat /bin/uux /lib/mv_dir /lib/expreserve /lib/exrecover /lib/accept /lib/lpadmin /lib/lpmov /lib/lpsched /lib/plshut /lib/reject /lib/mailx/rmmail /lib/sa/sadc /lib/uucp /lib/uucico /lib/uucp /lib/uusched /lib/uucp/uuxgt /rar/bin/sh # В этом примере следует обратить внимание на файл /usr/rar/bin/sh.