На главную страницу
Форум txt.version   



Статья :: 10.2.2. Сертификаты : Майкл Джонсон

10.2.2. Сертификаты

В Linux используются традиционные механизмы обеспечения безопасности Unix для пользователей и групп. Идентификаторы пользователя (uid) и группы (gid) — это целые числа[16], которые отображаются на символические имена пользователей и групп в файлах /etc/passwd и /etc/group, соответственно (более подробную информацию о базах данных пользователей и групп можно получить в главе 28). Однако ядро ничего не знает об именах — оно имеет дело только с целочисленными представлениями. Идентификатор uid, равный 0, зарезервирован за системным администратором, обычно имеющим имя root. Все обычные проверки безопасности отключаются для процессов, запущенных от имени root (то есть с uid, равным 0), что дает администратору полный контроль над системой.

В большинстве случаев процесс имеет единственный uid и единственный gid, ассоциированный с ним. Это идентификаторы, которые используются для большинства целей обеспечения безопасности (как, например, назначение прав владения вновь созданным файлам). Системные вызовы, которые могут модифицировать принадлежность процессов, обсуждаются далее в настоящей главе.

Со времен разработки Unix ограничение процессов принадлежностью к одной группе создало новые трудности. Пользователи, работающие со многими проектами, должны явно переключать свой gid, когда им нужен доступ к файлам, доступ к которым ограничен определенной группой пользователей.

Дополнительные группы были представлены в BSD 4.3 для решения этой проблемы. Хотя каждый процесс по-прежнему имеет собственный первичный gid (который используется, например, как gid для вновь создаваемых файлов), он также связан с набором дополнительных групп. Проверки безопасности, которые используются для обеспечения того, что процесс относится к определенной группе (и только этой группе), теперь позволяет обеспечить доступ и в случае, когда данная группа является одной из дополнительных групп, к которым процесс относится. Макрос sysconf() по имени _SC_NGROUPS_МАХ специфицирует, к скольким дополнительным группам может относиться процесс. (Подробно о sysconf() см. главу 6.) В Linux 2.4 и более ранних версиях _SC_NGROUPS_MAX был равен 32. В Linux 2.6 и последующих версиях _SC_NGROUPS_MAX равен 65536. Не используйте статические массивы для хранения дополнительных групп. Вместо этого выделяйте память динамически, принимая во внимания значение, возвращаемое sysconf(_SC_NGROUPS_MAX). Старый код может пользоваться макросом NGROUPS_MAX для определения количества поддерживаемых групп, установленных в системе. Этот макрос не обеспечивает корректную работу, когда код компилируется в одной среде, а используется в другой.

Установка списка групп для процесса осуществляется системным вызовом setgroups() и может быть выполнена процессом, имеющим полномочия root.

int setgroups(size_t num, const gid_t * list);

Параметр list указывает на массив из num идентификаторов групп gid. Дополнительная группа процесса устанавливается этим списком идентификаторов групп, переданным в массиве list.

Функция getgroups() позволяет получить список дополнительных групп, установленных для процесса.

int getgroups(size_t num, gid_t * list);

list должен указывать на массив элементов типа gid_t, который наполняется идентификаторами дополнительной группы процесса, a num определяет, сколько элементов может типа gid_t содержать list. В случае ошибки системный вызов getgroups() возвращает -1 (обычно это происходит, когда list недостаточно велик, чтобы вместить дополнительный список групп процесса), или же количество дополнительных групп. В особом случае, когда num равно 0, getgroups() просто возвращает количество дополнительных групп процесса.

Ниже показан пример использования getgroups().

gid_t *groupList;

int numGroups;

numGroups = getgroups(0, groupList);

if (numGroups) {

 groupList = alloca(numGroups * sizeof(gid_t));

 getgroups(numGroups, groupList);

}

Более сложный пример getgroups() приведен в главе 28.

Таким образом, процесс имеет uid, первичный gid и набор дополнительных групп, ассоциированных с ним. К счастью, это все, о чем нужно знать большинству программистов. Существуют два класса программ, которым необходимо очень гибкое управление идентификаторами пользователей и групп — это программы setuid/setgid и системные демоны.

Системные демоны — это программы, которые всегда запущены в системе и выполняют определенные действия в ответ на внешние воздействия. Например, большинство демонов World Wide Web (http) функционируют всегда, ожидая подключения к ним клиента, чтобы обрабатывать клиентские запросы. Другие демоны, такие как cron (которые запускаются периодически), пребывают в спящем состоянии до тех пор, пока не наступает время, когда они должны выполнить какие-то действия. Большинство демонов должны быть запущены с полномочиями root, но выполняют действия по запросу пользователя, который может попытаться нарушить системную безопасность с помощью демонов.

ftp — хороший пример демона, который нуждается в гибком управлении uid. Изначально он запускается с правами root и затем переключает свой uid на uid пользователя, который подключился к нему (большинство систем запускают дополнительный процесс для обработки каждого ftp-запроса, поэтому такой подход работает достаточно хорошо). Это оставляет работу по проверке доступа к файлам ядру, к которому он относится. Однако в некоторых случаях демон ftp должен открывать сетевое подключение таким способом, который разрешен только root, поскольку пользовательские процессы не могут выдать сами себе административные полномочия (по вполне ясной причине), но сохранение идентификатора uid пользователя root вместо переключения на пользовательский uid должен потребовать от демона ftp самостоятельной проверки всего доступа к файловой системе. Решение этой дилеммы применяется симметрично — к обоим uid и первичным gid, поэтому мы и говорим здесь об uid.

В действительности процесс имеет три uid: реальный, сохраненный и эффективный uid[17]. Эффективный uid используется для всех проверок безопасности и является единственным uid процесса, который обычно имеет какой-то эффект.

Сохраненный и действительный идентификаторы uid проверяются только тогда, когда процесс пытается изменить его эффективный uid. Любой процесс может изменять свой эффективный uid на сохраненный или действительный. Только процессы с эффективным uid, равным 0 (процессы, запущенные от имени root), могут изменять свой эффективный uid на произвольное значение.

Обычно эффективный, реальный и действительный uid процесса совпадают. Однако этот механизм решает дилемму демона ftp. Когда он запускается, все его идентификаторы устанавливаются в 0, что предоставляет ему полномочия root. Когда подключается пользователь, демон устанавливает свой эффективный uid равным uid пользователя, оставляя сохраненный и действительный uid равными 0. Когда демону ftp требуется выполнить действие, разрешенное только root, он устанавливает свой эффективный uid в 0, выполняет действие, а затем переустанавливает эффективный uid в значение uid подключенного пользователя.

Хотя демон ftp вообще не нуждается в сохраненном uid, другие классы программ, применяющие этот механизм — двоичные модули setuid и setgid — используют его.

Программа passwd — это простой пример того, зачем нужна функциональность setuid и setgid. Программа passwd позволяет пользователям изменять свои пароли. Пользовательские пароли обычно хранятся в файле /etc/passwd. Выполнять запись в этот файл может только пользователь root, что предотвращает изменение информации о пользователях другими пользователями. Но пользователи должны иметь возможность изменять свои собственные пароли, поэтому необходим какой-то способ предоставить программе passwd права на изменение /etc/passwd.

Чтобы обеспечить эту гибкость, пользователь программы может устанавливать специальные биты в группе бит прав доступа этой программы (см. главу 11). Это сообщает ядру, что всякий раз, когда программа запускается, она должна выполняться с тем же эффективным uid (или gid), как у пользователя, который владеет файлом программы, независимо от того, какой пользователь запустил программу. Такие программы называются setuid- или setgid-программами.

Принадлежность программы passwd пользователю root и установка бита setuid в наборе битов доступа программы позволяют всем пользователям изменять свои пароли. Когда пользователь запускает passwd, эта программа выполняется с эффективным идентификатором пользователя 0, что позволяет ей модифицировать /etc/passwd и изменять пользовательский пароль. Конечно, passwd должна быть реализована очень тщательно, дабы исключить побочные эффекты. Программы setuid — это популярная цель для злоумышленников, проникающих в систему, поэтому плохо написанная программа подобного рода дает простую возможность получить неавторизованный доступ.

Существуют много случаев, когда программы setuid требуют специальных прав доступа на короткий период времени и должны переключаться на uid действительного пользователя в остальное время (как это делает демон ftp). Программы setuid имеют установленный эффективный uid равным uid ее владельца, но они также "знают" uid того пользователя, который их запустил (сохраненный uid), что упрощает обратное переключение. В дополнение они могут устанавливать свой действительный uid в значение setuid (не затрагивая сохраненный uid), при необходимости повторно получая эти специальные полномочия. В этой ситуации эффективный, сохраненный и действительный идентификаторы пользователя работают вместе, насколько возможно, упрощая систему безопасности.

К несчастью, применение этого механизма может сбивать с толку, поскольку в POSIX и BSD применяются слегка отличающиеся подходы, a Linux поддерживает оба. Решение BSD более полнофункционально, чем метод POSIX. Оно использует функцию setreuid().

int setreuid(uid_t ruid, uid_t euid);

