Приемы профессиональной работы в UNIX

       

Зачем нам нужен командный файл


Зачем нам нужен командный файл access?
Мы уже отмечали, что записи о входе в систему в парольном файле создают возможность нарушения защиты, если с ними не связаны пароли, т.е. если поле пароля пустое. Проблема заключается в том, что в больших системах парольный файл может сильно разрастись. Искать в таком файле вручную регистрационные записи, в которых отсутствуют пароли, было бы утомительным и приводило бы к ошибкам. Почему бы не поручить системе сделать за вас эту работу?
Что делает access?
Командный файл access использует команду grep с шаблоном поиска, описывающим регистрационную запись, не имеющую пароля. Когда такая запись попадается, она печатается в стандартный вывод. Если указанных записей не найдено, выводится сообщение "All logins protected" ("Все входы в систему защищены").


Зачем нам нужен командный файл chkset?
Мы уже рассмотрели проблемы безопасности, которые могут возникнуть, когда для исполняемых файлов установлен в единицу бит разрешения установки идентификатора пользователя. Это означает, что они могут запускать интерпретатор shell с корневой или с другой привилегией высокого уровня. С той же целью может быть установлен в единицу бит разрешения установки идентификатора группы. Поэтому системный администратор должен непрерывно разыскивать и проверять все файлы в системе, для которых установлены эти биты, чтобы посмотреть, не используются ли они для несанкционированных целей.
Не для всех интерпретаторов shell, нарушающих защиту, владельцем является суперпользователь (root). Один пользователь может запустить shell, владельцем которого является другой пользователь, имеющий более высокие привилегии. Это фактически предоставляет пользователю, запустившему shell, все возможности владельца файла.
Найти shell-интерпретаторы, устанавливающие идентификатор пользователя или группы, бывает легко, а бывает и трудно, в зависимости от их авторства. Легко найти такие, которые:
а) имеют необычные имена (некоторые нарушители любят выставлять свои достижения напоказ);
б) содержат в исполняемом файле символьные строки, которые можно прочитать;
в) размещены в необычном или очевидном каталоге;
г) не имеют ограничений относительно того, кто может их запустить.
Для изощренных shell-интерпретаторов характерно следующее:
а) они имеют имена, похожие на обычные команды системы UNIX;
б) имеют размеры файлов, которые соответствуют другим файлам, размещенным неподалеку от них;
в) содержат упрятанные символьные строки, которые не так-то легко прочитать;
г) имеют, возможно, специальную опцию, запускающую shell, или даже специальный пароль, необходимый для его запуска.
Самые хулиганские из них являются настоящими командами системы UNIX, переделанными в корневые shell-интерпретаторы, которые затем переустанавливаются вместопервоначальных shell-интерпретаторов. Единственный надежный способ идентифицировать этот последний тип запустить побайтовое сравнение между вашей дистрибутивной копией команды системы UNIX и той версией, которая присутствует в настоящий момент в вашей системе.
Конечно, перед тем как вы сможете проверить файлы со включенными битами разрешения установки пользовательского/группового идентификатора, вам нужно найти все такие файлы. В системе UNIX это делают две команды: find(1) и ncheck(1M). Утилита find ищет файлы по нашей точной спецификации и может быть использована для поиска файлов с заданным набором прав доступа, включая биты установки идентификаторов. Ncheck печатает вперемешку специальные файлы и файлы с разрешенной установкой идентификатора пользователя. Это очень большой список, чтение и поиск в нем интересующих нас файлов занимает много времени. Таким образом, полезно создать командный файл, предоставляющий нам всю необходимую информацию и только такую информацию. Chkset использует команду find и ищет только файлы со включенными битами разрешения установки пользовательского/группового идентификатора, так что результат содержит лишь необходимую нам информацию, и этим результатом можно сразу же воспользоваться.
Что делает chkset?
Chkset имеет два режима функционирования: один для сканирования всей системы в целом, а другой для сканирования указанных деревьев каталогов. Это хорошее свойство, так как сканирование каждого файла системы занимает очень много времени. Если имеется много больших дисковых устройств, проверка всего содержимого системы может занять целый час. Утилита chkset также очень сильно загружает центральный процессор из-за всех процессов, которые она генерирует. Указывая имена каталогов, вы можете выполнить проверку лишь на определенной области системного дерева. Отметим, однако, что поскольку chkset пользуется командой find, она сканирует не только указанный вами каталог, но и ВСЕ подчиненные каталоги. Заметим также, что chkset обнаруживает ВСЕ файлы с установленными в единицу битами установки пользовательского/группового идентификатора, а не только те, владельцем которых является суперпользователь (root).
Результат работы chkset можно выдать также двумя способами. Если не применять никакую опцию, то форма выдачи результата определяется командой "find ... -print", что означает полные маршрутные имена найденных файлов. Затем эти полные имена сортируются. Если применяется опция -l, то для форматирования результата используется команда "ls -ld", порождающая длинный формат листинга. При этом распечатываются полное указание прав доступа, число связей, владелец, размер и имя файла. Этот результат также сортируется по именам. Выбирайте тот или иной формат в зависимости от обстоятельств. Если вам нужно проверить большой участок системы и получить список подозрительных файлов, примените листинг по умолчанию (без опций), так как он компактнее и, как мы увидим позднее, занимает значительно меньше процессорного времени. Если вы хотите заняться определенным каталогом и посмотреть на его файлы подробно, воспользуйтесь опцией l. Она предоставляет больше информации и избавляет от необходимости вручную набирать команды ls для интересующих вас файлов.
Отметим, что эту команду может запустить кто угодно, а не только администратор, имеющий привилегии суперпользователя. Однако, если она запускается обычным пользователем, то команда find внутри командного файла chkset ограничена теми файлами, к которым пользователь имеет доступ на чтение. Так что вы могли бы предложить более привилегированным пользователям запускать chkset в качестве одной из их личных мер безопасности. Разумеется, если chkset запускается суперпользователем, то ограничения прав доступа к файлам несущественны и можно подвергнуть проверке все файлы.


Зачем нам нужна программа suw?
Вы помните, что команда su, позволяющая пользователям изменять свою индивидуальность (и права доступа) может быть источником проблем безопасности. Система хранит протокол всех транзакций su в файле sulog. Хотя более опытные нарушители могут уметь затирать свои следы, файл sulog полезен для отслеживания потенциальных лазеек в системе защиты. Этим способом можно поймать многих нарушителей-любителей. Естественно, мы хотим автоматизировать этот процесс, чтобы система выполняла проверку и сигнализировала нам при обнаружении чего-либо опасного. Кроме того, данная программа демонстрирует методику, которую можно использовать для отслеживания других протокольных файлов.
Что делает suw?
Программа suw читает и анализирует протокольные файлы команды su. Каждое успешное превращение в суперпользователя при помощи команды su, обнаруженное в протокольном файле, сверяется со списком разрешенных суперпользователей. Если пользователю не разрешено быть суперпользователем, токонкретная запись о нем печатается, чтобы оповестить администратора.
По умолчанию записи о нарушителях печатаются в стандартный вывод. Протокольным файлом по умолчанию является /usr/adm/sulog. Если применяется опция -m, то записи о нарушителях рассылаются по почте администраторам, занесенным в предопределенный список. Если нужно проверить другой протокольный файл, например /usr/adm/Osulog, то его имя можно указать в командной строке.

Содержание раздела