» » » Майкл Джонсон - Разработка приложений в среде Linux. Второе издание


Авторские права

Майкл Джонсон - Разработка приложений в среде Linux. Второе издание

Здесь можно скачать бесплатно "Майкл Джонсон - Разработка приложений в среде Linux. Второе издание" в формате fb2, epub, txt, doc, pdf. Жанр: Программное обеспечение, издательство Вильямс, год 2007. Так же Вы можете читать книгу онлайн без регистрации и SMS на сайте LibFox.Ru (ЛибФокс) или прочесть описание и ознакомиться с отзывами.
Майкл Джонсон - Разработка приложений в среде Linux. Второе издание
Рейтинг:
Название:
Разработка приложений в среде Linux. Второе издание
Издательство:
Вильямс
Год:
2007
ISBN:
978-5-8459-1143-8
Скачать:

99Пожалуйста дождитесь своей очереди, идёт подготовка вашей ссылки для скачивания...

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.

Вы автор?
Жалоба
Все книги на сайте размещаются его пользователями. Приносим свои глубочайшие извинения, если Ваша книга была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.

Как получить книгу?
Оплатили, но не знаете что делать дальше? Инструкция.

Описание книги "Разработка приложений в среде Linux. Второе издание"

Описание и краткое содержание "Разработка приложений в среде Linux. Второе издание" читать бесплатно онлайн.



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

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






#include <security/pam_appl.h>


extern int pam_set_item(pam_handle_t * pamh, int item_type,

 const void * item);

extern int pam_get_item(const pam_handle_t * pamh, int item_type,

 const void ** item);

Аргумент item_type определяет идентичность и семантику элемента РАМ item. Мы рассмотрим только наиболее часто используемые значения item_type.

PAM_TTY item представляет указатель на строку, содержащую имя устройства TTY, с которым связан запрос аутентификации. Это может быть tty59 для первого последовательного порта в стандартной системе или pts/0 для первого псевдотерминала, или tty1 для первой виртуальной консоли. PAM_USER Функция pam_start() автоматически присваивает это значение аргументу user, переданному функции pam_start(). Важно отметить, что это имя может изменяться! Если вашему приложению нужно имя пользователя, то оно должно проверять значение посредством функции pam_get_item() после попадания в стек РАМ и перед производством изменения имени в другом коде. PAM_RUSER Для сетевых протоколов (например, rsh и ssh) этот элемент должен применяться для передачи имени пользователя удаленной системы любым модулям РАМ, которые используют его. Благодаря этому администратор системы сможет определить, разрешена ли аутентификация типа rhost. PAM_RHOST Подобно PAM_RUSER, PAM_RHOST необходимо задавать для сетевых протоколов, в которых имя удаленного хоста может использоваться как компонент аутентификации, или при управлении учетной записью.

Все остальные функции принимают по два аргумента: непрозрачный объект pamh и целое число, которое может быть либо нулевым, либо флагом РАМ_SILENT. Флаг PAM_SILENT требует, чтобы каркас и модули РАМ не генерировали информационных сообщений, однако при этом будет производиться запрос на ввод пароля. В обычных приложениях флаг РАМ_SILENT не задается.

Функция pam_authenticate(), показанная в строке 100 кода pamexample.с, выполняет все, что было сконфигурировано администратором системы в данном приложении (что определяется аргументом service_name функции pam_start()) для аутентификации пользователя. Сюда может быть включено следующее: запрос на ввод одного или нескольких паролей; проверка, что пользователь с текущим именем пользователя (что определяется по элементу РАМ РАМ_USER, а не по текущему uid; модули РАМ не рассматривают uid, поскольку приложения, вызывающие РАМ, обычно явным образом не выполняются после аутентификации пользователя) является текущим пользователем консоли; проверка, что текущий пользователь (снова по имени пользователя) недавно прошел аутентификацию для эквивалентного уровня обслуживания; проверка элементов РАМ PAM_RUSER и PAM_RHOST в отношении локальных таблиц эквивалентных удаленных пользователей и хостов (например, то, что выполняет демон rsh), или что-либо подобное. (Обратите внимание, что в большинстве систем задействована система "теневых паролей", при котором с целью защиты пароля только процессы с полномочиями root могут проверять пароли произвольных пользователей; процесс, который не выполняется как root, может проверять только собственный пароль uid. Это единственное исключение из правила, когда модули РАМ принимают во внимание uid.)

Функция pam_acct_mgmt(), показанная в строке 107, предполагает, что функция pam_authenticate() уже была вызвана и продолжает свою работу, а затем проверяет (также по имени), разрешено ли пользователю осуществлять запрошенный доступ. Она может рассматривать элементы РАМ PAM_USER, PAM_TTY, PAM_RUSER и PAM_RHOST, определяя разрешение на доступ. Например, какому-то одному пользователю могут быть разрешены некоторые tty только в течение определенных часов, или каждому пользователю в некотором классе может быть разрешено только некоторое количество параллельных регистраций, или некоторым совокупностям удаленных пользователей и хостов могут быть даны разрешения только на несколько часов.

