Provided by: shellinabox_2.21+really2.21-1_amd64 bug

NAME

       shellinaboxd - publish command line shell through AJAX interface

SYNOPSIS

       shellinaboxd
              [ -b |   --background[=pidfile] ]   [ -c |  --cert=certdir ]  [ --cert-fd=fd ]  [ --css=filename ]
              [ --cgi[=portrange] ] [ -d | --debug ] [ -f | --static-file=url:file ] [ -g | --group=gid ] [ -h |
              --help ]   [ --linkify=[none|normal|aggressive] ]   [ --localhost-only ]   [ --no-beep ]    [ -n |
              --numeric ]   [ --pidfile=pidfile ]   [ -p |   --port=port ]   [ -s |  --service=service ]  [ -t |
              --disable-ssl ] [ --disable-ssl-menu ] [ -q | --quiet ] [ -u | --user=uid ]  [ --user-css=styles ]
              [ -v | --verbose ] [ --version ]

DESCRIPTION

       The  shellinaboxd  daemon  implements  a  webserver  that  listens on the specified port.  The web server
       publishes one or more services that will be displayed in a VT100 emulator  implemented  as  an  AJAX  web
       application. By default, the port is 4200 and the default service URL is http://localhost:4200/.

       If  no  particular  service  was  requested,  the  server launches /bin/login querying the user for their
       username and password. It then starts the user's default login shell.

       Any modern JavaScript and CSS enabled browser will be  able  to  access  the  published  service  without
       requiring additional plugins.

