Библиотека curses
определена в X/Open. Реализация, которая входит в состав Linux, представляет собой совместимую в данный момент с X/Open XSI Curses версию базового уровня.
Эта тема логически относится к главе 20, поскольку она имеет отношение к виртуальным консолям. Однако практический смысл вынуждает поместить этот раздел в данную главу — поскольку, как упоминалось во введении, настоящую книгу можно читать и выборочно.
Популярным способом проверки в ранних ядрах Linux было создание последовательности абсолютно случайных байтов и запуск их на выполнение как программы. Кроме того, что таким методом невозможно сделать что-либо полезное, он довольно часто вызывает полную блокировку ядра. Поскольку попытки выполнения совершенно случайных последовательностей кодов не входят в "должностные инструкции" ядра, пользовательские программы не должны вызывать остановку корректной работы ядра. Таким образом, этот прием помогает находить большое число дефектов, которые необходимо устранить.
Атака на программное обеспечение приложений сейчас является основным способом распространения вирусов.
Системные квоты предотвращают возможность успешности такой атаки.
Словарная атака — это довольно прямолинейный метод обнаружения паролей, когда автоматическая программа прогоняет огромный список обычных паролей (таких как слова в словаре) до тех пор, пока один из них не подойдет.
ВООТР — это предшественник DHCP, позволяющий компьютерам автоматически узнавать свои IP-адреса при запуске сетевых интерфейсов.
Функция alloca()
не является стандартным средством языка С, однако компилятор gcc предоставляет alloca()
в большинстве поддерживаемых операционных систем. В более старых версиях gcc (до версии 3.3) alloca()
не всегда должным образом взаимодействовала с массивами динамических размеров (другое расширение GNU), поэтому примите во внимание, что использовать нужно только одну из версий.
В некоторых устаревших версиях библиотеки С вместо этого возвращается -1 (если строка не помещается). Старая версия библиотеки С уже не поддерживается и не используется в защищенных программах, однако на man-странице по функции snprintf()
демонстрируется код, обрабатывающий оба варианта.
К сожалению, функция clearenv()
не очень хорошо стандартизирована. Она входит в последние версии POSIX, однако она была выброшена из стандарта Single Unix Standard и не доступна во всех системах типа Unix. Если вам необходимо поддерживать операционную систему, не включающую эту переменную, установите environ=NULL;
.
Существует еще несколько библиотечных функций, имеющих дело с временными файлами, такие как tmpnam()
, tempnam()
, mktemp()
и tmpfile()
. К сожалению, их применение приносит небольшую пользу, поскольку они могут привести к возникновению состязаний в программах, которые невнимательно реализованы.
Система Linux позволяет программам открывать очень большое количество файлов. Процессы, работающие как root, могут одновременно открывать сотни файлов, однако большинство дистрибутивов устанавливают предел ресурсов на количество файлов, который может открывать пользовательский процесс. Этот предел также ограничивает максимальный файловый дескриптор, который можно использовать, с помощью метода dup2()
, тем самым, предоставляя удобный верхний предел для закрывающего файлового дескриптора.
Еще одним способом закрытия всех файлов, открытых программой, является прохождение через каталог файловой системы процесса /proc
, в котором перечислены все открытые файлы, и закрытие каждого из них. Каталог /proc/PID/fd
(где PID
—это pid текущего процесса) содержит символическую ссылку для каждого файлового дескриптора, открытого процессом. Имя каждой символической ссылки представляет собой файловый дескриптор, которому она соответствует. Считывая содержимое каталога, программа легко может закрыть все файловые дескрипторы, которые больше не нужны.
Один из авторов этой книги разработал набор инструментальных средств newt
для управления окнами на высоком уровне на основе S-Lang; этот набор входит в состав большинства распространяемых дистрибутивов Linux.
Читать дальше