Provided by: rush_2.3-1_amd64 bug

NAME

       rush.rc - configuration rules for remote user shell

DESCRIPTION

       The  file  /etc/rush.rc contains a set of rules that the rush(8) shell uses in order to determine whether
       the user is allowed to execute the requested command and to set up the environment for its execution.

       Empty lines are ignored.  Lines beginning with a pound sign are comments and are ignored as well.

       Except for comments and empty lines, each line of the configuration file  consists  of  the  keyword  and
       optional  value,  and  constitutes  a  statement.   Exceedingly  long  lines may be split across multiple
       physical lines, by ending each line with a backslash immediately followed by a newline.  Statements  fall
       into  two  major  classes: section and regular statements.  A section statement serves as a container for
       one or more regular statements that pursue the same goal, thus playing the role of a chapter in  a  book.
       A regular statement modifies a certain aspect of the program's behavior.

       The overall file structure is as follows:

         rush 2.0

         global
           keyword value
           ...

         rule A
           keyword value
           ...

         rule B
           keyword value
           ...

       A  configuration  file  must  begin  with a rush statement indicating the version of the syntax this file
       uses.  Current versions of rush implement syntax version  2.0.   In  the  absence  of  the  initial  rush
       statement,  the  program will treat the configuration file as written in legacy configuration syntax (see
       http://www.gnu.org.ua/software/rush/manual/1.x for details).

       There are two section statements: global and rule.  The global section  contains  statements  configuring
       the  behavior  of the program in general.  There can be as many global statements in the configuration as
       you consider necessary, each of them affecting the material up to the next global statement,  or  end  of
       the file, whichever occurs first.

       Examples  of  statements  that can be used in a global section are: debug, which sets the debug verbosity
       level, message, which configures error messages, etc.  See the global section for the full list.

       One or more rule statements constitute the core of the configuration.  Each  rule  statement  provides  a
       recipe  for serving a specific class of input commands.  When rush is invoked with a specific command, it
       will scan the configuration file looking for a rule that matches the requested command line.  If  such  a
       rule is found, it will be applied.  Commands that don't match any rule will be rejected.

       A  rule statement may be followed by a tag, an arbitrary sequence of non-whitespace characters serving as
       a label for this rule.  This sequence will be used in diagnostic messages to identify this rule.  In  the
       absence  of  user-supplied tag, the default one will be generated, consisting of the # symbol followed by
       the ordinal number of the rule in the configuration file (started with 1).

       To match a particular command, each  rule  should  contain  the  match  statement.   Its  argument  is  a
       conditional  expression that can contain comparison and boolean operators.  The operands can refer to the
       command line using shell-like variables: $command to refer to the entire command line, $#,  referring  to
       the  number  of arguments in the command line (the command itself being counted as one of the arguments),
       $0 meaning the command name, and $1, $2,  etc.,  referring  to  the  particular  command  line  arguments
       (arguments past the ninth one can be accessed as, e.g.  ${10}).  For example, the following rule:

         rule
           match $command == "ls"

       will match only the ls command without arguments.

       The  ~  (tilde) operator denotes regular expression matching.  For example, the following rule matches ls
       command, optionally preceded with any path prefix:

         rule
           match $0 ~ "^(.*/)?ls$"

       Match expressions can contain terms of arbitrary complexity.  Consider the following example:

         rule
           match $0 ~ "^(.*/)?ls$" && $# == 2 \
                 && $1 !~ "^(/|/etc)$"

       This rule will match any ls command having exactly one argument, unless  that  argument  is  /  or  /etc.
       Notice  the  use  of  the  !~  operator to denote the negated regular expression matching, and the use of
       backslash to split a single expression across two physical lines.

       Variables are referenced using the same syntax as in shell.  For example, ${1:-/bin} expands to the value
       of the first parameter, if it is supplied, or to the string  "/bin"  otherwise.   For  details.  see  the
       section REFERENCE: VARIABLE EXPANSION.

       Although  important, the match statement is not mandatory in a rule statement.  If it is absent, the rule
       will match any command line.  This is normally used in fall-through rules.  A fall-through  rule  applies
       modifications  to  the  command  environment.  After applying such rule, the scanning resumes at the rule
       that follows it. Fall-through rules are marked with the fall-through statement.

   set
       A rule can modify the command line and environment in which it will be executed.  The  set  statement  is
       provided  for  altering  the  command  line or its parts.  It takes three arguments: the variable name or
       index, the operator and the value.  For example, the statement:

         set command = "/bin/sftp-server -u 002"

       replaces the entire command line.  To replace particular arguments, use the [N] syntax, where  N  is  the
       index of the argument in the command line.  For example, to set the first argument:

         set [1] = "/tmp"

       The  part  to  the right of the equals sign can contain a transformation, i.e. a string followed by the ~
       operand and a s-expression of the form s/regexp/replacement/[flags].  Parenthesized groups in regexp  can
       be referred to in replacement using the backreference construct \N, where N is the 1-based ordinal number
       of the group.  For example, the following statement sets the second argument to the directory part of the
       first one:

         set [2] = "$1" ~ "s/(.*)\\//\\1/"

       Two points are worth noticing.  First, the left operand of ~ undergoes variable expansion.  Secondly, the
       right-hand side operand is quoted and therefore each backslash in it has to be escaped.

       The special operator =~ is used if the resulted value is assigned to the same variable that served as its
       argument.  For example, the two statements below are equivalent:

         set [1] =~ "s/(.*)\\//\\1/"
         set [1] = "$1" ~ "s/(.*)\\//\\1/"

       Parenthesized  groups matched by the most recent set statement remain available for use in the statements
       that follow it in the rule.  To refer to the group from the recent matching, use the following construct:
       %N.  For example, the following two statements set the first argument to the directory part,  and  second
       argument to the base name of the original $1 value:

         set [1] =~ "s/(.*)\\/(.*)/\\1/"
         set [2] = %2

       The set statement operates not only on positional arguments and built-in variables, but also on arbitrary
       user-defined  variables.  A user-defined variable springs into existence when it first appears as a left-
       hand side argument to the set statement.  The name of the  variable  must  follow  the  usual  rules  for
       variable  names:  it  must  begin  with an alphabetical character or underscore and contain only letters,
       digits and underscores.  References to user-defined variables follow the  same  syntax  as  for  built-in
       ones.

       The following example uses temporary variable temp to swap two arguments:

         set temp = $1
         set [1] = $2
         set [2] = $temp

   unset
       Variable  definitions  can  be  removed  using the unset statement.  It takes variable name or positional
       argument index as its argument:

         unset temp

       When index is given, the corresponding positional argument is removed and all arguments to the  right  of
       it are shifted one position left to occupy the released slot.  For example, given the command line

         scp -d -v -t /incoming

       the statement

         unset 1

       will reduce it to

         scp -v -t /incoming

   delete
       The  delete  statement  provides a generalization of unset for positional arguments.  It takes one or two
       argument indexes as arguments.  When used with one index, it provides the same  functionality  as  unset.
       When two indices are given, it deletes all arguments between those indices (inclusive).  For example, the
       statement

         delete 1 2

       will change the command line from the above example to

         scp -t /incoming

       Using negative indices, one can indicate arguments counting from right to left.  Thus, the following will
       delete all arguments starting from the third:

         delete 3 -1

   remopt
       Whereas  delete  and unset remove arguments at given positions, the remopt statement allows you to remove
       specific command line options from the command line.  This is useful to  ensure  no  potentially  harmful
       options  can  be  passed by the user.  The statement takes one or two arguments.  First argument supplies
       the short option letter.  For example, the following removes all occurrences of the -A option:

         remopt A

       If there is a long-option equivalent, it can be supplied as the second argument.  For example,  if  --all
       is an alias for -A, the above statement would be rewritten as:

         remopt A all

       Notice, that the initial dash or double-dash is omitted from both the short and long option designation.

       When  looking  for long option in the command line, remopt will recognize its possible abbreviations.  In
       the example above, eventual occurrences of --al will be removed as well.

       If the option takes an argument,  follow  the  first  argument  by  a  colon.   For  example,  to  remove
       occurrences of the options -r along with its arguments write

         remopt r:

       The long option equivalent can be specified as well, e.g.:

         remopt r: root

       This  will  recognize  all  possible  ways  of  option usage in the command line, such as: -r ARG, -rARG,
       --root=ARG, or --root ARG.  -afr ARG In each case, both the option and its argument will be  removed,  so
       that  the  modified  command  line  will  remain  valid.   Short  option  appearing  in a cluster will be
       recognized, .e.g -afr ARG will be replaced by -af.  Finally, if the option takes  an  optional  argument,
       follow its short letter by two colons, as in:

         remopt r:: root

   insert
       Arguments  can  also  be  inserted  at  arbitrary  positions.   The insert statement is provided for this
       purpose.  Its syntax is similar to set:

         insert [N] = value

       and

         insert [N] = value ~ s/regex/replace/

       where N is the position where to insert the new argument. All arguments starting from Nth will be shifted
       one position to the right, and the value will be stored in the Nth slot.  In the second form,  the  value
       to be inserted is computed by applying the replacement expression to value.

REFERENCE: LEXICAL STRUCTURE

       A statement consists of a keyword and arguments, separated by any amount of whitespace.  Arguments can be
       one of the following:

       Identifiers
              Identifiers  begin  with  a  letter  and consist of letters, digits, underscores and dashes.  They
              serve as keywords and variable names.

       Decimal numbers
              A sequence of decimal digits, optionally preceded by a minus or plus sign.

       Unquoted strings
              An unquoted string is any contiguous sequence of any characters, except newlines,  whitespace  and
              the following special characters: \, ", !, =, <, >, (, ), {, }, [, ], $, %, &, |, ~, #.

       Quoted strings
              A quoted string is a sequence of characters enclosed in double-quotes.  Quoted strings are subject
              to backslash interpretation, backreference interpretation and variable expansion.

              During  backslash  interpretation,  the  escape sequences are recognized and replaced as per table
              below:

                      Sequence    Replaced with
                      \a          Audible bell character (ASCII 7)
                      \b          Backspace character (ASCII 8)
                      \f          Form-feed character (ASCII 12)
                      \n          Newline character (ASCII 10)
                      \r          Carriage return character (ASCII 13)
                      \t          Horizontal tabulation character (ASCII 9)
                      \v          Vertical tabulation character (ASCII 11)
                      \\          A single backslash
                      \"          A double-quote.
                      \%          Percent sign

              In addition, the sequence \newline is removed from the string.  This  allows  one  to  split  long
              strings over several physical lines.

              During  the backreference interpretation, references to parenthesized groups in regular expression
              are replaced with the actual content of the corresponding  group  in  the  most  recently  matched
              string.   A reference is %{N} where N is a decimal number.  If N is one digit, curly braces can be
              omitted: %N If the % character resulted from previous backslash interpretation,  no  backreference
              interpretation occurs.

              Strings  used  in the left-hand side of a comparison expression are subject to variable expansion.
              This is discussed later.

       Backreferences
              The construct %{N} is replaced with the substring that matched the Nth parenthesized subgroup in a
              most recently performed regular expression match.  If N is one digit, curly braces can be omitted.

       Variable references
              Variable references consist of a $ sign, followed by the positional argument  number  or  variable
              name,  optionally  enclosed in curly braces.  Positional arguments greater than 9 must be enclosed
              in curly braces.  The variable name must follow the rules for valid  identifiers:  it  must  begin
              with  a  letter and consist of letters, digits and underscores.  Variable name in curly braces can
              be followed by -, =, ?, or +, optionally preceded by : as summarized in the table below:

                      Reference             Meaning
                      ${VAR:-WORD}          Use Default Values
                      ${VAR:=WORD}          Assign Default Values
                      ${VAR:?WORD}          Display Error if Null or Unset
                      ${VAR:+WORD}          Use Alternate Value

              where WORD stands for any valid token as described in this section.  See  the  section  REFERENCE:
              VARIABLE EXPANSION, for a detailed discussion of these forms and their meaning.

       Comparison and boolean operators

                      &&                    Boolean AND
                      ||                    Boolean OR
                      !                     Boolean negation
                      ==                    Equality (string or numeric)
                      !=                    Inequality (string or numeric)
                      <                     Less than
                      <=                    Less than or equal to
                      >                     Greater than
                      >=                    Greater than or equal to
                      ~                     Regexp matching
                      !~                    Negated regexp matching
                      in                    Membership in set of strings
                      group                 Membership in UNIX group
                      =                     Assignment
                      =~                    Regular expression substitution

REFERENCE: VARIABLE EXPANSION

       Most statements in the configuration file undergo variable expansion prior to their use.  During variable
       expansion,  references  to  variables  in  the  string are replaced with their actual values.  A variable
       reference has two basic forms:

         $V
         ${V}

       where V is either the name of the variable (request, environment, or user-defined), or the index  of  the
       positional variable.  The notation in curly braces serves several purposes.  First, it is obligatory if V
       is  an  index of the positional variable that is negative or greater than 9.  Secondly, it should be used
       if the variable reference is immediately followed by an alphanumeric  symbol,  which  will  otherwise  be
       considered part of it (as in ${home}dir).  Finally, this form allows for specifying the action to take if
       the variable is undefined or expands to an empty value.

       The following special forms are recognized:

       ${VARIABLE:-WORD}
              Use  Default  Values.   If  VARIABLE  is  unset  or  null,  the  expansion of WORD is substituted.
              Otherwise, the value of VARIABLE is substituted.

       ${VARIABLE:=WORD}
              Assign Default Values.  If VARIABLE is unset or null, the expansion of WORD  is  assigned  to  the
              variable.  The value of VARIABLE is then substituted.

       ${VARIABLE:?WORD}
              Display Error if Null or Unset.  If VARIABLE is null or unset, the expansion of WORD (or a message
              to  that  effect if WORD is not present) is output to the current logging channel.  Otherwise, the
              value of VARIABLE is substituted.

       ${VARIABLE:+WORD}
              Use Alternate Value.  If VARIABLE  is  null  or  unset,  nothing  is  substituted,  otherwise  the
              expansion of WORD is substituted.

REFERENCE: STATEMENTS

       There are three global statements, two of which can contain multiple substatements:

       rush 2.0
              Declares  the version of the syntax this configuration file is written in.  This must be the first
              statement in the configuration file.  If this statement is missing, the configuration file will be
              treated as legacy configuration file from previous versions of GNU rush.  For  the  discussion  of
              the legacy configuration file, please refer to http://www.gnu.org.ua/software/rush/manual/1.x.

       global Defines global settings.

       rule [TAG]
              Contains a set of rules for a certain class of input command lines.

   global
       Introduces  global  settings.   This statement is followed by one or more substatements.  Global settings
       end at the nearest rule statement that follows.  They remain in effect until the next global statement is
       encountered which alters them.

       The following statements may appear in this section.

       expand-undefined BOOL
              Controls how undefined variables are expanded.  If BOOL is true, references to undefined variables
              are replaced with empty values.  If it is false (the default), an  error  message  is  issued  and
              program terminates.

              Any of the following values can be used as a synonym for true: yes, on, t, 1.

              The following values can be used as synonyms for false: no, off, nil, 0.

       debug NUM
              Set  debugging  level.   The  bigger  NUM  is,  the  more  verbose  is the logging.  The debugging
              information is reported via syslog at facility authpriv, priority debug.

       sleep-time NUM
              Set the time in seconds to sleep before exiting on error.  This statement is intended as a measure
              against brute-force attacks.  Default sleep time is 5 seconds.

       message CLASS TEXT
              Define a textual message which is returned to the remote party if an  error  of  the  given  CLASS
              occurs.  Valid classes are:

           usage-error
                  This error is reported when rush has been invoked improperly.  The default text is:

                  "You are not permitted to execute this command."

           nologin-error
                  A  message which is returned if there is no such user name in the password database.  Defaults
                  to:

                  "You are not permitted to execute this command."

           config-error
                  Define a textual message which  is  returned  if  the  configuration  file  contained  errors.
                  Default is:

                  "Local configuration error occurred."

           system-error
                  Define a textual message which is returned if a system error occurs.  Default is:

                  "A system error occurred while attempting to execute command."

       regexp FLAG [FLAG...]
              Configure  the  type  of  regular  expressions  to  be  used  by subsequent match, set, and insert
              statements.  Each FLAG is a word specifying a regular expression feature.  It can be preceded by a
              plus sing to enable this feature (this is the default), or by the minus sign to disable it.  Valid
              flags are:

           extended
                  Use POSIX Extended Regular Expression syntax when interpreting regex.  This is the default.

           basic  Use basic regular expressions.  Equivalent to -extended.

           icase or ignore-case
                  Do not differentiate case.  Subsequent regex matches will be case insensitive.

       include-security FLAG [FLAG...]
              Configure the security checks for include files.  Valid flags are:

           all    Enable all checks.

           owner  The file must be owned by root.

           iwgrp or groupwritablefile
                  Forbid group writable files.

           iwoth or worldwritablefile
                  Forbid world writable files.

           dir_iwgrp or groupwritabledir
                  Forbid files that reside in group writable directories.

           dir_iwoth or worldwritabledir
                  Forbid files that reside in world writable directories.

           link   Forbid symbolic links to files residing in group or world writable directories.

       Each of the above keywords can be prefixed by no, which reverses its meaning.  The special  keyword  none
       disables all checks.

       acct-umask MASK
              Set umask used when accessing accounting database files.  Default value is 022.

       acct-dir-mode MODE
              Set mode bits for the accounting directory.  The argument is the mode in octal.

       acct-file-mode MODE
              Set mode bits for the wtmp and utmp files.

   rule
       Defines  a  rule.   This is a block statement, which means that all statements located between it and the
       next rule statement (or end of file, whichever occurs first) modify the definition of that rule.

       The syntax is:

         rule TAG

       Optional TAG argument supplies the identifier for that rule.  It is used in diagnostic messages.  If  tag
       is missing, rush will supply a default one, which is constructed by concatenating the # character and the
       ordinal number of rule in the configuration file, in decimal notation.  Rule numbering starts from 1.

       A rule can contain the following statements:

       match EXPR
              Defines conditions that decide whether the rule matches the particular request.  The EXPR argument
              is  a  comparison  expression.   It  can be a simple comparison expression or a boolean expression
              involving several other expressions.

              A simple expression is either a comparison or a membership test.  A  comparison  has  the  general
              syntax

                lhs op rhs

              where  lhs  and  rhs  are operands and op is the operation.  The lhs is either a string (quoted or
              unquoted), or a variable reference.  The rhs is a string or number.  Prior  to  evaluating  simple
              expression,  its LHS undergoes variable expansion.  In contrast, the RHS operand is always treated
              verbatim.

              The comparison operator OP is one of the following:

                      ==                    Equality (string or numeric)
                      !=                    Inequality (string or numeric)
                      <                     Less than
                      <=                    Less than or equal to
                      >                     Greater than
                      >=                    Greater than or equal to
                      ~                     Regexp matching
                      !~                    Negated regexp matching

              Two membership tests are available.  The in test has the form

                LHS in ( STRING ... )

              and evaluates to true if LHS matches one of the strings in parentheses.   LHS  undergoes  variable
              expansion and backreference interpretation prior to comparison.

              The group test has the following syntax:

                group GRP

              It  returns true if the requesting user is a member of the group GRP.  Several groups can be given
              in parentheses:

                group (GRP ...)

              in which case the test return true if the user is a member  of  at  least  one  of  the  mentioned
              groups.

              Compound boolean expression combine one or more expressions using logical operators

                      &&                    Boolean AND
                      ||                    Boolean OR
                      !                     Boolean negation

       set NAME = VALUE
              Sets  the  variable  NAME  to  VALUE,  which  undergoes  backreference interpretation and variable
              expansion.

       set [N] = VALUE
              Sets the command line argument N to VALUE

       set NAME = VALUE ~ S-EXPR
              Applies the sed(1)-like search-and-replace expression S-EXPR to VALUE and assigns  the  result  to
              the  variable  NAME.   Both  VALUE  and S-EXPR are subject to variable expansion and backreference
              interpretation.

       set [N] = VALUE ~ S-EXPR
              Similar to the above, but assigns the result to the Nth command line argument.

       set NAME =~ S-EXPR
              This is a shortcut for

                set NAME = $NAME ~ S-EXPR

              i.e. it applies the search-and-replace expression S-EXPR to the current value of the variable NAME
              and stores the resulting string as its new value.

       set [N] =~ S-EXPR
              A shortcut for

                set [N] = $N ~ S-EXPR

       The S-EXPR, is a sed replace expression of the form:

         s/REGEXP/REPLACE/[FLAGS]

       where REGEXP is a regular expression, REPLACE is a replacement for each part of the  input  that  matches
       REGEXP  and  optional  FLAGS are flag letters that control the substitution.  Both REGEXP and REPLACE are
       described in sed(1).

       As in sed, you can give several replace expressions, separated by semicolons.

       The supported FLAGS are:

       g      Apply the replacement to all matches to the REGEXP, not just the first.

       i      Use case-insensitive matching.

       x      REGEXP is an extended regular expression.

       NUMBER Only replace the NUMBERth match of the REGEXP.

       Notice, that the POSIX standard does not specify what should  happen  when  you  mix  the  g  and  NUMBER
       modifiers.   Rush follows the GNU sed implementation in this regard, so the interaction is defined to be:
       ignore matches before the NUMBERth, and then match and replace all matches from the NUMBERth on.

       Also notice, that  usually  S-EXPR  is  a  quoted  string,  and  as  such  it  is  subject  to  backslash
       interpretation.   It  is  therefore  important  to properly escape backslashes, especially in the REPLACE
       part.  E.g.

         set bindir = $program ~ "s/(.*)\\//\\1/"

       insert [N] = VALUE
              Shift command line arguments starting from the Nth one position to the right and  store  VALUE  in
              the Nth slot. VALUE is subject to variable expansion and backreference interpretation.

       insert [N] = VALUE ~ S-EXPR
              Shift  command  line  arguments  starting  from the Nth one position to the right, apply S-EXPR to
              VALUE and store the result in the Nth slot.   Both  S-EXPR  and  VALUE  are  subject  to  variable
              expansion and backreference interpretation.

       unset NAME
              Unset the variable NAME.

       unset N
              Unset  the  positional  argument  N  (an  integer  number  greater than 0), shifting the remaining
              arguments one position left.  This is the same as delete N.

       remopt SOPT
              Remove from the command line all occurrences of the short option  described  by  SOPT.   The  SOPT
              argument  is  the  short  option  letter,  optionally  followed  by a colon if that option takes a
              mandatory argument, or by two colons if it takes an optional argument.

       remopt SOPT LOPT
              Same as the above.  LOPT supplies the long option equivalent for the  short  option  described  by
              SOPT.

       delete N
              Delete Nth argument.

       delete I J
              Delete arguments between I and J, inclusive.

       map NAME FILE DELIM KEY KN VN
              This  statement  uses  file  lookup  to find a new value for the variable NAME.  The FILE argument
              supplies the name of the map file.  It must begin with / or ~/.  Before use, the file  permissions
              and  ownership  are checked using the criteria supplied in the include-security statement (see the
              global section).

              The map file consists of records, separated by newline characters.  Each record, in turn, consists
              of fields, separated by characters  listed  in  the  DELIM  argument.   If  it  contains  a  space
              character,  then  fields  may  be  delimited by any amount of whitespace characters (spaces and/or
              tabulations).  Otherwise, exactly one character delimits  fields.   Fields  within  a  record  are
              numbered starting from 1.

              The map action operates as follows.  First, variable expansion and backreference interpretation is
              performed  on  the  KEY  argument.   The  result will be used as actual lookup key.  Then, FILE is
              scanned for a record whose KNth field matches the lookup key.  If such  a  record  is  found,  the
              value  of  its  VNth  field is assigned to the variable.  Otherwise, if DEFAULT is supplied, it is
              assigned to the variable.  Otherwise, the variable remains unchanged.

       map [N] FILE DELIM KEY KN VN DEFAULT
              Same as above, but the result of the lookup is assigned to Nth argument.

       The following statements modify command execution environment:

       clrenv Clear the environment.

       keepenv NAME ...
              Retain the listed variables.  This statement should be used in conjunction with clrenv.

              Argument is a whitespace delimited list of variables to retain.  Each element in the list  can  be
              either  a  variable  name, or a shell-style globbing pattern, in which case all variables matching
              that pattern will be retained, or a variable name followed by an equals sign and a value, in which
              case it will be retained only if its actual value equals the supplied one.  For example, to retain
              only variables with names beginning with 'LC_':

                keepenv "LC_*"

       setenv NAME = VALUE
              Set the environment variable NAME.  The VALUE  argument  is  subject  to  variable  expansion  and
              backreference interpretation.

              For example, to modify the 'PATH' value:

                setenv PATH = "$PATH:/opt/bin"

       unsetenv NAME ...
              Unset environment variables.  See keepenv for a discussion of arguments.

       evalenv STRING
              Performs  backslash  interpretation, backreference interpretation and variable expansion on STRING
              and discards the result.  This statement is similar to the shell's "colon" statement.

       The following statements are system actions.  They provide interface to the operating system.

       umask MASK
              Set the umask.  The MASK must be an octal value not greater than 0777.  The default umask is 022.

       newgrp GROUP-ID
              Change the current group ID to GROUP-ID, which is either a numeric value or a name of an  existing
              group.

       newgroup GROUP-ID
              Alias to the above.

       chroot DIR
              Change  the  root  directory to DIR.  The argument is subject to tilde and variable expansions and
              backreference interpretation.  During tilde expansion, a tilde at the start of string is  replaced
              with the absolute pathname of the user's home directory.

       chdir DIR
              Change  to  the  directory  DIR.   The  argument  is  subject to tilde and variable expansions and
              backreference interpretation.  If both chdir and chroot are specified, chroot is applied first.

       limits RES
              Impose limits on system resources,  as  defined  by  RES.   The  argument  consists  of  commands,
              optionally  separated  by any amount of whitespace.  A command is a single command letter followed
              by a number, that specifies the limit.  The command letters are case-insensitive and coincide with
              those used by the shell ulimit utility:

           A      max address space (KB)

           C      max core file size (KB)

           D      max data size (KB)

           F      maximum file size (KB)

           M      max locked-in-memory address space (KB)

           N      max number of open files

           R      max resident set size (KB)

           S      max stack size (KB)

           T      max CPU time (MIN)

           U      max number of processes

           L      max number of logins for this user (see below)

           P      process priority -20..20 (negative = high priority)

       If some limit cannot be set, execution of the rule aborts.  In particular, the L limit can be regarded as
       a condition, rather than an action.  Setting limit L5 succeeds only if no more than 5 rush instances  are
       simultaneously  running  for  the same user.  This can be used to limit the number of simultaneously open
       sessions.

       The use of L resource automatically enables forked mode.  See the subsection Accounting and  forked  mode
       for details.

       fall-through or fallthrough
              Declare  a  fall-through rule.  After evaluating such a rule, rush continues rule matching process
              from the next rule in the configuration.  Any modifications to the  request  found  in  the  fall-
              through  rule take effect immediately, which means that subsequent rules will see modified command
              line and environment.  Execution of any other actions found in the fall-through  rule  is  delayed
              until a matching rule is found.

              Fall-through rules are often used to set default values for subsequent rules.

   Accounting and forked mode
       GNU  rush  is  able  to  operate  in  two modes, which we call default and forked.  When operating in the
       default mode, the process image of rush itself is overwritten by the command being executed.  Thus,  when
       it comes to launching the requested command, the running instance of rush ceases to exist.

       There  is  also  another  operation  mode,  which  we  call forked mode.  When running in this mode, rush
       executes the requested command in a subprocess, and remains in memory supervising  its  execution.   Once
       the command terminates, rush exits.

       One  advantage  of  the  forked mode is that it allows you to keep accounting, i.e.  to note who is doing
       what and to keep a history of invocations.  The accounting, in turn, can be used  to  limit  simultaneous
       executions of commands, as requested by the L command to limit statement (see above).

       acct BOOL
              Turn accounting mode on or off, depending on BOOL.  The argument can be one of the following: yes,
              on, t, true, or 1, to enable accounting, and no, off, nil, false, 0, to disable it.

       fork BOOL
              Enable or disable forked mode.  See acct for a description of BOOL.  Enabling accounting turns the
              fork  mode as well.  This statement is mainly designed as a way of disabling the forked mode for a
              given rule.

   Post-process notification
       Rush can be configured to send a notification over INET or UNIX sockets, after completing  user  request.
       It is done using the following statement:

       post-socket URL
              Notify URL about completing the user request.  This statement implies forked mode.

       Allowed formats for URL are:

       inet://HOSTNAME[:PORT]
              Connect  to  remote  host  HOSTNAME  using TCP/IP.  HOSTNAME is the host name or IP address of the
              remote machine.  Optional PORT specifies the port number to  connect  to.   It  can  be  either  a
              decimal  port  number or a service name from /etc/services.  If PORT is absent, tcpmux (port 1) is
              assumed.

       unix://FILENAME or local://FILENAME
              Connect to a UNIX socket FILENAME.

       The notification protocol is based on TCPMUX (RFC 1078).  After establishing connection, rush  sends  the
       rule  tag followed by a CRLF pair.  The rule tag acts as a service name.  The remote party replies with a
       single character indicating positive (+) or negative (-) acknowledgment, optionally followed by a message
       of explanation, and terminated with a CRLF.

       If positive acknowledgment is received, rush sends a single line, consisting of the  user  name  and  the
       executed command line, separated by a single space character.  The line is terminated with a CRLF.

       After sending this line, rush closes the connection.

       The  post-process  notification  feature  can be used to schedule execution of some actions after certain
       rules.

   Exit rule
       exit FD TEXT
              Write textual message TEXT to file descriptor FD.

       exit TEXT
              Write textual message TEXT to standard error.  Similar to

                exit 2 TEXT

              In both cases the TEXT argument can be either a quoted string, or an identifier.

       If it is a quoted string, it is subject to backreference interpretation and variable expansion.

       If TEXT is an identifier, it must be the name of  a  predefined  error  message  (see  the  list  in  the
       discussion of the message statement in global section, above).

   Interactive access
       Sometimes  it  may  be  necessary to allow some group of users limited access to interactive shells.  GNU
       rush contains provisions for such usage.  When it is invoked without '-c' it assumes  interactive  usage.
       In this case only rules explicitly marked as interactive are considered, the rest of rules is ignored.

       interactive BOOL
              If  BOOL  is true (see the acct statement above for allowed values), this statement marks the rule
              it appears in as interactive.  This rule will match only if rush is invoked without  command  line
              arguments.

       Unless  command  line  transformations  are applied, interactive rule finishes by executing /bin/sh.  The
       first word in the command line (argv[0]) is normally set to the base name of the command  being  executed
       prefixed by a minus character.

       An example

         rule login
           interactive true
           group rshell
           map program /etc/rush.shell : ${user} 1 2
           set [0] = ${program} ~ "s|^.*/||;s,^,-r,"

         rule nologin
           interactive true
           exit You don't have interactive access to this machine.

       The  login  rule  will  match  interactive user requests if the user is a member of the group rshell.  It
       looks up the shell to use for this in the file /etc/rush.shell.  This map file consists  of  two  fields,
       separated  by  a  colon.  If the shell is found, its base name, prefixed with -r, will be used as argv[0]
       (this indicates a restricted login shell).  Otherwise, the trap rule nologin will be matched, which  will
       output the given diagnostics message and terminate rush.

   Localization
       The  following  statement allow you to provide translations (localizations) for the messages in your rush
       configuration:

       locale NAME
              Set the locale name.  To specify empty locale, use "" as NAME (recall that empty locale name means
              to use the value of the environment variable 'LC_ALL' as locale name).

       locale-dir NAME
              Set the name of the locale directory.

       text-domain NAME
              Set the textual domain name.

       An example:

         rule l10n
           locale "pl_PL"
           text-domain "rush-config"
           fall-through

   include
       The include statement forces inclusion of the named file in that file location:

       include FILE

       The statement is evaluated when parsing the configuration file, which  means  that  FILE  undergoes  only
       tilde expansion: the two characters ~/ appearing at the beginning of file name are replaced with the full
       path name of the current user's home directory.

       If  FILE is a directory, that directory is searched for a file whose name coincides with the current user
       name.  If such a file is found, it is included.

       In any case, if the named file does not exist, no error is reported, and  parsing  of  the  configuration
       file continues.

       Before  including  the  file  rush checks if it is secure, using the criteria set in the include-security
       statement.  See its description in the global section, above.

       The include statement can be used only within a rule.  The included file may not contain rule and  global
       statements.

SEE ALSO

       rush(8), rushlast(1), rushwho(1).

AUTHORS

       Sergey Poznyakoff

BUG REPORTS

       Report bugs to <bug-rush@gnu.org.ua>.

COPYRIGHT

       Copyright © 2016-2019 Sergey Poznyakoff
       License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
       This  is  free software: you are free to change and redistribute it.  There is NO WARRANTY, to the extent
       permitted by law.

RUSH.RC                                           July 1, 2019                                        RUSH.RC(5)