OPTIONS

       The following command line parameters control the operation of the daemon:

       -b | --background[=pidfile]
            Launch shellinaboxd as a background daemon process. Optionally, write the process id to pidfile.

       -c | --cert=certdir
            If  built  with  SSL/TLS  support  enabled, the daemon will look in certdir for any certificates. If
            unspecified, this defaults to the current working directory.

            If the browser negotiated a  Server  Name  Identification  the  daemon  will  look  for  a  matching
            certificate-SERVERNAME.pem  file.  This  allows  for virtual hosting of multiple server names on the
            same IP address and port.

            If no SNI handshake took place, it falls back on using the certificate in the certificate.pem file.

            The administrator should make sure that there are matching certificates  for  each  of  the  virtual
            hosts on this server, and that there is a generic certificate.pem file.

            If  no  suitable  certificate is installed, shellinaboxd will attempt to invoke /usr/bin/openssl and
            create a new self-signed certificate. This only succeeds if, after dropping privileges, shellinaboxd
            has write permissions for certdir.

            Most browsers show a warning message when encountering a self-signed certificate and then allow  the
            user  the  option  of  accepting  the  certificate.  Due  to  this usability problem, and due to the
            perceived security implications, the use of auto-generated self-signed certificates is intended  for
            testing or in intranet deployments, only.

       --cert-fd=fd
            Instead  of  providing  a --cert directory, it is also possible to provide a filedescriptor fd where
            the certificate and key can be retrieved. While this option disables SNI support, it does  offer  an
            alternative solution for securely providing the private key data to the daemon.

       --css=filename
            Sometimes, it is not necessary to replace the entire style sheet using the --static-file option. But
            instead  a  small  incremental  change  should be made to the visual appearance of the terminal. The
            --css option provides a means to append additional style rules to the end of the default  styles.css
            sheet. More than one --css option can be given on the same command line.

       --cgi[=portrange]
            Instead  of running shellinaboxd as a permanent process, it can be demand-loaded as a CGI web server
            extension. When doing so, it will spawn a server that lives for the duration of the user's  session.
            If  an optional portrange of the form MINPORT-MAXPORT has been provided, the server limits itself to
            these port numbers. They should be configured to pass through the firewall.

            The --cgi option is mutually exclusive with the --background, --pidfile and --port options.

            In order to be useful as a CGI script, the shellinaboxd binary probably will have to be made setuid-
            root.  This is currently a discouraged configuration. Use with care.

       -d | --debug
            Enables debugging mode, resulting in lots of log  messages  on  stderr.   This  option  is  mutually
            exclusive with --quiet and --verbose.

       -f | --static-file=url:file
            The  daemon  serves various built-in resources from URLs underneath the service mount points. One or
            more --static-file options allow for overriding these resources with customized externally  provided
            files.   The  url  can  either  be  an absolute or a relative path. In the former case, it overrides
            exactly one built-in resource for one specific service, whereas in  the  latter  case  it  overrides
            resources for each defined service.

            The following resources are available for customization:

            beep.wav         audio sample that gets played whenever the terminal BEL is sounded.

            favicon.ico      favicon image file that is displayed in the browser's navigation bar.

            ShellInABox.js   JavaScript file implementing the AJAX terminal emulator.

            styles.css       CSS style file that controls the visual appearance of the terminal.

            print-styles.css CSS  style file that controls the visual appearance of printed pages when using the
                             VT100 transparent printing feature.

            It is not recommended to override the root HTML page for a particular service.   Instead,  move  the
            service to an anonymous URL and serve a static-file that references the service in an <iframe>.

            Instead of a file, it is possible to provide the name of a directory. This turns shellinaboxd into a
            simple  web  server that publishes all of the files in that particular directory. This option can be
            helpful when publishing a more complex root HTML page.

       -g | --group=gid
            When started as root, the server drops most privileges at start up. Unless overridden by the --group
            option, it switches to nogroup.

            When already running as an unprivileged user, group changes are not possible.

            If running with SSL/TLS support enabled, the certificates must be  accessible  to  the  unprivileged
            user and/or group that the daemon runs as.

       -h | --help
            Display a brief usage message showing the valid command line parameters.

       --linkify=[none|normal|aggressive]
            the  daemon  attempts to recognize URLs in the terminal output and makes them clickable. This is not
            necessarily a fool-proof process and both false negatives  and  false  positives  are  possible.  By
            default,  only URLs starting with a well known protocol of http://, https://, ftp://, or mailto: are
            recognized. In aggressive mode, anything that looks like  a  hostname,  URL  or  e-mail  address  is
            recognized, even if not preceded by a protocol.

       --localhost-only
            Normally, shellinaboxd listens on all available network interfaces. When operating behind a reverse-
            proxy  that is not always desirable. This command line option tells the daemon to only listen on the
            loopback interface.

       --no-beep
            not only are audible signals undesired in some working environments, but browser support  for  media
            playback  is  often  buggy,  too.  Setting this option suppresses all audio playback and enables the
            visual bell by default.

       -n | --numeric
            When running in --verbose mode, the daemon prints an Apache-style log file to stderr.   By  default,
            host  names  of  peers  get  resolved  before  logging them. As DNS look-ups can be expensive, it is
            possible to request logging of numeric IP addresses, instead.

       --pidfile=pidfile
            The shellinaboxd daemon can be configured to store its process identifier in pidfile.

       -p | --port=port
            Unless overridden by this option, the web server listens on port 4200 for incoming  HTTP  and  HTTPS
            requests.

            shellinaboxd can distinguish between SSL/TLS requests and unencrypted requests. It also knows how to
            negotiate  Server  Name  Identification, allowing the use of a single port for all types of requests
            even when virtual hosting.

       -s | --service=service
            One or more services can be registered on different URL paths:
                SERVICE := <url-path> ':' APPLICATION

            There is a pre-defined application, 'LOGIN', which causes the daemon to invoke /bin/login requesting
            the user's name and password, and starting his login shell. This is the default option for the  root
            user, if no --service was defined. Starting /bin/login requires root privileges.

            There  is  another  pre-defined  application,  'SSH'.  Instead of invoking /bin/login, it calls ssh.
            This is the default option for unprivileged users, if no --service was defined.  This  operation  is
            available  to  both  privileged  and  regular  users.  If  the  optional  host parameter is omitted,
            shellinaboxd connects to localhost.

            Alternatively, an application can be specified by providing a user description, a working directory,
            and a command line:
                APPLICATION := 'LOGIN' | 'SSH' [ ':' <host> ] |  USER ':' CWD ':' CMD

            The keyword 'AUTH' indicates that the user information should be requested interactively, instead of
            being provided as part of the service description:
                USER := 'AUTH' | <username> ':' <groupname>

            The working directory can either be given as an  absolute  path,  or  it  can  be  the  user's  home
            directory:
                CWD := 'HOME' : <dir>

            The  command that shellinaboxd executes can either be specified as the 'SHELL' keyword, denoting the
            user's default login shell, or an arbitrary command line:
                CMD := 'SHELL' : <cmdline>

            The <cmdline> supports expansion of variables of the form ${VAR}.  Supported variables are:

            ${columns}  number of columns.

            ${gid}      numeric group id.

            ${group}    group name.

            ${home}     home directory.

            ${lines}    number of rows.

            ${peer}     name of remote peer.

            ${realip}   value of HTTP header field 'X-Real-IP'.

            ${uid}      numeric user id.

            ${url}      the URL that serves the terminal session.

            ${user}     user name.

            Other  than  the  environment  variables  of   $TERM,   $COLUMNS,   $LINES,   $SHELLINABOX_PEERNAME,
            $SHELLINABOX_REALIP and $SHELLINABOX_URL, services can have environment variables passed to them, by
            preceding the <cmdline> with space separated variable assignments of the form KEY=VALUE.

            The  <cmdline>  supports single and double quotes, as well as backslashes for escaping characters in
            the familiar fashion.

            Please note that when invoking shellinaboxd from a command line shell, additional quoting  might  be
            required to prevent the shell from expanding the variables prior to passing them to the daemon.

            If  no explicit --service has been requested, shellinaboxd defaults to attaching the default service
            to the root directory of the web server. For root, this is /bin/login, and for  unprivileged  users,
            this  is  ssh  localhost.  This  is  equivalent  to  saying  --service=/:LOGIN,  or --service=/:SSH,
            respectively.

            Please note that for SSH service to work properly, we need a running ssh server on local system with
            enabled password authentication. If we are using <host> parameter, same conditions must be  true  on
            that remote system.

       -t | --disable-ssl
            By  default,  shellinaboxd  redirectes all incoming HTTP requests to their equivalent HTTPS URLs. If
            promoting of connections to encrypted SSL/TLS sessions is undesired, this behavior can be disabled.

            This option is  also  useful  during  testing  or  for  deployment  in  trusted  intranets,  if  SSL
            certificates are unavailable.

       --disable-ssl-menu
            If  the  user  should not be able to switch between HTTP and HTTPS modes, this choice can be removed
            from the context menu. The user can still make this choice by directly going to the appropriate URL.

       -q | --quiet
            Suppresses all messages to stderr.  This option is mutually exclusive with --debug and --verbose.

       -u | --user=uid
            If started as root, the server drops privileges by changing to  nobody,  unless  the  uid  has  been
            overridden by this option.

            For more details, refer to the description of the --group option.

       --user-css=styles
            The  visual  appearance  of  the  terminal  emulator can be customized through user-selectable style
            sheets. These style sheets will show up as options in the right-click context menu of  the  terminal
            emulator.

            Styles sheet make up either independently selectable on/off options, or multiple style sheets can be
            grouped  together.  When  forming  a  group, only one member of the group can be active at any given
            time. This is used for multiple-choice options.

            Multiple independent groups are separated by semicolons:
                STYLES := GROUP { ';' GROUP }*

            The members of a group are separated by commas:
                GROUP := OPTION { ',' OPTION }*

            Groups with exactly one member are used for options that can be independently turned on and off.

            Options include a human readable label that will be shown in the context menu, followed by the  name
            of  the CSS file. They also must include an indicator showing whether the option should initially be
            turned on or turned off. Within a group, exactly one option should be turned on:
                OPTION := <label> ':' [ '-' | '+' ] <css-file>

            The user's selection of options will be persisted in a cookie. This means, the default  settings  of
            options  as  passed  on  the  command line only takes effect the very first time the user visits the
            terminal emulator in his browser. On all subsequent visits, the user's preferences take precedence.

       --user-css-dir=directory
            The directory directory is scanned for files ending '.css', which are added to  the  list  of  user-
            selectable style sheet options. Filenames are of the form:
                <ID> ( '+' | '_' ) <option name> '.css'

            Any  options  with  identical  IDs  will  be put into the same option group.  Options that should be
            turned on by default should use the '+' delimiter and any others '_'. The characters ':',  ',',  and
            ';' are invalid within option names.

       -v | --verbose
            Enables  logging of Apache-style log file to stderr.  This option is mutually exclusive with --debug
            and --quiet.

       --version
            Prints the version number of the binary and exits.

