Как запустить скрипт на сервере Linux при обращении на порт

UNLIX | Заметки о UNIX и LINUX системах

Иногда может потребоваться такой алгоритм. При простом подключении telnet’ом (например по ярлыку) на определенный порт хоста, там должен выполниться скрипт. В реализации этого может помочь стандартный inetd.Конечно, можно использовать и более продвинутый xinetd, но в данной статье рассмотрим именно inetd.

Первое что необходимо сделать, это добавить имя сервиса, номер порта и протокол в файл /etc/services

Например это будет свободный TCP порт 6868 и имя сервиса myservice. Добавим в указанный выше файл строку:

myservice 6868/tcp

Допустим, скрипт, который мы хотим выполнять при обращении к порту здесь /home/myscript.sh

Добавим следующую строку в файл /etc/inetd.conf

myservice stream tcp nowait root /home/myscript.sh

Каждая значащая строка файла /etc/inetd.conf описывает сервер в семи полях (разделённых пробелами):

  • Номер порта TCP или UDP или имя сервиса (которое преобразуется в стандартный номер порта с помощью информации, содержащейся в файле /etc/services).
  • Тип сокета: stream для TCP-соединения, dgram для UDP-датаграмм.
  • Протокол: tcp или udp.
  • Опции: два возможных значения — wait или nowait, сообщающих inetd, следует ли ждать завершения запущенного процесса прежде чем принимать новое соединение. Для TCP-соединений, которые легко мультиплексируются, обычно можно использовать nowait. Для программ, отвечающих через UDP, следует использовать nowait только если сервер способен управляться с несколькими соединениями параллельно. В конце этой опции можно добавить точку, и после неё указать максимально разрешённое число сединений в минуту (по умолчанию используется ограничение в 256 соединений).
  • Имя пользователя, от имени которого будет запускаться сервер.
  • Полный путь к серверной программе, которую нужно запустить.
  • Аргументы: полный список аргументов программы, включая её собственное имя ((argv[0] в Си).

Перезапустим службу

# service inetd restart

Проверим, слушается ли порт

# netstat -na | grep 6868

Если вывод пуст, значит где-то есть ошибка, проверяйте.

Вот и все. Теперь можно запустить на удаленной машине команду и проверить выполняется ли скрипт

# telnet 192.168.1.1 6868

Где 192.168.1.1 — это IP адрес нашего сервера с inetd.

Конечно, такая конструкция не очень безопасна (тем более, что скрипт выполняется от root). Поэтому необходимы минимальные меры предосторожности. Например, фаервол с аксеслистом. В xinetd, кстати, можно указывать, с каких IP адресов можно обращаться.


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.


Unlix © Все права защищены 2020

Копирование материалов с сайта Unlix.ru без указания полной ссылки на источник ЗАПРЕЩЕНО!