Фэндом


ВведениеПравить

Чтобы две Inferno-машины смогли установить безопасное соединение, каждая из них должна предоставить ключ с сертификатом, подписанным общим центром сертификации. Поэтому, перед тем как перейти к настройке сетевых сервисов, мы должны настроить центр сертификации и подготовить пару ключей (публичный/приватный) для каждой машины, участвующей в соединении.

Центр сертификацииПравить

Центр сертификации (CA) представляет собой выделенную Inferno-машину на которой запущен соответствующим образом настроенный сервис svc/auth, ответственный за подписку и выдачу сертификатов. Мы поговорим здесь только об одном CA на всю сеть, хотя фактически все зависит от специфики приложения или задачи группы. Например, игровой сервер Inferno автоматически запускает собственный CA для хранения идентификаторов и ключей, используемых игровым сервисом отдельно от основносй системы, позволяя пользователям без суеты формировать их собственную игровую группу.

Настройка сервиса authПравить

Выберите Inferno-машину, которая будет выполнять функции центра сертификации. Если она первая или единственная машина вашей сети, тогда используйте ее. Позднее вы сможете переложить эту функцию на другую машину.

Создание пустого файла ключейПравить

Сервер аутентификации проверяет подлинность пользователя через проверку ключа (в действительности ключ не используется напрямую, вместо этого передается полученное от него зашифрованное значение). Файл /keydb/keys содержит эти ключи; он зашифрован с использованием пароля или фразы, известной только менеджеру сервера аутентификации. После установки Inferno этот файл должен существовать и быть доступным для чтения только вам (или пользователям, которые запускают сервис аутентификации). В консоли машины, исполняющей роль центра сертификации наберите:

ls -l /keydb/keys

Вы должны увидеть что-то вроде этого:

--rw------- M 7772 yourname inf 0 Jun 12 03:08 /keydb/keys

Если файл не существует, не пуст или имеет неправильно установленные атрибуты, выполните:

cp /dev/null /keydb/keys; chmod 600 /keydb/keys

Генерирование ключаПравить

Далее выполните

auth/createsignerkey name

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

Команда createsignerkey создает пару ключей (публичный/приватнтый), которые используются центром сертификации для выдачи сертификатов. Они хранятся в /keydb/signerkey; убедитесь что правами на этот файл обладает только пользователь, запускающий сервис аутентификации:

; ls -l /keydb/signerkey
--rw------- M 32685 secrets inf 1010 Jul 07 2000 /keydb/signerkey

Используйте chmod(1) чтобы установить режим чтения и записи только для владельца:

chmod 600 /keydb/signerkey

Запуск сетевых сервисов аутентификацииПравить

Находясь в консоли центра сертификации, наберите:

svc/auth

Этот скрипт (смотри svc(8)) проверит файлы /keydb/keys и /keydb/signerkey на существование, запустит программу keyfs(4), которая управляет файлом ключей. Она запросит пароль, который будет использован для защиты файла ключей:

; svc/auth
Key:
Confirm key:

Приглашение появляется дважды для подтверждения. Если подтверждение успешно прошло, запускается сетевой сервис, используемый Inferno для аутентификации локальных и удаленных пользоватлей и хостов.

Вы можете проверить что они запущены, набрав:

ps

которая должна показать что-то вроде этого:

1  1 john release 74K Sh[$Sys]
3  2 john alt 15K Cs
10 9 john recv 25K Keyfs
11 9 john release 44K Styx[$Sys]
12 9 john recv 25K Keyfs
14 1 john alt 8K Listen
16 1 john release 8K Listen[$Sys]
18 1 john alt 9K Listen
20 1 john release 9K Listen[$Sys]
22 1 john alt 9K Listen
24 1 john release 9K Listen[$Sys]
26 1 john alt 8K Listen
28 1 john release 8K Listen[$Sys]
29 1 john ready 73K Ps[$Sys]

В списке должны присутствовать процессы Keyfs и Listen.

Ввод имен пользователей и паролейПравить

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

auth/changelogin username

Вас попросят набрать пароль и дату истечения срока его действия. Эта дата будет использоваться как крайний срок действия сертификата, выданного пользователю.

