Executing script on receiving incoming connection with xinetd

14,734

Solution 1

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

You're right, I couldn't get yours to work. The above seemed to.

Make sure that testscript.sh is set +x and at the top contains #!/bin/sh (in your example it does appear that way)

Solution 2

It works perfectly fine for me trying on localhost. Can you do a

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

while restarting the xinetd service? Also try running nc on the same host where you have xinetd and see if it works on localhost.

Share:
14,734

Related videos on Youtube

user1812379
Author by

user1812379

Updated on September 18, 2022

Comments

  • user1812379
    user1812379 over 1 year

    I want xinetd to execute a shell script when a connection is received on a certain port. To accomplish this, followed this tutorial: [enter link description here][1]

    Unfortunately, the whole thing doesn't work as I hoped that's why I am going to show you my configuration.

    The script that is called by xinetd is located at /usr/local/bin. It can be executed without any problems:

    #!/bin/bash
    echo "connection received"
    

    /etc/xinetd.d/testservice has this content:

    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
    }
    

    In /etc/services I added this line:

    testservice        5900/tcp 
    

    Then I restarted xinetd with service xinetd restart

    Finally, I tried to connect to the client:

    nc host1 5900
    

    Could someone please tell me what went wrong here?

    Here are some lines from /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
    

    The other services seem to run:

    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
    

    Maybe this is also helpful:

    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")
    
  • LtWorf
    LtWorf over 11 years
    Did you put your configuration file in /etc/xinetd.d/testservice? It doesn't list it in the log.
  • user1812379
    user1812379 over 11 years
    Yes, the service is in the same directory as all other service files (rlogin, rexec, time etc.).
  • Pavel Šimerda
    Pavel Šimerda almost 10 years
    You're missing type=unlisted.