вторник, 16 марта 2010 г.

Системная утилита для Solaris 10

Ниже представлен фрагмент второй лекции курса "Безопасность сетей на базе ОС Solaris 10". 
Утилита getent позволяет запрашивать информацию из всех типов баз. Однако, запрашивать информацию из базы shadow она не может, и об этом чётко сказано на man-странице getent (строго говоря в списке баз, с которыми может работать getent нет базы shadow). Почему такая ситуация имеет место быть, сказать сложно, поскольку реализовать данный функционал можно даже своими силами. Ниже приведен пример как это можно сделать.
Итак ...
Для получения информации из системных баз используются библиотечные функции, такие как: gethostbyname, getpwuid, getpwnam, getaddrinfo и другие. Они не зависят от конкретного расположения базы, и одинаково работают для всех типов баз. Например, функция gethostbyname() запрашивает информацию о хосте на основе заданного имени, а функция getpwnam()  ищет запись в базе passwd паролей по имени пользователя; А вот функция getspent() выполняет запросы к базе shadow. На её основе и создана следующая утилита, которая выводит логины и хэши паролей всех пользователей из этой самой базы.


#include <sys/types.h>
#include <unistd.h>
#include <pwd.h>
#include <stdio.h>
#include <stdlib.h>
#include <shadow.h>
#include <crypt.h>
#include <string.h>



int main (void)
{
    struct spwd *spwd_info;
    char *pwd;
    char *lname;
    setspent;
    while (spwd_info = getspent()) {
        printf("%s:%s\n",spwd_info->sp_namp, spwd_info->sp_pwdp);
    }
    return (0);
}

Компилируем и используем (gcc, cc, ... ).

Собственно всё ...

* Записаться на онлайн-курс "Безопасность сетей на базе Solaris 10" можно на сайте http://opencourses.ru

Комментариев нет:

Отправить комментарий