Changelogin (смотри changelogin(8)) получает доступ к пространству имен, созданному keyfs(4), запущенному при старте svc/auth. Пользователь может позже изменить хранимый пароль при помощи команды passwd(1). Для генерации сертификата центру сертификациии нужна хотя бы одна записть в файле паролей. Если на этом этапе вы не знаете имена пользователей, которых вы хотите аутентифицировать, тогда создайте записи для пользователя inferno и для себя.

Генерация сертификата для сервераПравить

На машине-сервере воспользуйтесь командой getauthinfo(8) для получения сертификата и сохранения его в файле, названном default:

getauthinfo default

Команда getauthinfo запросит адрес вашего центра сертификации (вы можете использовать имя хоста или даже localhost) и имя удаленного пользователя и пароль. Getauthinfo соединится с сервисом inflogin центра сертификации и аутентифицирет вас в базе данных /keydb/keys с именем и паролем, которые вы указали выше. Ответьте yes на вопрос о том, желаете ли вы записать сертификат в файл. Getauthinfo сохранит сертификат в файле /usr/user/keyring/default, где user является тем же именем что и в /dev/user.

Генерация клиентского сертификатаПравить

Получение сертификата для клиента происходит так же как и для сервера. Мы должны получить сертификат для взаимодействия с определенным сервером, сохранив его в файле, имя которого точно совпадает сетевым адресом сервера.

getauthinfo tcp!hostname

Используйте имя хоста текущей машины. Getauthinfo хранит сертификаты в файле /usr/user/keyring/keyname где user соответствуем имени пользователя из /dev/user, а keyname это аргумент, переданный getauthinfo. Ответьте yes на вопрос о том, хотите ли вы сохранить сертификат в файл.

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

Обратите внимание, что получение ключей и сертификатов с помощью getauthinfo делается только один раз (или по одному разу для каждого сервера, если не используется ключ по умолчанию).

Теперь, когда предоставленные ключи записаны в файл keyring, вы можете создать столько аутентифицированных соединений, сколько нужно, пока не истечет срок действия сертификата (это зависит от даты истечения срока действия пароля). Так же обратите внимание на то, что разные машины могут иметь разные центры сертификации, и каждый может использовать различные сертификаты для одной машины, когда различаются имена удаленных пользователей (опция -f getauthinfo может быть полезна, если вы хотите выбрать другое имя для файла keyring).

Установка аутентифицированного соединенияПравить

// TODO: действия на сервере

// TODO

// TODO: действия на клиенте

Убедимся что каталог /n/remote пуст, набрав следующую команду:

lc /n/remote

Вы можете примонтировать пространство имен сервера в каталог клиента /n/remote набрав:

mount serveraddr /n/remote

Где serveraddr это IP-адрес сервера или его доменное имя.

Теперь команда

lc /n/remote

должна выдать список файлов и каталогов в пространстве имен сервера. Все эти файлы теперь также видны в пространестве имен вашего командного интерпретатора.

Заметьте, что изменения видны только интерпретатору, в котором вы выполнили команду mount, для всех остальных окон каталог /n/remote остается пустым.

Вы можете создавать, удалять или изменять файлы каталога /n/remote на манер других ваших файлов. Фактически, приложению не надо знать, где в действительности расположен файл, локально или удаленно. Вы можете размонтировать смонтированный каталог при помощи команды unmount. Выполните

unmount /n/remote

и убедитесь, что содержимое пропало, запустив:

ls /n/remote

По умолчанию все инициированные mount соединения аутентифицированы, но не используют ни шифрование, ни подписывание сообщений. Чтобы создать по-настоящему безопасное соединение, вы должны передать команде mount опию '-C', которая включает хэширование и применяет алгоритм шифрования к соединению.

Создание безопасного аутентифицированного соединенияПравить

mount -C sha1/rc4_256 serveraddr /n/remote

Приведенная команда устанавливает аутентифицированное соединение с машиной serveraddr с использованием хэширования SHA1 с подписыванием сообщений (дайджестом) и 256-битным шифрованием алгоритмом RC4.

Обнаружено использование расширения AdBlock.


Викия — это свободный ресурс, который существует и развивается за счёт рекламы. Для блокирующих рекламу пользователей мы предоставляем модифицированную версию сайта.

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

Также на Фэндоме

Случайная вики