CONFIGURATION

       There are no configuration files or permanent settings for shellinaboxd.

       A small number of run-time configuration options are available from a context menu that becomes available
       when clicking the right mouse button. These options get persisted in a browser cookie.

       Many sites already have a web server running and would like to integrate shellinaboxd into their existing
       site. This is most commonly done by means of a reverse-proxy entry for the main web  server.  For  Apache
       this would require adding an option such as:
            <Location /shell>
                ProxyPass  http://localhost:4200/
                Order      allow,deny
                Allow      from all
            </Location>

       If you are using a different web server, refer to that server's documentation on how to configure reverse
       proxy operations.

       When  using a reverse proxy, the --localhost-only option would normally be enabled as well.  In addition,
       the --disable-ssl might also be considered depending on the exact configuration details  of  the  reverse
       proxy.

EXAMPLES

       shellinaboxd Attaches  a  web-enabled  login  shell  to  https://localhost:4200/.   If the user connected
                    without SSL, the session will automatically be promoted.  Unless  SSL  certificates  can  be
                    found  in the current directory, the daemon will automatically generate suitable self-signed
                    certificates. If the command was invoked by a non-root user, the daemon uses ssh instead  of
                    /bin/login for the session.

       shellinaboxd -t
                    Attaches a web-enabled login shell to http://localhost:4200/ with SSL/TLS support disabled.

       shellinaboxd -t -f beep.wav:/dev/null
                    Runs all services with the audible-bell permanently disabled.

       shellinaboxd -s /:SSH:example.org
                    The terminal connects to a ssh session on example.org.

       shellinaboxd -t -s /:AUTH:HOME:/bin/bash
                    Interactively  request  the user's name and password prior to launching a Bourne shell. This
                    command can be run by unprivileged users. But if doing so, it only  allows  this  particular
                    user to log in.

       shellinaboxd -c certificates -u shellinabox -g shellinabox
                    If  the  certificates  directory  exists  and is writable by the shellinabox user and group,
                    self-signed SSL certificates will  be  generated  in  this  directory.  This  might  require
                    creating an appropriately named user first.  Running this command as root allows any user on
                    the  system to log in at http://localhost:4200/.  Sessions will automatically be promoted to
                    SSL/TLS.

       shellinaboxd -t -s /:LOGIN -s /who:nobody:nogroup:/:w
                    In addition to the login shell at http://localhost:4200, show a list of currently logged  in
                    users  when  accessing http://localhost:4200/who.  This command must be run as root in order
                    to be able to change to nobody:nogroup as requested by the service description.

       shellinaboxd -t -s '/:root:root:/:wy60 -c /bin/login'
                    Instead of the standard ANSI/VT100 terminal,  publish  a  Wyse  60™  terminal.  Again,  this
                    command should be run as root.

       shellinaboxd --css white-on-black.css
                    Loads  the  white-on-black.css  style sheet from the current directory and appends it to the
                    built-in styles.css sheet. This causes the terminal to always render white text on  a  black
                    background.

       shellinaboxd --user-css Normal:+black-on-white.css,Reverse:-white-on-black.css
                    Allow the user to select whether they want text to be rendered normally or in reverse video.
                    This command line option adds a new entry to the right-click context menu.

