Юникс вэй

26 май 08, 12:27
Создаем свою службу в Linux

Итак, нам необходимо создать программу, которая будет доступна по tcp/ip. Сетевым программированием мы заниматься не будем, просто позволим программе читать со стандартного входа и писать в стандартный выход. Для примера, будем использовать команду uptime:
[gserg@sales-http01 ~]$ uptime
12:57:05 up 103 days, 23:48, 1 user, load average: 0.00, 0.00, 0.00

Нам нужно, чтобы при подключении к телнетом к порту 55555 на сервере sales-http01 мы получали вывод команды uptime.
1. Для безопасности выполнять команду будем под искусственным пользователем, потому такого пользователя предварительно создадим:
[gserg@sales-http01 ~]$ su -c 'adduser uptime'

2. Пропишем сервис в /etc/services, чтобы упростить дальнейшую настройку:
[gserg@sales-http01 ~]$ su -c 'vim /etc/services'
Двигаемся в то место в файле, где по порядку должен стоять порт 55555 и вписываем следующую строку:
uptime 55555/tcp #myuptime
Естественно, можно использовать любой удобный Вам редактор, не обязательно vim.

3. Для выкладывания в сеть будем использовать xinetd (http://www.xinetd.org/). Для этого создаем в каталоге /etc/xinetd.d файл с названием uptime и следующим содержанием:
service uptime
{
disable = no
socket_type = stream
wait = no
user = uptime
server = /usr/bin/uptime
log_on_failure += USERID
}
Чтобы записать такой файл, потребуются привилегии суперпользователя.

4. Перезагружаем сервис xinetd:
[gserg@sales-http01 ~]$ su -c '/sbin/service xinetd restart'
Останавливается xinetd: [ OK ]
Запускается xinetd: [ OK ]

5. Ну и пробуем получить результат:
gserg@ADM:~$ telnet sales-http01 55555
Trying sales-http01 (192.168.1.3)...
Connected to sales-http01(192.168.1.3).
Escape character is '^]'.
13:11:19 up 104 days, 2 min, 1 user, load average: 0.00, 0.00, 0.00
Connection closed by foreign host.


Таким образом можно заставить работать любую Вашу программу, которая просто умеет читать с клавиатуры и писать на экран. Но стоит не забывать при этом о безопасности.

Комментарии

@ 26.5.08, 12:35, Штольц
Ага, поэтому пользователя лучше не создавать, а использовать сразу готового с именем root - чтобы не мучаться долго ))))
Но если серьезно, то весьма интересная штука

@ 26.5.08, 12:38, Линуксоид
2Штольц: ага, Штольц, у тебя на сервере Как сделаешь с рутом - подкинь адресочек

@ 26.5.08, 14:47, 3525
Вы чему детей учите? Они же теперь юникса как огня боятся будут.

@ 26.5.08, 15:05, Штольц
Не будут. Достаточно один раз увидеть висту, а самое страшное: поработать с ней несколько лет

@ 26.5.08, 16:14, stan
Интересный примерчик. А есть способы защищить подключение? Прикрутить авторизацию к примеру или шифрование?

@ 26.5.08, 16:42, Линуксоид
3525, каков купец, такой товар.
stan, написав свою программу, работающую с xinetd, ты внутри нее можешь реализовать все что угодно и с каким угодно протоколом.

@ 26.5.08, 18:04, AoN
вместо /usr/bin/uptime указываешь свой скрипт, а в него строчки с gpg-шифрованием вывода, а на клиенте расшифровываешь. Только ключом обменятся и всё.




Добавить комментарий
  • Об этом дневнике 

  • Мой дневник:
  • Создать/изменить дневник
  • Добавить запись
  • Посмотреть комментарии