#rpc
#rpc
Вопрос:
Я студент-информатик из Италии, мне нужно сделать проект, основанный на модифицированной версии Daemontools от D.J. Bernstein, которая должна реализовывать удаленные вызовы процедур под Unix.
Обычно для запуска демона с помощью инструментов я использую этот синтаксис:
svc -u /service/NameOfDaemon
И покончим с этим:
svc -d /service/NameOfDaemon
Таким образом, я могу управлять демоном локально. Идея состоит в том, чтобы добавить блок кода, чтобы иметь возможность управлять демоном, расположенным на удаленной машине, это будет идеальный синтаксис:
svc -u IP/service/NameOfDaemon
где IP обозначает фактический IP целевой машины, известный пользователю.
В эти дни я погуглил и узнал о RPC и DTools, но я немного застрял, кто-нибудь может помочь мне начать?
Возможно, также рекомендуется прочитать что-нибудь для моего проекта?
Комментарии:
1. Если вы делаете это под чьим-то руководством, спросите их, на какие ресурсы вам следует обратить внимание. В противном случае это относится к сайту, подобному Unixamp;Linux.SE
Ответ №1:
Способ Unix сделать это — сказать:
ssh -n root@remotehost svc -u /service/NameOfDaemon
Философия unix заключается в создании небольших инструментов, которые хорошо выполняют одну задачу и работают вместе с другими инструментами. svc
это инструмент, который может управлять демонами на локальном компьютере. ssh
может запускать инструменты на удаленных машинах. Нет необходимости в другом инструменте.
Если вам абсолютно необходима одна команда, которая может управлять как локальными, так и удаленными демонами, то, как предлагает Крис, вы можете написать сценарий оболочки, который выполняется svc
или ssh
по мере необходимости.
Ответ №2:
supervise
использует сокеты домена Unix для приема запросов. Преимущество использования сокетов домена Unix заключается в том, что доступом к нему можно управлять с помощью обычных разрешений файловой системы — в этом случае доступ к сокету разрешен только root, отсюда и причина, по которой вы обычно должны запускаться svc
от имени root.
Однако, как только вы перейдете по сети, вам придется подумать о сетевой аутентификации (если вы не хотите, чтобы какие-либо Tom, Dick и Harry запускали и останавливали ваши службы). Если вы сможете решить эту проблему, остальное будет несложно:
- Напишите службу, которая работает поверх
tcpserver
, которая может вызыватьсяsvc
на удаленном компьютере для вас. Если контроль доступа, предоставляемыйtcpserver
, достаточен для вас, тогда отлично; в противном случае ваш сервис должен обрабатывать то, что осталось.- В целях безопасности не запускайте эту службу от имени root (т. Е. всегда указывайте
-u
вtcpserver
командной строке). Вместо этого просто измените (групповое) владение вашимиsupervise
сокетами, чтобы они были доступны для чтения и записи пользователем, от имени которого запускается ваша служба.
- В целях безопасности не запускайте эту службу от имени root (т. Е. всегда указывайте
- Напишите сценарий оболочки на стороне клиента, который обтекает
svc
. Он проверяет синтаксис «удаленного сервера», и если он используется, он подключится к вашей удаленной службе (а в противном случае просто вызоветsvc
как обычно).
Комментарии:
1. @Tom Спасибо за ответы, Хорошо понял, что вы говорите, и это, безусловно, простой и правильный способ получить контроль над удаленной машиной, но в моем проекте требуется действительно добавить некоторый код в файл supervice.c или svc.c. Затем перекомпилировать все инструменты, чтобы получить их модифицированную версию, которая способна также реализовывать удаленный вызов
svc -u
команды… Это сложно и не очень полезно, но это проект, для которого я призван, поэтому я должен следовать этим спецификациям…