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

Тут можно читать онлайн Майкл Джонсон - Разработка приложений в среде Linux. Второе издание - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-osnet, издательство Вильямс, год 2007. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Разработка приложений в среде Linux. Второе издание
  • Автор:
  • Жанр:
  • Издательство:
    Вильямс
  • Год:
    2007
  • Город:
    Москва
  • ISBN:
    978-5-8459-1143-8
  • Рейтинг:
    3.8/5. Голосов: 101
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

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

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

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

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

Разработка приложений в среде Linux. Второе издание - читать онлайн бесплатно полную версию (весь текст целиком)

Разработка приложений в среде Linux. Второе издание - читать книгу онлайн бесплатно, автор Майкл Джонсон
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Функция 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

22: #include

23: #include

24: #include

25: #include

26: #include

27: #include

28: #include

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: "Имя пользователя для аутентификации", "<���имя_пользователя>" },

56: { "service", 'S', РОPT_ARG_STRING, &service, 0,

57: "Имя службы для инициализации как (pamsample)",

58: "<���служба>" },

59: { "account", 'a', POPT_ARG_NONE|POPT_ARGFLAG_XOR,

60: &account, 0,

61: "включение/выключение управления учетными записями (включено)", "" },

62: { "session", 's', POPT_ARG_NONE|POPT_ARGFLAG_XOR,

63: &session, 0,

64: "включение/выключение запуска сеанса (выключено)", "" },

65: POPT_AUTOHELP

66: POPT_TABLEEND

67: };

68:

69: optCon = poptGetContext("pamexample", argc, argv,

70: optionsTable, 0);

71: if ((c = poptGetNextOpt(optCon)) < -1) {

72: fprintf(stderr, "%s: %s\n",

73: poptBadOption(optCon, POPT_BADOPTION_NOALIAS),

74: poptStrerror(c));

75: return 1;

76: }

77: poptFreeContext(optCon);

78:

79: if (!service) {

80: /* Обратите внимание, что обычное приложение не должно предоставлять

81: * этот параметр пользователю; он присутствует здесь, чтобы можно было

82: * проверить это приложение, не производя изменений в системе,

83: * требующих доступа root.

84: */

85: service = "pamexample";

86: }

87:

88: if (!username) {

89: /* по умолчанию для текущего пользователя */

90: if (!(pw = getpwuid (getuid())) ) {

91: fprintf(stderr, "Имя пользователя не существует");

92: exit(1);

93: }

94: username = strdup(pw->pw_name);

95: }

96:

97: с = pam_start(service, username, &my_conv, &pamh);

98: check_success(pamh, c);

99:

100: с = pam_authenticate(pamh, 0);

101: check_success(pamh, c);

102:

103: if (account) {

104: /* если аутентификация не была закончена, управление

105: * учетной записью не определено

106: */

107: с = pam_acct_mgmt(pamh, 0);

108: check_success(pamh, с);

109: }

110:

111: if (session) {

112: /* В случае необходимости мы могли бы организовывать здесь ветвление */

113: с = pam_open_session(pamh, 0);

114: check_success(pamh, с);

115:

116: /* Обратите внимание, что здесь не устанавливается uid, gid

117: или дополнительные группы */

118: с = pam_setcred(pamh, 0);

119:

120: /* В случае необходимости мы могли бы закрыть здесь полномочия */

121:

122: /* Вызов оболочки, которая была "аутентифицирована" */

123: printf("Запуск оболочки...\n");

124: system("exec bash -");

125:

126: /* Здесь мы могли бы использовать wait4(), если бы организовывали

127: ветвление вместо вызова system() */

128: с = pam_close_session(pamh, 0);

129: check_success(pamh, с);

130: }

131:

132: /* Реальные приложения могли бы сообщать о сбое вместо

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Майкл Джонсон читать все книги автора по порядку

Майкл Джонсон - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




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


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


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

Напишите свой комментарий
x