Книга: UNIX: взаимодействие процессов

Функция door_cred и информация о клиенте

Функция door_cred и информация о клиенте

На этот раз мы изменим нашу функцию servproc из листинга 15.3, добавив в нее вызов door_cred для получения информации о пользователе. В листинге 15.5 приведен текст новой процедуры сервера; функции main клиента и сервера не претерпевают изменений по сравнению с листингами 15.2 и 15.3.

Листинг 15.5. Процедура сервера, получающая информацию о клиенте

//doors/server4.c
1  #include "unpipc.h"
2  void
3  servproc(void *cookie, char *dataptr, size_t datasize,
4   door_desc_t *descptr, size_t ndesc)
5  {
6   long arg, result;
7   door_cred_t info;
8   /* получение и вывод информации о клиенте */
9   Door_cred(&info);
10  printf("euid = %ld, ruid = %ld, pid = %ldn",
11  (long) info.dc_euid, (long) info.dc_ruid, (long) info.dc_pid);
12  arg = *((long *) dataptr);
13  result = arg * arg;
14  Door_return((char *) &result, sizeof(result), NULL, 0);
15 }

Сначала мы запустим программу-клиент и увидим, что действующий и реальный идентификаторы клиента совпадают, как мы и предполагали. Затем мы сменим владельца исполняемого файла на привилегированного пользователя, установим бит SUID и запустим программу снова:

solaris % client4 /tmp/server4 77 первый запуск клиента
result: 5929
solaris % su                      вход под именем привилегированного пользователя
Password:
Sun Microsystems Inc. Sun OS 5.6 Generic August 1997
solaris # cd                     каталог, в котором находится исполняемый файл
solaris # ls –l client4
-rwxrwxr-x 1 rstevens other1 139328 Apr 13 06:02 client4
solaris # chown root client4     смена владельца на привилегированного пользователя
solaris # chmod u+s client4      включение бита SUID
solaris # ls -l client4           проверка разрешений и владельца файла
-rwsrwxr-x 1 root     other1 139328 Apr 13 06:02 client4
solaris # exit
solaris % ls -l client4
-rwsrwxr-x 1 root     other1 139328 Apr 13 06:02 client4
solaris % client4 /tmp/server477 и еще раз запускаем программу-клиент
result: 5929

Если мы посмотрим, что в это время выводил сервер, то увидим следующую картину:

solaris % server4 /tmp/server4
euid = 224, ruid = 224, pid = 3168
euid = 0, ruid = 224, pid = 3176

Действующий идентификатор пользователя при втором запуске изменился. Значение 0 означает привилегированного пользователя.

Оглавление книги


Генерация: 2.798. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз