на главную | войти | регистрация | DMCA | контакты | справка | donate |      

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я


моя полка | жанры | рекомендуем | рейтинг книг | рейтинг авторов | впечатления | новое | форум | сборники | читалки | авторам | добавить



Листинг 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 = %ld\n",

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 означает привилегированного пользователя.


Функция door_cred и информация о клиенте | UNIX: взаимодействие процессов | Автоматическое управление потоками сервера