Действительный uid процесса устанавливается в ruid, а эффективный — в euid. Если любой из параметров равен -1, идентификатор вызовом не затрагивается.

Если эффективный uid процесса равен 0, такой вызов всегда выполняется успешно. В противном случае идентификаторы могут быть установлены равными либо сохраненному uid, либо реальному uid процесса. Следует отметить, что этот вызов никогда не изменяет сохраненный uid или реальный uid текущего процесса. Чтобы сделать это, используйте функцию POSIX setuid(), которая может модифицировать сохраненный uid.

int setuid(uid_t euid);

Как и в случае setreuid() эффективный uid процесса устанавливается в euid, если euid равен действительному uid процесса либо эффективный uid процесса на момент вызова равен 0.

Когда setuid() используется процессом, чей эффективный uid установлен в 0, все uid процесса изменяются на euid. К сожалению, это делает невозможным использование setreuid() в setuid-программах, которым нужно временное использование другого uid, поскольку после вызова setreuid() процесс не может восстановить свои полномочия root.

Хотя способность переключать uid упрощает написание кода, с помощью которого нельзя нарушить безопасность системы, все же это не панацея. Существует очень много популярных методов обманного проникновения в выполняющийся код [18]. До тех пор пока либо сохраненный, либо действительный uid процесса равен 0, такие атаки легко могут устанавливать эффективный uid процесса в 0. Это не дает возможности переключению uid эффективно предотвращать серьезную уязвимость системных программ. Однако если процесс может передать любой доступ к полномочиям root, устанавливая эффективный, сохраненный и действительный идентификаторы в ненулевые значения, это ограничивает эффективность любых атак против него.

10.2.3. Идентификатор uid файловой системы

В очень специальных случаях программе может понадобиться сохранять свои права root для всего, кроме доступа к файловой системе, при котором она использует пользовательский uid. Изначально использовавшийся в Linux NFS-сервер пространства пользователя может служить иллюстрацией проблемы, которая возникает, когда процесс предполагает применение пользовательского uid. Хотя NFS-сервер в прошлом применял setreuid() для переключения uid при доступе к файловой системе, такое поведение позволяло пользователю, чей uid совпадает с uid NFS-сервера, уничтожать NFS-сервер. В конечном итоге, пользователь получал владение процессом NFS-сервера. Чтобы предотвратить проблемы подобного рода, Linux использует uid файловой системы (fsuid) для контроля доступа к файловой системе.

Всякий раз когда изменяется эффективный uid процесса, его fsuid устанавливается равным новому эффективному идентификатору пользователя, что делает fsuid прозрачным для большинства приложений. Те приложения, которые нуждаются в дополнительных возможностях, предоставляемых отличающимся значением fsuid, должны применять вызов setfsuid() для явной установки fsuid.

int setfsuid(uid_t uid);

Значение fsuid может быть установлено равным текущим эффективному, сохраненному или действительному идентификаторам пользователя. В дополнение следует сказать, что setfsuid() выполняется успешно, если fsuid остается неизменным или эффективный uid процесса равен 0.




10.2.2. Сертификаты : Майкл Джонсон

страницы в данном разделе 
Разработка приложений в среде Linux. Второе издание Linux Application Development. Second Edition : Майкл Джонсон Часть I Начало работы : Майкл Джонсон
1.1. Краткая история свободного программного обеспечения Unix : Майкл Джонсон 1.2. Разработка Linux : Майкл Джонсон
1.3. Важные факты в создании систем Unix : Майкл Джонсон Глава 2 Лицензии и авторские права : Майкл Джонсон
2.1. Авторское право : Майкл Джонсон 2.2. Лицензирование : Майкл Джонсон
2.3. Лицензии на свободное ПО : Майкл Джонсон 2.3.6. Несовместимости лицензий : Майкл Джонсон
Глава 3 Онлайновая системная документация : Майкл Джонсон 3.1. Оперативные страницы руководства : Майкл Джонсон
1.1. Краткая история свободного программного обеспечения Unix : Майкл Джонсон 1.2. Разработка Linux : Майкл Джонсон
1.3. Важные факты в создании систем Unix : Майкл Джонсон 1.1. Краткая история свободного программного обеспечения Unix : Майкл Джонсон
1.2. Разработка Linux : Майкл Джонсон 1.3. Важные факты в создании систем Unix : Майкл Джонсон
2.1. Авторское право : Майкл Джонсон 2.2. Лицензирование : Майкл Джонсон
2.3. Лицензии на свободное ПО : Майкл Джонсон 2.3.6. Несовместимости лицензий : Майкл Джонсон
2.1. Авторское право : Майкл Джонсон 2.2. Лицензирование : Майкл Джонсон
2.3.6. Несовместимости лицензий : Майкл Джонсон 2.3.6. Несовместимости лицензий : Майкл Джонсон
3.1. Оперативные страницы руководства : Майкл Джонсон 3.1. Оперативные страницы руководства : Майкл Джонсон
Часть II Инструментальные средства и среда разработки : Майкл Джонсон продолжение 29 : Майкл Джонсон
4.1. Редакторы : Майкл Джонсон продолжение 31 : Майкл Джонсон
4.1.1. Emacs : Майкл Джонсон 4.2. make : Майкл Джонсон
продолжение 34 : Майкл Джонсон 4.2.1 Сложные командные строки : Майкл Джонсон
4.2.2. Переменные : Майкл Джонсон 4.2.3. Суффиксные правила : Майкл Джонсон
4.3. Отладчик GNU : Майкл Джонсон 4.4. Действия при трассировке программы : Майкл Джонсон
Глава 5 Опции и расширения gcc : Майкл Джонсон 5.1. Опции gcc : Майкл Джонсон
5.2. Заголовочные файлы : Майкл Джонсон Глава 6 Библиотека GNU C : Майкл Джонсон
6.1. Выбор возможностей glibc : Майкл Джонсон 6.2. Интерфейсы POSIX : Майкл Джонсон
6.2.1. Обязательные типы POSIX : Майкл Джонсон 6.2.2. Раскрытие возможностей времени выполнения : Майкл Джонсон
6.2.3. Поиск и настройка базовой системной информации : Майкл Джонсон 6.3. Совместимость : Майкл Джонсон
Глава 7 Средства отладки использования памяти : Майкл Джонсон 7.1. Код, содержащий ошибки : Майкл Джонсон
7.2. Средства проверки памяти, входящие в состав glibc : Майкл Джонсон 7.2.1. Поиск повреждений кучи : Майкл Джонсон
7.2.2. Использование mtrace() для отслеживания распределений памяти : Майкл Джонсон 7.3. Поиск утечек памяти с помощью mpr : Майкл Джонсон
7.4. Обнаружение ошибок памяти с помощью Valgrind : Майкл Джонсон 7.5. Electric Fence : Майкл Джонсон
7.5.2. Выравнивание памяти : Майкл Джонсон Глава 8 Создание и использование библиотек : Майкл Джонсон
8.2. Совместно используемые библиотеки : Майкл Джонсон 8.3. Разработка совместно используемых библиотек : Майкл Джонсон
8.3.1. Управление совместимостью : Майкл Джонсон 8.4. Сборка совместно используемых библиотек : Майкл Джонсон
8.5. Инсталляция совместно используемых библиотек : Майкл Джонсон продолжение 65 : Майкл Джонсон
8.5.1. Пример : Майкл Джонсон 8.6. Работа с совместно используемыми библиотеками : Майкл Джонсон
Глава 9 Системное окружение Linux : Майкл Джонсон 9.1. Окружение процесса : Майкл Джонсон
9.2. Системные вызовы : Майкл Джонсон продолжение 71 : Майкл Джонсон
9.2.2. Коды возврата системных вызов : Майкл Джонсон 9.2.3. Использование системных вызовов : Майкл Джонсон
9.2.4. Общие коды возврата ошибок : Майкл Джонсон Глава 4 Инструментальные средства разработки : Майкл Джонсон
4.1. Редакторы : Майкл Джонсон продолжение 77 : Майкл Джонсон
4.1.1. Emacs : Майкл Джонсон 4.2. make : Майкл Джонсон
продолжение 80 : Майкл Джонсон 4.2.1 Сложные командные строки : Майкл Джонсон
4.2.2. Переменные : Майкл Джонсон 4.2.3. Суффиксные правила : Майкл Джонсон
4.3. Отладчик GNU : Майкл Джонсон 4.4. Действия при трассировке программы : Майкл Джонсон
продолжение 86 4.1. Редакторы : Майкл Джонсон
4.1.1. Emacs : Майкл Джонсон продолжение 89
4.1.1. Emacs : Майкл Джонсон 4.2. make : Майкл Джонсон
4.2.1 Сложные командные строки : Майкл Джонсон 4.2.2. Переменные : Майкл Джонсон
4.2.3. Суффиксные правила : Майкл Джонсон продолжение 95
4.2.1 Сложные командные строки : Майкл Джонсон 4.2.2. Переменные : Майкл Джонсон
4.2.3. Суффиксные правила : Майкл Джонсон 4.3. Отладчик GNU : Майкл Джонсон
4.4. Действия при трассировке программы : Майкл Джонсон 5.1. Опции gcc : Майкл Джонсон
5.2. Заголовочные файлы : Майкл Джонсон 5.1. Опции gcc : Майкл Джонсон
6.1. Выбор возможностей glibc : Майкл Джонсон 6.2. Интерфейсы POSIX : Майкл Джонсон
6.2.1. Обязательные типы POSIX : Майкл Джонсон 6.2.2. Раскрытие возможностей времени выполнения : Майкл Джонсон
6.2.3. Поиск и настройка базовой системной информации : Майкл Джонсон 6.3. Совместимость : Майкл Джонсон
6.1. Выбор возможностей glibc : Майкл Джонсон 6.2. Интерфейсы POSIX : Майкл Джонсон
6.2.2. Раскрытие возможностей времени выполнения : Майкл Джонсон 6.2.3. Поиск и настройка базовой системной информации : Майкл Джонсон
6.2.1. Обязательные типы POSIX : Майкл Джонсон 6.2.2. Раскрытие возможностей времени выполнения : Майкл Джонсон
6.2.3. Поиск и настройка базовой системной информации : Майкл Джонсон 6.3. Совместимость : Майкл Джонсон
7.1. Код, содержащий ошибки : Майкл Джонсон 7.2. Средства проверки памяти, входящие в состав glibc : Майкл Джонсон
7.2.1. Поиск повреждений кучи : Майкл Джонсон 7.2.2. Использование mtrace() для отслеживания распределений памяти : Майкл Джонсон
7.3. Поиск утечек памяти с помощью mpr : Майкл Джонсон 7.4. Обнаружение ошибок памяти с помощью Valgrind : Майкл Джонсон
7.5. Electric Fence : Майкл Джонсон 7.5.2. Выравнивание памяти : Майкл Джонсон
7.1. Код, содержащий ошибки : Майкл Джонсон 7.2.1. Поиск повреждений кучи : Майкл Джонсон
7.2.2. Использование mtrace() для отслеживания распределений памяти : Майкл Джонсон 7.2.1. Поиск повреждений кучи : Майкл Джонсон
7.2.2. Использование mtrace() для отслеживания распределений памяти : Майкл Джонсон 7.3. Поиск утечек памяти с помощью mpr : Майкл Джонсон
7.4. Обнаружение ошибок памяти с помощью Valgrind : Майкл Джонсон 7.5.2. Выравнивание памяти : Майкл Джонсон
7.5.1. Использование Electric Fence : Майкл Джонсон 7.5.2. Выравнивание памяти : Майкл Джонсон
8.2. Совместно используемые библиотеки : Майкл Джонсон 8.3. Разработка совместно используемых библиотек : Майкл Джонсон
8.3.1. Управление совместимостью : Майкл Джонсон 8.4. Сборка совместно используемых библиотек : Майкл Джонсон
8.5. Инсталляция совместно используемых библиотек : Майкл Джонсон продолжение 141 : Майкл Джонсон
8.5.1. Пример : Майкл Джонсон 8.6. Работа с совместно используемыми библиотеками : Майкл Джонсон
8.2. Совместно используемые библиотеки : Майкл Джонсон 8.3.1. Управление совместимостью : Майкл Джонсон
8.3.1. Управление совместимостью : Майкл Джонсон 8.4. Сборка совместно используемых библиотек : Майкл Джонсон
8.5. Инсталляция совместно используемых библиотек : Майкл Джонсон 8.5.1. Пример : Майкл Джонсон
продолжение 150 8.5.1. Пример : Майкл Джонсон
9.1. Окружение процесса : Майкл Джонсон 9.2. Системные вызовы : Майкл Джонсон
продолжение 154 : Майкл Джонсон 9.2.2. Коды возврата системных вызов : Майкл Джонсон
9.2.3. Использование системных вызовов : Майкл Джонсон 9.2.4. Общие коды возврата ошибок : Майкл Джонсон
9.1. Окружение процесса : Майкл Джонсон 9.2. Системные вызовы : Майкл Джонсон
9.2.2. Коды возврата системных вызов : Майкл Джонсон 9.2.3. Использование системных вызовов : Майкл Джонсон
9.2.4. Общие коды возврата ошибок : Майкл Джонсон продолжение 163
9.2.2. Коды возврата системных вызов : Майкл Джонсон 9.2.3. Использование системных вызовов : Майкл Джонсон
9.2.4. Общие коды возврата ошибок : Майкл Джонсон Часть III Системное программирование : Майкл Джонсон
10.1. Определение процесса : Майкл Джонсон 10.2 Атрибуты процессов : Майкл Джонсон
10.2.1. Идентификатор процесса и происхождение : Майкл Джонсон 10.2.2. Сертификаты : Майкл Джонсон
10.2.4. Резюме по идентификаторам пользователей и групп : Майкл Джонсон 10.3. Информация о процессе : Майкл Джонсон
10.3.1. Аргументы программы : Майкл Джонсон 10.3.2 Использование ресурсов : Майкл Джонсон
10.3.3. Применение ограничений использования ресурсов : Майкл Джонсон 10.4. Примитивы процессов : Майкл Джонсон
10.4.2. Наблюдение за уничтожением дочерних процессов : Майкл Джонсон 10.4.3. Запуск новых программ : Майкл Джонсон
10.4.6. Уничтожение других процессов : Майкл Джонсон 10.5. Простые дочерние процессы : Майкл Джонсон
10.5.2. Чтение и запись из процесса : Майкл Джонсон 10.6. Сеансы и группы процессов : Майкл Джонсон
10.6.3. Группы процессов : Майкл Джонсон 10.6.4. Висячие группы процессов : Майкл Джонсон
10.7. Введение в ladsh : Майкл Джонсон 10.7.1. Запуск внешних программ с помощью ladsh : Майкл Джонсон
10.8. Создание клонов : Майкл Джонсон Глава 11 Простое управление файлами : Майкл Джонсон
продолжение 190 : Майкл Джонсон 11.1. Режим файла : Майкл Джонсон
11.1.1. Права доступа к файлу : Майкл Джонсон 11.1.2. Модификаторы прав доступа к файлам : Майкл Джонсон
11.1.3. Типы файлов : Майкл Джонсон 11.1.4. Маска umask процесса : Майкл Джонсон
11.2. Основные файловые операции : Майкл Джонсон 11.2.1. Файловые дескрипторы : Майкл Джонсон
11.2.3. Открытие файлов в файловой системе : Майкл Джонсон 11.2.4. Чтение, запись и перемещение : Майкл Джонсон
11.2.5. Частичное чтение и запись : Майкл Джонсон 11.2.7. Синхронизация файлов : Майкл Джонсон
11.3. Запрос и изменение информации inode : Майкл Джонсон 11.3.1. Поиск информации inode : Майкл Джонсон
11.3.2. Простой пример stat() : Майкл Джонсон 11.3.7. Расширенные атрибуты Ext3 : Майкл Джонсон
11.4. Манипулирование содержимым каталогов : Майкл Джонсон 11.4.1. Создание входных точек устройств и именованных каналов : Майкл Джонсон
11.4.3. Использование символических ссылок : Майкл Джонсон 11.5. Манипуляции файловыми дескрипторами : Майкл Джонсон
11.5.3. Дублирование файловых дескрипторов : Майкл Джонсон 11.7. Добавление перенаправления для ladsh : Майкл Джонсон
11.7.1. Структуры данных : Майкл Джонсон 11.7.2. Изменения в коде : Майкл Джонсон
Глава 12 Обработка сигналов : Майкл Джонсон продолжение 215 : Майкл Джонсон
12.1. Концепция сигналов : Майкл Джонсон 12.1.2. Простые сигналы : Майкл Джонсон
12.1.3. Надежные сигналы : Майкл Джонсон 12.1.4. Сигналы и системные вызовы : Майкл Джонсон
12.2. Программный интерфейс сигналов Linux и POSIX : Майкл Джонсон 12.2.3. Перехват сигналов : Майкл Джонсон
12.2.4. Манипулирование маской сигналов процесса : Майкл Джонсон 12.3. Доступные сигналы : Майкл Джонсон
продолжение 224 : Майкл Джонсон 12.4. Написание обработчиков сигналов : Майкл Джонсон
12.5. Повторное открытие журнальных файлов : Майкл Джонсон 12.6. Сигналы реального времени : Майкл Джонсон
12.6.1. Очередность и порядок сигналов : Майкл Джонсон 12.7. Дополнительные сведения о сигналах : Майкл Джонсон
12.7.1. Получение контекста сигнала : Майкл Джонсон 12.7.2. Отправка данных с сигналом : Майкл Джонсон
Глава 13 Расширенная обработка файлов : Майкл Джонсон 13.1. Мультиплексирование входных и выходных данных : Майкл Джонсон
продолжение 234 : Майкл Джонсон 13.1.1. Неблокируемый ввод-вывод : Майкл Джонсон
13.1.2. Мультиплексирование с помощью poll() : Майкл Джонсон 13.1.3. Мультиплексирование с помощью select() : Майкл Джонсон
13.1.4. Сравнение poll() и select() : Майкл Джонсон 13.1.5. Мультиплексирование с помощью epoll : Майкл Джонсон
13.1.6 Сравнение poll() и epoll : Майкл Джонсон 13.2. Отображение в памяти : Майкл Джонсон
13.2.2. Установка отображения в памяти : Майкл Джонсон 13.2.4. Синхронизация областей памяти на диск : Майкл Джонсон
13.2.5. Блокировка областей памяти : Майкл Джонсон 13.3. Блокирование файлов : Майкл Джонсон
13.3.1. Блокировочные файлы : Майкл Джонсон 13.3.2. Блокировка записей : Майкл Джонсон
13.3.4. Аренда файла : Майкл Джонсон 13.4. Альтернативы read() и write() : Майкл Джонсон
13.4.1. Разбросанное/сборное чтение и запись : Майкл Джонсон 13.4.2. Игнорирование указателя файла : Майкл Джонсон
Глава 14 Операции с каталогами : Майкл Джонсон 14.1. Текущий рабочий каталог : Майкл Джонсон
14.1.1. Поиск текущего рабочего каталога : Майкл Джонсон 14.4. Чтение содержимого каталога : Майкл Джонсон
продолжение 256 : Майкл Джонсон 14.5. Универсализация файловых имен : Майкл Джонсон
14.5.2. Внутренняя универсализация : Майкл Джонсон 14.6. Добавление к ladsh возможностей работы с каталогами и универсализацией : Майкл Джонсон
14.6.2. Добавление универсализации файловых имен : Майкл Джонсон 14.7. Обход деревьев файловых систем : Майкл Джонсон
14.7.1. Использование ftw() : Майкл Джонсон 14.7.2. Обход дерева файлов с помощью nft() : Майкл Джонсон
14.7.3. Реализация find : Майкл Джонсон 14.8. Уведомление о смене каталога : Майкл Джонсон
Глава 15 Управление заданиями : Майкл Джонсон 15.1. Основы управления заданиями : Майкл Джонсон
15.1.3. Обработка сигналов управления заданиями : Майкл Джонсон 15.2. Управление заданиями в ladsh : Майкл Джонсон
Глава 16 Терминалы и псевдотерминалы : Майкл Джонсон продолжение 271 : Майкл Джонсон
16.1. Операции tty : Майкл Джонсон 16.1.2. Управляющие терминалы : Майкл Джонсон
16.1.4. Запись с помощью utempter : Майкл Джонсон 16.1.5. Запись вручную : Майкл Джонсон
16.2. Обзор termios : Майкл Джонсон 16.3. Примеры использования termios : Майкл Джонсон
16.3.1. Пароли : Майкл Джонсон 16.3.2. Последовательные коммуникации : Майкл Джонсон
16.4. Отладка termios : Майкл Джонсон 16.5. Справочник по termios : Майкл Джонсон
16.5.1. Функции : Майкл Джонсон 16.5.4. Флаги режима ввода : Майкл Джонсон
16.5.5. Флаги режима вывода : Майкл Джонсон 16.5.6. Управляющие флаги : Майкл Джонсон
16.5.7. Управляющие символы : Майкл Джонсон 16.5.8. Локальные флаги : Майкл Джонсон
16.5.9. Управление read() : Майкл Джонсон 16.6. Псевдотерминалы : Майкл Джонсон
16.6.1. Открытие псевдотерминалов : Майкл Джонсон 16.6.2. Простые способы открытия псевдотерминалов : Майкл Джонсон
16.6.3. Сложные способы открытия псевдотерминалов : Майкл Джонсон 16.6.4. Примеры псевдотерминалов : Майкл Джонсон
Глава 17 Работа в сети с помощью сокетов : Майкл Джонсон 17.1. Поддержка протоколов : Майкл Джонсон
17.1.3. Как заставить реальность играть по точным правилам? : Майкл Джонсон 17.1.4. Адреса : Майкл Джонсон
17.3. Основные действия с сокетами : Майкл Джонсон 17.3.1. Создание сокета : Майкл Джонсон
17.3.4. Ожидание соединений : Майкл Джонсон 17.4. Сокеты домена Unix : Майкл Джонсон
17.4.2. Ожидание соединения : Майкл Джонсон 17.4.6. Передача файловых дескрипторов : Майкл Джонсон
17.5. Сетевая обработка с помощью TCP/IP : Майкл Джонсон 17.5.1. Упорядочение байтов : Майкл Джонсон
17.5.2. Адресация IPv4 : Майкл Джонсон 17.5.3. Адресация IPv6 : Майкл Джонсон
17.5.4. Манипулирование IP-адресами : Майкл Джонсон 17.5.5. Преобразование имен в адреса : Майкл Джонсон
17.5.6. Преобразование адресов в имена : Майкл Джонсон 17.5.7. Ожидание TCP-соединений : Майкл Джонсон
17.5.8. Клиентские приложения TCP : Майкл Джонсон 17.6. Использование дейтаграмм UDP : Майкл Джонсон
продолжение 314 : Майкл Джонсон 17.6.1. Создание UDP-сокета : Майкл Джонсон
17.6.2. Отправка и получение дейтаграмм : Майкл Джонсон 17.6.3. Простой tftp-сервер : Майкл Джонсон
17.7. Ошибки сокетов : Майкл Джонсон 17.8. Унаследованные сетевые функции : Майкл Джонсон
17.8.1. Манипулирование IPv4-адресами : Майкл Джонсон 17.8.2. Преобразование имен хостов : Майкл Джонсон
17.8.3. Пример поиска информации хоста с использованием унаследованных функций : Майкл Джонсон 17.8.4. Поиск номеров портов : Майкл Джонсон
Глава 18 Время : Майкл Джонсон 18.1. Вывод времени и даты : Майкл Джонсон
18.1.1. Представление времени : Майкл Джонсон 18.1.2. Преобразование, форматирование и разбор значений времени : Майкл Джонсон
18.1.3. Ограничения, связанные со временем : Майкл Джонсон 18.2. Использование таймеров : Майкл Джонсон
18.2.1. Режим ожидания : Майкл Джонсон 18.2.2. Интервальные таймеры : Майкл Джонсон
Глава 19 Случайные числа : Майкл Джонсон 19.1. Псевдослучайные числа : Майкл Джонсон
19.2. Криптография и случайные числа : Майкл Джонсон Глава 20 Программирование виртуальных консолей : Майкл Джонсон
продолжение 336 : Майкл Джонсон 20.1. Начало работы : Майкл Джонсон
20.5. Управление переключением виртуальных консолей : Майкл Джонсон 20.6. Пример команды open : Майкл Джонсон
Глава 21 Консоль Linux : Майкл Джонсон продолжение 341 : Майкл Джонсон
21.1. Базы данных возможностей : Майкл Джонсон 21.3. Возможности консоли Linux : Майкл Джонсон
продолжение 344 : Майкл Джонсон 21.3.1. Управляющие символы : Майкл Джонсон
21.3.2. Управляющие последовательности : Майкл Джонсон 21.3.4. Составные управляющие последовательности : Майкл Джонсон
21.4. Прямой вывод на экран : Майкл Джонсон Глава 22 Написание защищенных программ : Майкл Джонсон
22.1. Когда безопасность имеет значение? : Майкл Джонсон продолжение 351 : Майкл Джонсон
22.1.1. Когда выходит из строя система безопасности? : Майкл Джонсон 22.2. Минимизация возможности появления атак : Майкл Джонсон
22.2.1. Передача полномочий : Майкл Джонсон 22.2.2. Получение вспомогательной программы : Майкл Джонсон
22.3. Общие бреши системы безопасности : Майкл Джонсон 22.3.1. Переполнение буфера : Майкл Джонсон
22.3.3. Переменные окружения : Майкл Джонсон 22.3.5. Создание временных файлов : Майкл Джонсон
22.3.6. Режимы состязаний и обработчики сигналов : Майкл Джонсон 22.4. Запуск в качестве демона : Майкл Джонсон
10.1. Определение процесса : Майкл Джонсон 10.2 Атрибуты процессов : Майкл Джонсон
10.2.1. Идентификатор процесса и происхождение : Майкл Джонсон 10.2.2. Сертификаты : Майкл Джонсон
10.2.4. Резюме по идентификаторам пользователей и групп : Майкл Джонсон 10.3. Информация о процессе : Майкл Джонсон
10.3.1. Аргументы программы : Майкл Джонсон 10.3.2 Использование ресурсов : Майкл Джонсон
10.3.3. Применение ограничений использования ресурсов : Майкл Джонсон 10.4. Примитивы процессов : Майкл Джонсон
10.4.2. Наблюдение за уничтожением дочерних процессов : Майкл Джонсон 10.4.3. Запуск новых программ : Майкл Джонсон
10.4.6. Уничтожение других процессов : Майкл Джонсон 10.5. Простые дочерние процессы : Майкл Джонсон
10.5.2. Чтение и запись из процесса : Майкл Джонсон 10.6. Сеансы и группы процессов : Майкл Джонсон
10.6.3. Группы процессов : Майкл Джонсон 10.6.4. Висячие группы процессов : Майкл Джонсон
10.7. Введение в ladsh : Майкл Джонсон 10.7.1. Запуск внешних программ с помощью ladsh : Майкл Джонсон
10.8. Создание клонов : Майкл Джонсон 10.2 Атрибуты процессов : Майкл Джонсон
10.2.2. Сертификаты : Майкл Джонсон 10.2.4. Резюме по идентификаторам пользователей и групп : Майкл Джонсон
10.2.1. Идентификатор процесса и происхождение : Майкл Джонсон 10.2.2. Сертификаты : Майкл Джонсон
10.2.4. Резюме по идентификаторам пользователей и групп : Майкл Джонсон 10.3.1. Аргументы программы : Майкл Джонсон
10.3.2 Использование ресурсов : Майкл Джонсон 10.3.3. Применение ограничений использования ресурсов : Майкл Джонсон
10.3.1. Аргументы программы : Майкл Джонсон 10.3.2 Использование ресурсов : Майкл Джонсон
10.3.3. Применение ограничений использования ресурсов : Майкл Джонсон 10.4.2. Наблюдение за уничтожением дочерних процессов : Майкл Джонсон
10.4.3. Запуск новых программ : Майкл Джонсон 10.4.6. Уничтожение других процессов : Майкл Джонсон
10.4.2. Наблюдение за уничтожением дочерних процессов : Майкл Джонсон 10.4.3. Запуск новых программ : Майкл Джонсон
10.4.6. Уничтожение других процессов : Майкл Джонсон 10.5.2. Чтение и запись из процесса : Майкл Джонсон
10.5.2. Чтение и запись из процесса : Майкл Джонсон 10.6.3. Группы процессов : Майкл Джонсон
10.6.4. Висячие группы процессов : Майкл Джонсон 10.6.3. Группы процессов : Майкл Джонсон
10.6.4. Висячие группы процессов : Майкл Джонсон 10.7.1. Запуск внешних программ с помощью ladsh : Майкл Джонсон
10.7.1. Запуск внешних программ с помощью ladsh : Майкл Джонсон 10.8. Создание клонов : Майкл Джонсон
Глава 11 Простое управление файлами : Майкл Джонсон 11.1. Режим файла : Майкл Джонсон
11.1.1. Права доступа к файлу : Майкл Джонсон 11.1.2. Модификаторы прав доступа к файлам : Майкл Джонсон
11.1.3. Типы файлов : Майкл Джонсон 11.1.4. Маска umask процесса : Майкл Джонсон
11.2. Основные файловые операции : Майкл Джонсон 11.2.1. Файловые дескрипторы : Майкл Джонсон
11.2.3. Открытие файлов в файловой системе : Майкл Джонсон 11.2.4. Чтение, запись и перемещение : Майкл Джонсон
11.2.5. Частичное чтение и запись : Майкл Джонсон 11.2.7. Синхронизация файлов : Майкл Джонсон
11.3. Запрос и изменение информации inode : Майкл Джонсон 11.3.1. Поиск информации inode : Майкл Джонсон
11.3.2. Простой пример stat() : Майкл Джонсон 11.3.7. Расширенные атрибуты Ext3 : Майкл Джонсон
11.4. Манипулирование содержимым каталогов : Майкл Джонсон 11.4.1. Создание входных точек устройств и именованных каналов : Майкл Джонсон
11.4.3. Использование символических ссылок : Майкл Джонсон 11.5. Манипуляции файловыми дескрипторами : Майкл Джонсон
11.5.3. Дублирование файловых дескрипторов : Майкл Джонсон 11.7. Добавление перенаправления для ladsh : Майкл Джонсон
11.7.1. Структуры данных : Майкл Джонсон 11.7.2. Изменения в коде : Майкл Джонсон
продолжение 434 11.1.1. Права доступа к файлу : Майкл Джонсон
11.1.2. Модификаторы прав доступа к файлам : Майкл Джонсон 11.1.3. Типы файлов : Майкл Джонсон
11.1.4. Маска umask процесса : Майкл Джонсон 11.1.1. Права доступа к файлу : Майкл Джонсон
11.1.2. Модификаторы прав доступа к файлам : Майкл Джонсон 11.1.3. Типы файлов : Майкл Джонсон
11.1.4. Маска umask процесса : Майкл Джонсон 11.2.1. Файловые дескрипторы : Майкл Джонсон
11.2.3. Открытие файлов в файловой системе : Майкл Джонсон 11.2.4. Чтение, запись и перемещение : Майкл Джонсон
11.2.5. Частичное чтение и запись : Майкл Джонсон 11.2.7. Синхронизация файлов : Майкл Джонсон
11.2.1. Файловые дескрипторы : Майкл Джонсон 11.2.3. Открытие файлов в файловой системе : Майкл Джонсон
11.2.4. Чтение, запись и перемещение : Майкл Джонсон 11.2.5. Частичное чтение и запись : Майкл Джонсон
11.2.7. Синхронизация файлов : Майкл Джонсон 11.3. Запрос и изменение информации inode : Майкл Джонсон
11.3.2. Простой пример stat() : Майкл Джонсон 11.3.7. Расширенные атрибуты Ext3 : Майкл Джонсон
11.3.1. Поиск информации inode : Майкл Джонсон 11.3.2. Простой пример stat() : Майкл Джонсон
11.3.7. Расширенные атрибуты Ext3 : Майкл Джонсон 11.4.1. Создание входных точек устройств и именованных каналов : Майкл Джонсон
11.4.3. Использование символических ссылок : Майкл Джонсон 11.4.1. Создание входных точек устройств и именованных каналов : Майкл Джонсон
11.4.3. Использование символических ссылок : Майкл Джонсон 11.5.3. Дублирование файловых дескрипторов : Майкл Джонсон
11.5.3. Дублирование файловых дескрипторов : Майкл Джонсон 11.7.1. Структуры данных : Майкл Джонсон
11.7.2. Изменения в коде : Майкл Джонсон 11.7.1. Структуры данных : Майкл Джонсон
11.7.2. Изменения в коде : Майкл Джонсон Глава 12 Обработка сигналов : Майкл Джонсон
12.1. Концепция сигналов : Майкл Джонсон 12.1.2. Простые сигналы : Майкл Джонсон
12.1.3. Надежные сигналы : Майкл Джонсон 12.1.4. Сигналы и системные вызовы : Майкл Джонсон
12.2. Программный интерфейс сигналов Linux и POSIX : Майкл Джонсон 12.2.3. Перехват сигналов : Майкл Джонсон
12.2.4. Манипулирование маской сигналов процесса : Майкл Джонсон 12.3. Доступные сигналы : Майкл Джонсон
продолжение 478 : Майкл Джонсон 12.4. Написание обработчиков сигналов : Майкл Джонсон
12.5. Повторное открытие журнальных файлов : Майкл Джонсон 12.6. Сигналы реального времени : Майкл Джонсон
12.6.1. Очередность и порядок сигналов : Майкл Джонсон 12.7. Дополнительные сведения о сигналах : Майкл Джонсон
12.7.1. Получение контекста сигнала : Майкл Джонсон 12.7.2. Отправка данных с сигналом : Майкл Джонсон
продолжение 486 12.1.2. Простые сигналы : Майкл Джонсон
12.1.3. Надежные сигналы : Майкл Джонсон 12.1.4. Сигналы и системные вызовы : Майкл Джонсон
12.1.2. Простые сигналы : Майкл Джонсон 12.1.3. Надежные сигналы : Майкл Джонсон
12.1.4. Сигналы и системные вызовы : Майкл Джонсон 12.2.3. Перехват сигналов : Майкл Джонсон
12.2.4. Манипулирование маской сигналов процесса : Майкл Джонсон 12.2.3. Перехват сигналов : Майкл Джонсон
12.2.4. Манипулирование маской сигналов процесса : Майкл Джонсон 12.3. Доступные сигналы : Майкл Джонсон
продолжение 498 12.4. Написание обработчиков сигналов : Майкл Джонсон
12.5. Повторное открытие журнальных файлов : Майкл Джонсон 12.6.1. Очередность и порядок сигналов : Майкл Джонсон
12.6.1. Очередность и порядок сигналов : Майкл Джонсон 12.7.1. Получение контекста сигнала : Майкл Джонсон
12.7.2. Отправка данных с сигналом : Майкл Джонсон 12.7.1. Получение контекста сигнала : Майкл Джонсон
12.7.2. Отправка данных с сигналом : Майкл Джонсон 13.1. Мультиплексирование входных и выходных данных : Майкл Джонсон
продолжение 508 : Майкл Джонсон 13.1.1. Неблокируемый ввод-вывод : Майкл Джонсон
13.1.2. Мультиплексирование с помощью poll() : Майкл Джонсон 13.1.3. Мультиплексирование с помощью select() : Майкл Джонсон
13.1.4. Сравнение poll() и select() : Майкл Джонсон 13.1.5. Мультиплексирование с помощью epoll : Майкл Джонсон
13.1.6 Сравнение poll() и epoll : Майкл Джонсон 13.2. Отображение в памяти : Майкл Джонсон
13.2.2. Установка отображения в памяти : Майкл Джонсон 13.2.4. Синхронизация областей памяти на диск : Майкл Джонсон
13.2.5. Блокировка областей памяти : Майкл Джонсон 13.3. Блокирование файлов : Майкл Джонсон
13.3.1. Блокировочные файлы : Майкл Джонсон 13.3.2. Блокировка записей : Майкл Джонсон
13.3.4. Аренда файла : Майкл Джонсон 13.4. Альтернативы read() и write() : Майкл Джонсон
13.4.1. Разбросанное/сборное чтение и запись : Майкл Джонсон 13.4.2. Игнорирование указателя файла : Майкл Джонсон
13.1. Мультиплексирование входных и выходных данных : Майкл Джонсон 13.1.1. Неблокируемый ввод-вывод : Майкл Джонсон
13.1.2. Мультиплексирование с помощью poll() : Майкл Джонсон 13.1.3. Мультиплексирование с помощью select() : Майкл Джонсон
13.1.4. Сравнение poll() и select() : Майкл Джонсон 13.1.5. Мультиплексирование с помощью epoll : Майкл Джонсон
13.1.6 Сравнение poll() и epoll : Майкл Джонсон продолжение 533
13.1.1. Неблокируемый ввод-вывод : Майкл Джонсон 13.1.2. Мультиплексирование с помощью poll() : Майкл Джонсон
13.1.3. Мультиплексирование с помощью select() : Майкл Джонсон 13.1.4. Сравнение poll() и select() : Майкл Джонсон
13.1.5. Мультиплексирование с помощью epoll : Майкл Джонсон 13.1.6 Сравнение poll() и epoll : Майкл Джонсон
13.2.2. Установка отображения в памяти : Майкл Джонсон 13.2.4. Синхронизация областей памяти на диск : Майкл Джонсон
13.2.5. Блокировка областей памяти : Майкл Джонсон 13.2.2. Установка отображения в памяти : Майкл Джонсон
13.2.4. Синхронизация областей памяти на диск : Майкл Джонсон 13.2.5. Блокировка областей памяти : Майкл Джонсон
13.3.1. Блокировочные файлы : Майкл Джонсон 13.3.2. Блокировка записей : Майкл Джонсон
13.3.4. Аренда файла : Майкл Джонсон 13.3.1. Блокировочные файлы : Майкл Джонсон
13.3.2. Блокировка записей : Майкл Джонсон 13.3.4. Аренда файла : Майкл Джонсон
13.4.1. Разбросанное/сборное чтение и запись : Майкл Джонсон 13.4.2. Игнорирование указателя файла : Майкл Джонсон
13.4.1. Разбросанное/сборное чтение и запись : Майкл Джонсон 13.4.2. Игнорирование указателя файла : Майкл Джонсон
14.1. Текущий рабочий каталог : Майкл Джонсон 14.1.1. Поиск текущего рабочего каталога : Майкл Джонсон
14.4. Чтение содержимого каталога : Майкл Джонсон продолжение 559 : Майкл Джонсон
14.5. Универсализация файловых имен : Майкл Джонсон 14.5.2. Внутренняя универсализация : Майкл Джонсон
14.6. Добавление к ladsh возможностей работы с каталогами и универсализацией : Майкл Джонсон 14.6.2. Добавление универсализации файловых имен : Майкл Джонсон
14.7. Обход деревьев файловых систем : Майкл Джонсон 14.7.1. Использование ftw() : Майкл Джонсон
14.7.2. Обход дерева файлов с помощью nft() : Майкл Джонсон 14.7.3. Реализация find : Майкл Джонсон
14.8. Уведомление о смене каталога : Майкл Джонсон 14.1. Текущий рабочий каталог : Майкл Джонсон
14.1.1. Поиск текущего рабочего каталога : Майкл Джонсон 14.4. Чтение содержимого каталога : Майкл Джонсон
продолжение 572 14.5.2. Внутренняя универсализация : Майкл Джонсон
14.5.2. Внутренняя универсализация : Майкл Джонсон 14.6.2. Добавление универсализации файловых имен : Майкл Джонсон
14.6.2. Добавление универсализации файловых имен : Майкл Джонсон 14.7.1. Использование ftw() : Майкл Джонсон
14.7.2. Обход дерева файлов с помощью nft() : Майкл Джонсон 14.7.3. Реализация find : Майкл Джонсон
14.7.1. Использование ftw() : Майкл Джонсон 14.7.2. Обход дерева файлов с помощью nft() : Майкл Джонсон
14.7.3. Реализация find : Майкл Джонсон 14.8. Уведомление о смене каталога : Майкл Джонсон
15.1. Основы управления заданиями : Майкл Джонсон 15.1.3. Обработка сигналов управления заданиями : Майкл Джонсон
15.2. Управление заданиями в ladsh : Майкл Джонсон 15.1.3. Обработка сигналов управления заданиями : Майкл Джонсон
15.1.3. Обработка сигналов управления заданиями : Майкл Джонсон 15.2. Управление заданиями в ladsh : Майкл Джонсон
Глава 16 Терминалы и псевдотерминалы : Майкл Джонсон 16.1. Операции tty : Майкл Джонсон
16.1.2. Управляющие терминалы : Майкл Джонсон 16.1.4. Запись с помощью utempter : Майкл Джонсон
16.1.5. Запись вручную : Майкл Джонсон 16.2. Обзор termios : Майкл Джонсон
16.3. Примеры использования termios : Майкл Джонсон 16.3.1. Пароли : Майкл Джонсон
16.3.2. Последовательные коммуникации : Майкл Джонсон 16.4. Отладка termios : Майкл Джонсон
16.5. Справочник по termios : Майкл Джонсон 16.5.1. Функции : Майкл Джонсон
16.5.4. Флаги режима ввода : Майкл Джонсон 16.5.5. Флаги режима вывода : Майкл Джонсон
16.5.6. Управляющие флаги : Майкл Джонсон 16.5.7. Управляющие символы : Майкл Джонсон
16.5.8. Локальные флаги : Майкл Джонсон 16.5.9. Управление read() : Майкл Джонсон
16.6. Псевдотерминалы : Майкл Джонсон 16.6.1. Открытие псевдотерминалов : Майкл Джонсон
16.6.2. Простые способы открытия псевдотерминалов : Майкл Джонсон 16.6.3. Сложные способы открытия псевдотерминалов : Майкл Джонсон
16.6.4. Примеры псевдотерминалов : Майкл Джонсон продолжение 613
16.1.2. Управляющие терминалы : Майкл Джонсон 16.1.4. Запись с помощью utempter : Майкл Джонсон
16.1.5. Запись вручную : Майкл Джонсон 16.1.2. Управляющие терминалы : Майкл Джонсон
16.1.4. Запись с помощью utempter : Майкл Джонсон 16.1.5. Запись вручную : Майкл Джонсон
16.2. Обзор termios : Майкл Джонсон 16.3. Примеры использования termios : Майкл Джонсон
16.3.2. Последовательные коммуникации : Майкл Джонсон 16.3.1. Пароли : Майкл Джонсон
16.3.2. Последовательные коммуникации : Майкл Джонсон 16.4. Отладка termios : Майкл Джонсон
16.5.1. Функции : Майкл Джонсон 16.5.4. Флаги режима ввода : Майкл Джонсон
16.5.5. Флаги режима вывода : Майкл Джонсон 16.5.6. Управляющие флаги : Майкл Джонсон
16.5.7. Управляющие символы : Майкл Джонсон 16.5.8. Локальные флаги : Майкл Джонсон
16.5.9. Управление read() : Майкл Джонсон 16.5.1. Функции : Майкл Джонсон
16.5.4. Флаги режима ввода : Майкл Джонсон 16.5.5. Флаги режима вывода : Майкл Джонсон
16.5.6. Управляющие флаги : Майкл Джонсон 16.5.7. Управляющие символы : Майкл Джонсон
16.5.8. Локальные флаги : Майкл Джонсон 16.5.9. Управление read() : Майкл Джонсон
16.6.1. Открытие псевдотерминалов : Майкл Джонсон 16.6.2. Простые способы открытия псевдотерминалов : Майкл Джонсон
16.6.3. Сложные способы открытия псевдотерминалов : Майкл Джонсон 16.6.4. Примеры псевдотерминалов : Майкл Джонсон
16.6.1. Открытие псевдотерминалов : Майкл Джонсон 16.6.2. Простые способы открытия псевдотерминалов : Майкл Джонсон
16.6.3. Сложные способы открытия псевдотерминалов : Майкл Джонсон 16.6.4. Примеры псевдотерминалов : Майкл Джонсон
17.1. Поддержка протоколов : Майкл Джонсон 17.1.3. Как заставить реальность играть по точным правилам? : Майкл Джонсон
17.1.4. Адреса : Майкл Джонсон 17.3. Основные действия с сокетами : Майкл Джонсон
17.3.1. Создание сокета : Майкл Джонсон 17.3.4. Ожидание соединений : Майкл Джонсон
17.4. Сокеты домена Unix : Майкл Джонсон 17.4.2. Ожидание соединения : Майкл Джонсон
17.4.6. Передача файловых дескрипторов : Майкл Джонсон 17.5. Сетевая обработка с помощью TCP/IP : Майкл Джонсон
17.5.1. Упорядочение байтов : Майкл Джонсон 17.5.2. Адресация IPv4 : Майкл Джонсон
17.5.3. Адресация IPv6 : Майкл Джонсон 17.5.4. Манипулирование IP-адресами : Майкл Джонсон
17.5.5. Преобразование имен в адреса : Майкл Джонсон 17.5.6. Преобразование адресов в имена : Майкл Джонсон
17.5.7. Ожидание TCP-соединений : Майкл Джонсон 17.5.8. Клиентские приложения TCP : Майкл Джонсон
17.6. Использование дейтаграмм UDP : Майкл Джонсон продолжение 667 : Майкл Джонсон
17.6.1. Создание UDP-сокета : Майкл Джонсон 17.6.2. Отправка и получение дейтаграмм : Майкл Джонсон
17.6.3. Простой tftp-сервер : Майкл Джонсон 17.7. Ошибки сокетов : Майкл Джонсон
17.8. Унаследованные сетевые функции : Майкл Джонсон 17.8.1. Манипулирование IPv4-адресами : Майкл Джонсон
17.8.2. Преобразование имен хостов : Майкл Джонсон 17.8.3. Пример поиска информации хоста с использованием унаследованных функций : Майкл Джонсон
17.8.4. Поиск номеров портов : Майкл Джонсон 17.1.3. Как заставить реальность играть по точным правилам? : Майкл Джонсон
17.1.4. Адреса : Майкл Джонсон 17.1.3. Как заставить реальность играть по точным правилам? : Майкл Джонсон
17.1.4. Адреса : Майкл Джонсон 17.3.1. Создание сокета : Майкл Джонсон
17.3.4. Ожидание соединений : Майкл Джонсон 17.3.1. Создание сокета : Майкл Джонсон
17.3.4. Ожидание соединений : Майкл Джонсон 17.4.2. Ожидание соединения : Майкл Джонсон
17.4.6. Передача файловых дескрипторов : Майкл Джонсон продолжение 687
17.4.2. Ожидание соединения : Майкл Джонсон 17.4.6. Передача файловых дескрипторов : Майкл Джонсон
17.5.1. Упорядочение байтов : Майкл Джонсон 17.5.2. Адресация IPv4 : Майкл Джонсон
17.5.3. Адресация IPv6 : Майкл Джонсон 17.5.4. Манипулирование IP-адресами : Майкл Джонсон
17.5.5. Преобразование имен в адреса : Майкл Джонсон 17.5.6. Преобразование адресов в имена : Майкл Джонсон
17.5.7. Ожидание TCP-соединений : Майкл Джонсон 17.5.8. Клиентские приложения TCP : Майкл Джонсон
17.5.1. Упорядочение байтов : Майкл Джонсон 17.5.2. Адресация IPv4 : Майкл Джонсон
17.5.3. Адресация IPv6 : Майкл Джонсон 17.5.4. Манипулирование IP-адресами : Майкл Джонсон
17.5.5. Преобразование имен в адреса : Майкл Джонсон 17.5.6. Преобразование адресов в имена : Майкл Джонсон
17.5.7. Ожидание TCP-соединений : Майкл Джонсон 17.5.8. Клиентские приложения TCP : Майкл Джонсон
17.6. Использование дейтаграмм UDP : Майкл Джонсон 17.6.1. Создание UDP-сокета : Майкл Джонсон
17.6.2. Отправка и получение дейтаграмм : Майкл Джонсон 17.6.3. Простой tftp-сервер : Майкл Джонсон
продолжение 710 17.6.1. Создание UDP-сокета : Майкл Джонсон
17.6.2. Отправка и получение дейтаграмм : Майкл Джонсон 17.6.3. Простой tftp-сервер : Майкл Джонсон
17.7. Ошибки сокетов : Майкл Джонсон 17.8.1. Манипулирование IPv4-адресами : Майкл Джонсон
17.8.2. Преобразование имен хостов : Майкл Джонсон 17.8.3. Пример поиска информации хоста с использованием унаследованных функций : Майкл Джонсон
17.8.4. Поиск номеров портов : Майкл Джонсон 17.8.1. Манипулирование IPv4-адресами : Майкл Джонсон
17.8.2. Преобразование имен хостов : Майкл Джонсон 17.8.3. Пример поиска информации хоста с использованием унаследованных функций : Майкл Джонсон
17.8.4. Поиск номеров портов : Майкл Джонсон Глава 18 Время : Майкл Джонсон
18.1.1. Представление времени : Майкл Джонсон 18.1.2. Преобразование, форматирование и разбор значений времени : Майкл Джонсон
18.1.3. Ограничения, связанные со временем : Майкл Джонсон 18.2. Использование таймеров : Майкл Джонсон
18.2.1. Режим ожидания : Майкл Джонсон 18.2.2. Интервальные таймеры : Майкл Джонсон
18.1. Вывод времени и даты : Майкл Джонсон 18.1.2. Преобразование, форматирование и разбор значений времени : Майкл Джонсон
18.1.3. Ограничения, связанные со временем : Майкл Джонсон 18.1.1. Представление времени : Майкл Джонсон
18.1.2. Преобразование, форматирование и разбор значений времени : Майкл Джонсон 18.1.3. Ограничения, связанные со временем : Майкл Джонсон
18.2.1. Режим ожидания : Майкл Джонсон 18.2.2. Интервальные таймеры : Майкл Джонсон
18.2.1. Режим ожидания : Майкл Джонсон 18.2.2. Интервальные таймеры : Майкл Джонсон
19.1. Псевдослучайные числа : Майкл Джонсон 19.2. Криптография и случайные числа : Майкл Джонсон
19.1. Псевдослучайные числа : Майкл Джонсон 19.2. Криптография и случайные числа : Майкл Джонсон
Глава 20 Программирование виртуальных консолей : Майкл Джонсон 20.1. Начало работы : Майкл Джонсон
20.5. Управление переключением виртуальных консолей : Майкл Джонсон 20.6. Пример команды open : Майкл Джонсон
продолжение 748 20.1. Начало работы : Майкл Джонсон
20.5. Управление переключением виртуальных консолей : Майкл Джонсон 20.6. Пример команды open : Майкл Джонсон
Глава 21 Консоль Linux : Майкл Джонсон 21.1. Базы данных возможностей : Майкл Джонсон
21.3. Возможности консоли Linux : Майкл Джонсон продолжение 755 : Майкл Джонсон
21.3.1. Управляющие символы : Майкл Джонсон 21.3.2. Управляющие последовательности : Майкл Джонсон
21.3.4. Составные управляющие последовательности : Майкл Джонсон 21.4. Прямой вывод на экран : Майкл Джонсон
продолжение 760 21.1. Базы данных возможностей : Майкл Джонсон
21.3. Возможности консоли Linux : Майкл Джонсон 21.3.1. Управляющие символы : Майкл Джонсон
21.3.2. Управляющие последовательности : Майкл Джонсон 21.3.4. Составные управляющие последовательности : Майкл Джонсон
продолжение 766 21.3.1. Управляющие символы : Майкл Джонсон
21.3.2. Управляющие последовательности : Майкл Джонсон 21.3.4. Составные управляющие последовательности : Майкл Джонсон
21.4. Прямой вывод на экран : Майкл Джонсон 22.1. Когда безопасность имеет значение? : Майкл Джонсон
продолжение 772 : Майкл Джонсон 22.1.1. Когда выходит из строя система безопасности? : Майкл Джонсон
22.2. Минимизация возможности появления атак : Майкл Джонсон 22.2.1. Передача полномочий : Майкл Джонсон
22.2.2. Получение вспомогательной программы : Майкл Джонсон 22.3. Общие бреши системы безопасности : Майкл Джонсон
22.3.1. Переполнение буфера : Майкл Джонсон 22.3.3. Переменные окружения : Майкл Джонсон
22.3.5. Создание временных файлов : Майкл Джонсон 22.3.6. Режимы состязаний и обработчики сигналов : Майкл Джонсон
22.4. Запуск в качестве демона : Майкл Джонсон 22.1. Когда безопасность имеет значение? : Майкл Джонсон
22.1.1. Когда выходит из строя система безопасности? : Майкл Джонсон продолжение 785
22.1.1. Когда выходит из строя система безопасности? : Майкл Джонсон 22.2.1. Передача полномочий : Майкл Джонсон
22.2.2. Получение вспомогательной программы : Майкл Джонсон 22.2.1. Передача полномочий : Майкл Джонсон
22.2.2. Получение вспомогательной программы : Майкл Джонсон 22.3.1. Переполнение буфера : Майкл Джонсон
22.3.3. Переменные окружения : Майкл Джонсон 22.3.5. Создание временных файлов : Майкл Джонсон
22.3.6. Режимы состязаний и обработчики сигналов : Майкл Джонсон 22.3.1. Переполнение буфера : Майкл Джонсон
22.3.3. Переменные окружения : Майкл Джонсон 22.3.5. Создание временных файлов : Майкл Джонсон
22.3.6. Режимы состязаний и обработчики сигналов : Майкл Джонсон 22.4. Запуск в качестве демона : Майкл Джонсон
Часть IV Библиотеки для разработки : Майкл Джонсон 23.1. Универсализация произвольных строк : Майкл Джонсон
23.2. Регулярные выражения : Майкл Джонсон 23.2.2. Сопоставление с регулярными выражениями : Майкл Джонсон
23.2.3. Простая утилита grep : Майкл Джонсон Глава 24 Управление терминалами с помощью библиотеки S-Lang : Майкл Джонсон
24.1. Обработка ввода : Майкл Джонсон 24.1.1. Инициализация обработки ввода в S-Lang : Майкл Джонсон
24.2. Обработка вывода : Майкл Джонсон 24.2.6. Переключение наборов символов : Майкл Джонсон
24.2.7. Запись на экран : Майкл Джонсон 24.2.8. Рисование линий и прямоугольников : Майкл Джонсон
24.2.9. Использование цвета : Майкл Джонсон Глава 25 Библиотека хешированных баз данных : Майкл Джонсон
25.1. Обзор : Майкл Джонсон 25.2. Основные операции : Майкл Джонсон
25.2.1. Открытие файла qdbm : Майкл Джонсон 25.3. Чтение записей : Майкл Джонсон
25.3.1. Чтение определенной записи : Майкл Джонсон 25.4. Модификация базы данных : Майкл Джонсон
25.5. Пример : Майкл Джонсон Глава 26 Синтаксический анализ параметров командной строки : Майкл Джонсон
продолжение 822 : Майкл Джонсон 26.1. Таблица параметров : Майкл Джонсон
26.1.1. Определение параметров : Майкл Джонсон 26.1.2. Вложенные таблицы параметров : Майкл Джонсон
26.2. Использование таблиц параметров : Майкл Джонсон 26.2.1. Создание содержимого : Майкл Джонсон
26.2.2. Синтаксический анализ командной строки : Майкл Джонсон 26.2.4. Автоматические справочные сообщения : Майкл Джонсон
26.3. Использование обратных вызовов : Майкл Джонсон 26.4. Обработка ошибок : Майкл Джонсон
26.5. Псевдонимы параметров : Майкл Джонсон Глава 27 Динамическая загрузка во время выполнения : Майкл Джонсон
продолжение 834 : Майкл Джонсон 27.1. Интерфейс dl : Майкл Джонсон
продолжение 836 : Майкл Джонсон Глава 28 Идентификация и аутентификация пользователей : Майкл Джонсон
28.1. Преобразование идентификатора в имя : Майкл Джонсон продолжение 839 : Майкл Джонсон
28.1.1. Пример: команда id : Майкл Джонсон 28.2. Подключаемые модули аутентификации (РАМ) : Майкл Джонсон
продолжение 842 : Майкл Джонсон 28.2.1. Диалоги РАМ : Майкл Джонсон
28.2.2. Действия РАМ : Майкл Джонсон 23.1. Универсализация произвольных строк : Майкл Джонсон
23.2. Регулярные выражения : Майкл Джонсон 23.2.2. Сопоставление с регулярными выражениями : Майкл Джонсон
23.2.3. Простая утилита grep : Майкл Джонсон 23.1. Универсализация произвольных строк : Майкл Джонсон
23.2.2. Сопоставление с регулярными выражениями : Майкл Джонсон 23.2.3. Простая утилита grep : Майкл Джонсон
23.2.2. Сопоставление с регулярными выражениями : Майкл Джонсон 23.2.3. Простая утилита grep : Майкл Джонсон
24.1. Обработка ввода : Майкл Джонсон 24.1.1. Инициализация обработки ввода в S-Lang : Майкл Джонсон
24.2. Обработка вывода : Майкл Джонсон 24.2.6. Переключение наборов символов : Майкл Джонсон
24.2.7. Запись на экран : Майкл Джонсон 24.2.8. Рисование линий и прямоугольников : Майкл Джонсон
24.2.9. Использование цвета : Майкл Джонсон 24.1.1. Инициализация обработки ввода в S-Lang : Майкл Джонсон
продолжение 862 24.1.1. Инициализация обработки ввода в S-Lang : Майкл Джонсон
24.2.6. Переключение наборов символов : Майкл Джонсон 24.2.7. Запись на экран : Майкл Джонсон
24.2.8. Рисование линий и прямоугольников : Майкл Джонсон 24.2.9. Использование цвета : Майкл Джонсон
24.2.6. Переключение наборов символов : Майкл Джонсон 24.2.7. Запись на экран : Майкл Джонсон
24.2.8. Рисование линий и прямоугольников : Майкл Джонсон 24.2.9. Использование цвета : Майкл Джонсон
25.1. Обзор : Майкл Джонсон 25.2. Основные операции : Майкл Джонсон
25.2.1. Открытие файла qdbm : Майкл Джонсон 25.3. Чтение записей : Майкл Джонсон
25.3.1. Чтение определенной записи : Майкл Джонсон 25.4. Модификация базы данных : Майкл Джонсон
25.5. Пример : Майкл Джонсон 25.1. Обзор : Майкл Джонсон
25.2. Основные операции : Майкл Джонсон 25.2.1. Открытие файла qdbm : Майкл Джонсон
25.3.1. Чтение определенной записи : Майкл Джонсон 25.3.1. Чтение определенной записи : Майкл Джонсон
25.5. Пример : Майкл Джонсон Глава 26 Синтаксический анализ параметров командной строки : Майкл Джонсон
26.1. Таблица параметров : Майкл Джонсон 26.1.1. Определение параметров : Майкл Джонсон
26.1.2. Вложенные таблицы параметров : Майкл Джонсон 26.2. Использование таблиц параметров : Майкл Джонсон
26.2.1. Создание содержимого : Майкл Джонсон 26.2.2. Синтаксический анализ командной строки : Майкл Джонсон
26.2.4. Автоматические справочные сообщения : Майкл Джонсон 26.3. Использование обратных вызовов : Майкл Джонсон
26.4. Обработка ошибок : Майкл Джонсон 26.5. Псевдонимы параметров : Майкл Джонсон
продолжение 896 26.1. Таблица параметров : Майкл Джонсон
26.1.2. Вложенные таблицы параметров : Майкл Джонсон 26.1.1. Определение параметров : Майкл Джонсон
26.1.2. Вложенные таблицы параметров : Майкл Джонсон 26.2. Использование таблиц параметров : Майкл Джонсон
26.2.2. Синтаксический анализ командной строки : Майкл Джонсон 26.2.4. Автоматические справочные сообщения : Майкл Джонсон
26.2.1. Создание содержимого : Майкл Джонсон 26.2.2. Синтаксический анализ командной строки : Майкл Джонсон
26.2.4. Автоматические справочные сообщения : Майкл Джонсон 26.3. Использование обратных вызовов : Майкл Джонсон
26.4. Обработка ошибок : Майкл Джонсон Глава 27 Динамическая загрузка во время выполнения : Майкл Джонсон
27.1. Интерфейс dl : Майкл Джонсон продолжение 911 : Майкл Джонсон
продолжение 912 27.1. Интерфейс dl : Майкл Джонсон
продолжение 914 28.1. Преобразование идентификатора в имя : Майкл Джонсон
продолжение 916 : Майкл Джонсон 28.1.1. Пример: команда id : Майкл Джонсон
28.2. Подключаемые модули аутентификации (РАМ) : Майкл Джонсон продолжение 919 : Майкл Джонсон
28.2.1. Диалоги РАМ : Майкл Джонсон 28.2.2. Действия РАМ : Майкл Джонсон
28.1. Преобразование идентификатора в имя : Майкл Джонсон 28.1.1. Пример: команда id : Майкл Джонсон
продолжение 924 28.1.1. Пример: команда id : Майкл Джонсон
28.2. Подключаемые модули аутентификации (РАМ) : Майкл Джонсон 28.2.1. Диалоги РАМ : Майкл Джонсон
28.2.2. Действия РАМ : Майкл Джонсон продолжение 929
28.2.1. Диалоги РАМ : Майкл Джонсон 28.2.2. Действия РАМ : Майкл Джонсон
Приложение Б Исходный код ladsh : Майкл Джонсон Приложение Б Исходный код ladsh : Майкл Джонсон
Глоссарий : Майкл Джонсон Литература : Майкл Джонсон
notes.html    

Разделы
Околокомпьютерная литература (375)
Программирование (102)
Программы (75)
ОС и Сети (49)
Интернет (29)
Аппаратное обеспечение (16)
Базы данных (6)


Microsoft Office Журнал Компьютерра № 32 от 5 сентября 2006 года Журнал Компьютерра № 34 от 18 сентября 2006 года