Функция pam_setcred(), показанная в строке 118, предполагает, что аутентификация была пройдена, и затем устанавливает сертификаты для пользователя. Хотя uid, gid и дополнительные группы технически являются сертификатами, они не находятся под управлением функции pam_setcred(), поскольку во многих приложениях это не будет соответствовать модели безопасности. Наоборот, она устанавливает дополнительные сертификаты. Вероятным кандидатом для использования в качестве сертификата является мандат Kerberos — файл, содержащий зашифрованные данные, которые предоставляют пользователю разрешение на доступ к некоторым ресурсам.

Функция pam_open_session(), показанная в строке 113, открывает новый сеанс. Если в процессе есть ветвления, то функцию pam_open_session() необходимо вызывать после ветвления, поскольку при этом могут происходить такие действия, как установка rlimits (см. стр. 120–121). Если ваш процесс запускается как root, а затем изменяется на uid аутентифицированного пользователя, функцию pam_open_session() нужно вызывать перед сбросом привилегий root, поскольку модули сеанса могут попытаться выполнить системные операции (например, монтирование домашних каталогов), которые зарезервированы только для root.

Функция pam_close_session(), показанная в строке 128, закрывает существующий сеанс. Ее можно вызывать из другого процесса, а не только из того, который вызвал функцию pam_open_session(), при том условии, что РАМ будут доступны одни и те же данные — те же аргументы, заданные для РАМ, и те же элементы РАМ, которые используются для открытия сеанса. Обратите внимание, что поскольку элемент PAM_USER может быть изменен во время аутентификации и управления учетной записью, вы должны убедиться, что производится учет любых изменений, производимых с PAM_USER, если вы вызываете ее из отдельного процесса, установившего сеанс. Для работы функции pam_close_session() могут потребоваться привилегии root.

  1: /* pamexample.с */

  2:

  3: /* Программа pamexample демонстрирует вариант простой обработки РАМ.

  4:  * Вам нужно будет либо использовать параметр командной строки —service

  5:  * для выбора имени уже установленной службы (может работать "system-auth",

  6:  * проверьте наличие /etc/pam.d/system-auth в своей системе), либо

  7:  * установки системного файла */etc/pam.d/pamexample со следующими

  8:  * четырьмя строками (игнорируя ведущие символы "*") :

  9:  * #%РАМ-1.0

 10:  * auth required /lib/security/pam_unix.so

 11:  * account required /lib/security/pam_unix.so

 12:  * session required /lib/security/pam_limits.so

 13:  *

 14:  * Обратите внимание, что если вы запустите эту программу не как root, то

 15:  * можете столкнуться с ограничениями системы; при управлении учетными

 16:  * записями может произойти сбой, вам может быть не разрешено проверять

 17:  * другие пароли пользователей, в управлении сеансом может произойти

 18:  * сбой - все будет зависеть от того, как сконфигурирована служба.

 19:  */

 20:

 21: #include <security/pam_appl.h>

 22: #include <security/pam_misc.h>

 23: #include <popt.h>

 24: #include <pwd.h>

 25: #include <sys/types.h>

 26: #include <stdio.h>

 27: #include <stdlib.h>

 28: #include <unistd.h>

 29:

 30: /* Эта структура может быть автоматической, но она не должна выходить

 31:  * за пределы между функциями pam_start() и pam_end(), поэтому в простых

 32:  * программах легче всего сделать ее статической.

 33:  */

 34:  static struct pam_conv my_conv = {

 35:   misc_conv, /* использование функции диалога TTY из libpam_misc */

 36:   NULL /* у нас нет специальных данных для передачи в misc_conf */

 37:  };

 38:

 39:  void check_success(pam_handle_t * pamh, int return_code) {

 40:   if (return_code != PAM_SUCCESS) {

 41:    fprintf (stderr, '"%s\n", pam_strerror(pamh, return_code));

 42:    exit(1);

 43:   }

 44:  }

 45:

 46:  int main(int argc, const char ** argv) {

 47:   pam_handle_t * pamh;

 48:   struct passwd * pw;

 49:   char * username=NULL, * service=NULL;

 50:   int account = 1, session = 0;

 51:   int c;

 52:   poptContext optCon;

 53:   struct poptOption optionsTable[] = {

 54:    { "username", 'u', POPT_ARG_STRING, &username, 0,

 55:      "Имя пользователя для аутентификации", "<имя_пользователя>" },


На Facebook В Твиттере В Instagram В Одноклассниках Мы Вконтакте
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!

Похожие книги на "Разработка приложений в среде Linux. Второе издание"

Книги похожие на "Разработка приложений в среде Linux. Второе издание" читать онлайн или скачать бесплатно полные версии.


Понравилась книга? Оставьте Ваш комментарий, поделитесь впечатлениями или расскажите друзьям

Все книги автора Майкл Джонсон

Майкл Джонсон - все книги автора в одном месте на сайте онлайн библиотеки LibFox.

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Отзывы о "Майкл Джонсон - Разработка приложений в среде Linux. Второе издание"

Отзывы читателей о книге "Разработка приложений в среде Linux. Второе издание", комментарии и мнения людей о произведении.

А что Вы думаете о книге? Оставьте Ваш отзыв.