在接收与xinetd的传入连接时执行脚本

时间:2012-11-22 21:02:31

标签: linux shell tcp netcat xinetd

我希望xinetd在某个端口上收到连接时执行shell脚本。为此,请遵循本教程:[在此输入链接描述] [1]

不幸的是,整件事情都行不通,因为我希望这就是我要展示的原因 你我的配置。

xinetd调用的脚本位于/ usr / local / bin。它可以毫无问题地执行:

#!/bin/bash
echo "connection received"

/etc/xinetd.d/testservice有以下内容:

service testservice
{
        disable         = no
        socket_type     = stream
        protocol        = tcp
        port              = 5900
        log_on_success += USERID 
        log_on_failure += USERID
        server          = /usr/local/bin/testservice
        user            = root
        instances       = UNLIMITED
        wait            = no
        log_type        = SYSLOG daemon debug
}

在/ etc / services中我添加了这一行:

testservice        5900/tcp 

然后我用service xinetd restart

重启了xinetd

最后,我尝试连接到客户端:

nc host1 5900

有人可以告诉我这里出了什么问题吗?

以下是/var/log/syslog.1中的一些行:

Nov 22 10:07:33 ubuntu1 xinetd[886]: Reading included configuration file: /etc/xinetd.d/chargen [file=/etc/xinetd.conf] [line=17]
Nov 22 10:07:33 ubuntu1 xinetd[886]: Reading included configuration file: /etc/xinetd.d/daytime [file=/etc/xinetd.d/daytime] [line=28]
Nov 22 10:07:33 ubuntu1 xinetd[886]: Reading included configuration file: /etc/xinetd.d/discard [file=/etc/xinetd.d/discard] [line=26]
Nov 22 10:07:33 ubuntu1 xinetd[886]: Reading included configuration file: /etc/xinetd.d/echo [file=/etc/xinetd.d/echo] [line=25]
Nov 22 10:07:33 ubuntu1 xinetd[886]: Reading included configuration file: /etc/xinetd.d/exec [file=/etc/xinetd.d/exec] [line=26]
Nov 22 10:07:34 ubuntu1 xinetd[886]: Reading included configuration file: /etc/xinetd.d/login [file=/etc/xinetd.d/login] [line=8]
Nov 22 10:07:34 ubuntu1 xinetd[886]: Reading included configuration file: /etc/xinetd.d/rexec [file=/etc/xinetd.d/rexec] [line=13]
Nov 22 10:07:34 ubuntu1 xinetd[886]: Reading included configuration file: /etc/xinetd.d/rexecd [file=/etc/xinetd.d/rexecd] [line=0]
Nov 22 10:07:34 ubuntu1 xinetd[886]: Reading included configuration file: /etc/xinetd.d/rlogin [file=/etc/xinetd.d/rlogin] [line=10]
Nov 22 10:07:34 ubuntu1 acpid: 33 rules loaded
Nov 22 10:07:34 ubuntu1 acpid: waiting for events: event logging is off
Nov 22 10:07:34 ubuntu1 xinetd[886]: Reading included configuration file: /etc/xinetd.d/rsh [file=/etc/xinetd.d/rsh] [line=10]
Nov 22 10:07:34 ubuntu1 xinetd[886]: Reading included configuration file: /etc/xinetd.d/shell [file=/etc/xinetd.d/shell] [line=11]
Nov 22 10:07:34 ubuntu1 xinetd[886]: Reading included configuration file: /etc/xinetd.d/time [file=/etc/xinetd.d/time] [line=11]
Nov 22 10:07:34 ubuntu1 xinetd[886]: removing chargen
Nov 22 10:07:34 ubuntu1 xinetd[886]: removing chargen
Nov 22 10:07:34 ubuntu1 xinetd[886]: removing daytime
Nov 22 10:07:34 ubuntu1 xinetd[886]: removing daytime
Nov 22 10:07:34 ubuntu1 xinetd[886]: removing discard
Nov 22 10:07:34 ubuntu1 xinetd[886]: removing discard
Nov 22 10:07:34 ubuntu1 xinetd[886]: removing echo
Nov 22 10:07:34 ubuntu1 xinetd[886]: removing echo
Nov 22 10:07:34 ubuntu1 xinetd[886]: removing time
Nov 22 10:07:34 ubuntu1 xinetd[886]: removing time
Nov 22 10:07:34 ubuntu1 xinetd[886]: bind failed (Address already in use (errno = 98)). service = exec
Nov 22 10:07:34 ubuntu1 xinetd[886]: Service exec failed to start and is deactivated.
Nov 22 10:07:34 ubuntu1 xinetd[886]: bind failed (Address already in use (errno = 98)). service = login
Nov 22 10:07:34 ubuntu1 xinetd[886]: Service login failed to start and is deactivated.
Nov 22 10:07:34 ubuntu1 xinetd[886]: bind failed (Address already in use (errno = 98)). service = shell
Nov 22 10:07:34 ubuntu1 xinetd[886]: Service shell failed to start and is deactivated.
Nov 22 10:07:34 ubuntu1 xinetd[886]: xinetd Version 2.3.14 started with libwrap loadavg options compiled in.
Nov 22 10:07:34 ubuntu1 xinetd[886]: Started working: 3 available services

