Итак, нам необходимо создать программу, которая будет доступна по 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-шифрованием вывода, а на клиенте расшифровываешь. Только ключом обменятся и всё.