DIAGNOSTICS

       The  daemon  returns  a  non-zero  exit  code in case of failure. With the exception of a small number of
       common error cases that are handled explicitly, most errors result in printing a "Check failed"  message.
       This does not typically indicate a bug in the program but is instead its normal way of reporting errors.

       Common failure conditions are reusing a port that is already in use, lack of sufficient privileges to run
       a service, failure to find SSL/TLS certificates, and failure to write newly generated certificates to the
       certification directory.

SEE ALSO

       chmod(1), last(1), login(1), sh(1), shells(5), openssl(1SSL), w(1), wy60(1), xterm(1).

SECURITY

       The  daemon  uses  privilege  separation  techniques to allow it to drop privileges early. It is aware of
       setuid flags and restricts some operations when launched as a setuid application.

       Despite these safety features, a bug could conceivably lead to a  determined  attacker  gaining  elevated
       privileges. It is therefore strongly discouraged to set the setuid flag on the binary.

       The expected deployment would be from a system rc script launched by /sbin/init.  For extra security, the
       --group and --user options should be used to change to a dedicated user.

AUTHOR

       Copyright (C) 2008-2010 by Markus Gutschke <markus@shellinabox.com>.

       This  program  is  free  software;  you  can  redistribute it and/or modify it under the terms of the GNU
       General Public License version 2 as published by the Free Software Foundation.

       This program is distributed in the hope that it will be useful, but WITHOUT ANY  WARRANTY;  without  even
       the  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
       License for more details.

       You should have received a copy of the GNU General Public License along with this program; if not,  write
       to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA

       In addition to these license terms, the author grants the following additional rights:

       If  you  modify  this program, or any covered work, by linking or combining it with the OpenSSL project's
       OpenSSL library (or a modified version of that library), containing parts covered by  the  terms  of  the
       OpenSSL  or  SSLeay  licenses,  the author grants you additional permission to convey the resulting work.
       Corresponding Source for a non-source form of such a combination shall include the source  code  for  the
       parts of OpenSSL used as well as that of the covered work.

       You may at your option choose to remove this additional permission from the work, or from any part of it.

       If  you  would like to negotiate different licensing terms that are compatible for integration with other
       projects, please contact the author.

       If the OpenSSL system libraries can be found at run-time, they will be invoked by shellinaboxd to provide
       SSL/TLS support. The OpenSSL and SSLeay licenses require the following notices:

       This product includes software developed  by  the  OpenSSL  Project  for  use  in  the  OpenSSL  Toolkit.
       (http://www.openssl.org/)

       This product includes cryptographic software written by Eric Young (eay@cryptsoft.com)

BUGS

       Due to browser limitations, some features might not be available to users of all browers.

       Konqueror  does  not  allow  for reliable interception of CTRL keys. If you press a key together with the
       CTRL modifier, it continues  performing  the  browser's  predefined  behavior  for  this  particular  key
       combination.  In most cases, it also fails to report the correct key to the terminal emulator. As a work-
       around, pressing both the CTRL and the WINDOWS key sometimes works.

       Some browsers, most notably IE on Windows, disallow interception of ALT keys and always  interpret  these
       keys as menu accelerators. As a work-around, many UNIX applications allow pressing ESC, instead of ALT.

       When  using non-US keyboard layouts, some browser do not allow for reliably determining shifted ALT keys.
       Please report these cases if they turn out to be a problem, as work-arounds might be possible.

       Access to the native clipboard is typically not possible. Instead, an internal clipboard accessible  from
       the right-button context menu is used for all but IE.

       Some  browsers  restrict  the  number of concurrent connections to a server. This restricts how many AJAX
       terminals can be opened simultaneously. If this becomes a problem, users can typically reconfigure  their
       browsers to raise the limit.

       There  have  been  reports  of the VLC plugin on Linux/x86_64 crashing Firefox when the browser page gets
       reloaded. Setting the --no-beep option eliminates all references to VLC and thus appears to  work  around
       this crash.

                                                  Sep 11, 2010                                   SHELLINABOXD(1)