其他服务似乎在运行:

netstat -an | egrep'Proto | LISTEN'

Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:512             0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:513             0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:514             0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp6       0      0 ::1:631                 :::*                    LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     10248    /run/user/user1/keyring-0bvpKQ/control
unix  2      [ ACC ]     STREAM     LISTENING     10250    /run/user/user1/keyring-0bvpKQ/ssh
unix  2      [ ACC ]     STREAM     LISTENING     8087     /tmp/.X11-unix/X0
unix  2      [ ACC ]     STREAM     LISTENING     10038    @/tmp/dbus-3MCEY0sgqz
unix  2      [ ACC ]     STREAM     LISTENING     689      @/com/ubuntu/upstart
unix  2      [ ACC ]     STREAM     LISTENING     7758     /var/run/cups/cups.sock
unix  2      [ ACC ]     STREAM     LISTENING     986      @/org/bluez/audio
unix  2      [ ACC ]     STREAM     LISTENING     10192    /tmp/.pcmanfm-socket--0-user1
unix  2      [ ACC ]     STREAM     LISTENING     8086     @/tmp/.X11-unix/X0
unix  2      [ ACC ]     SEQPACKET  LISTENING     882      /run/udev/control
unix  2      [ ACC ]     STREAM     LISTENING     913      /var/run/dbus/system_bus_socket
unix  2      [ ACC ]     STREAM     LISTENING     10028    /tmp/ssh-1PFvKafVKThh/agent.1507
unix  2      [ ACC ]     STREAM     LISTENING     34594    /tmp/.lxterminal-socket:0-user1
unix  2      [ ACC ]     STREAM     LISTENING     968      /var/run/avahi-daemon/socket
unix  2      [ ACC ]     STREAM     LISTENING     982      /var/run/sdp
unix  2      [ ACC ]     STREAM     LISTENING     10629    /tmp/.menu-cached-:0-user1
unix  2      [ ACC ]     STREAM     LISTENING     8433     /var/run/acpid.socket

也许这也有帮助:

service xinetd restart
stop: Rejected send message, 1 matched rules; type="method_call", sender=":1.73" (uid=1000 pid=5311 comm="stop xinetd ") interface="com.ubuntu.Upstart0_6.Job" member="Stop" error name="(unset)" requested_reply="0" destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init")
start: Rejected send message, 1 matched rules; type="method_call", sender=":1.74" (uid=1000 pid=5308 comm="start xinetd ") interface="com.ubuntu.Upstart0_6.Job" member="Start" error name="(unset)" requested_reply="0" destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init")

2 个答案:

答案 0 :(得分:3)

service testservice
{
    port            = 5900
    socket_type     = stream
    protocol        = tcp
    wait            = no
    user            = root
    server          = /usr/bin/testscript.sh       
    server_args     = test
} 

你是对的,我无法让你的工作。上面似乎是。

确保testscript.sh设置为+ x并且顶部包含#!/ bin / sh(在您的示例中它确实以这种方式显示)

答案 1 :(得分:2)

尝试使用localhost时,它的工作正常。你能做一个

吗?
tail -f /var/log/syslog | grep xinetd 

重启xinetd服务的时候? 还可以尝试在拥有xinetd的同一主机上运行nc,看看它是否适用于localhost。