stealth --daemon <uds> --dry-run --log <file-spec> --logmail
--max-size <size>[BKMG] --no-mail --parse-policy-file
--random-interval <seconds> --repeat <seconds>
--skip-files <file-spec> --syslog
--syslog-facility <fac> --syslog-priority <pri>
--syslog-tag <tag>
--verbosity <value> policy
stealth --dry-run --log <file-spec> --logmail
--max-size <size>[BKMG] --no-mail --parse-policy-file
--random-interval <seconds> --repeat <seconds>
--run-command <nr> --skip-files <file-spec> --stdout --syslog
--syslog-facility <fac> --syslog-priority <pri>
--syslog-tag <tag>
--verbosity <value> policy
stealth {--ping,--reload,--rerun,--resume,--suspend,--terminate} <uds>
stealth --help --version
The name of the stealth program is an acronym of:
SSH-based Trust Enforcement Acquired through a Locally Trusted Host.Stealth is based on an idea by Hans Gankema and Kees Visser, both at the Center for Information Technology of the University of Groningen. Hopko Meijering provided valuable suggestions for improvement.
Stealth's main task is to perform file integrity tests. However, the testing itself will leave no sediments on the tested computer. Therefore, stealth has stealthy characteristics. This is considered an important feature, improving the security (integrity) of the software of computers monitored by stealth.
Please realize that stealth intends to be just another security tool: other security measures like firewalls, portscanners, intrusion detection systems, dropping unencrypted protocols, etc. are usually required to improve the security of a group of computers that are connected to the Internet. Stealth is a file integrity scanner, and file integrity scanners offer no substitute for those tools (and vv.).
Stealth uses a policy file to determine the actions to perform. Each policy file is uniquely associated with a host being monitored. This host (called the client below) trusts the computer on which stealth runs, called the monitor (hence: a Locally Trusted Host). The monitor performs tasks (normally file integrity tests) that Enforce the Trust we have in the client computer. Since almost all integrity tests can be run on the client, one monitor can control many clients, even if the monitor itself uses aged hard- and software components.
As the monitor and the client are (i.e., should be) different computers, the monitor must communicate with the client in a secure fashion. This is realized through SSH. So, there's another element of `local trust' involved here: the client should permit the monitor to set up a secure SSH connection allowing the monitor to access sensitive elements in the client's file system.
It is important to ensure that public access to the monitor is prevented. No incoming services should be allowed. The only access to the monitor should be via its console and the monitor should be placed in a physically secure location. Sensitive information of clients are stored in the monitor's file system. To access the clients stealth in daemon mode can use a passphrase-protected ssh-key, allowing stealth to perform its tasks thereafter. This, too, makes it important to prevent the monitor from being accessed by unauthorized persons.
If, instead of running stealth in daemon mode it is preferred to let stealth perform single, but automated integrity scans, then new ssh(1) connections may be difficult to establish if the used ssh-key is passphrase-protected. To implement this scenario (i.e., automated integrity scans using passphrase protected ssh-keys) the program ssh-cron(1) can profitably be used.
Stealth's current way of connecting to clients uses a single ssh(1) connection, which results in only a single sshd(1) entry in the client's logfiles, which lasts for the duration of stealth's run. When using stealth in daemon mode this too minimizes the `footprint' stealth has on the client hosts.
The monitor itself normally only requires two types of outgoing services: SSH to reach its clients, and some mail transport agent (e.g., sendmail(1)) to forward its outgoing mail to some mail-hub.
Here is what happens when stealth running using the first synopsis:
--daemon <uds>
is specified, stealth
runs as a daemon process, using the Unix Domain Socket (<uds>
) for
communication with stealth processes running in IPC mode.
If access to the Unix Domain Socket defined by Stealth running in daemon mode should be restricted, it can be defined in a directory with is only accessible to the user running Stealth (this will often be the root-user).
When running in daemon mode, --repeat <seconds>
may be specified to rerun
the integrity scan every <seconds>
seconds. If an integrity scan is being
performed when, according to the repeat interval the next integrity scan is
due, then the current scan is first completed. Once completed, the next
integrity scan will be performed after seconds
seconds.
-printf
method to produce file-integrity related statistics. Most of these programs
write file names at the end of generated lines. This characteristic is used by
one of stealth's internal routines to detect changes in the generated output. Such
changes could indicate some harmful intent, like an installed root-kit.
--suppress
and --resume
commands (see below at the section `REPORT
FILE ROTATION').
If stealth should not be run as a daemon process the second synopsis can be
used. In this case stealth performs one or more integrity scans (the latter when
the --repreat
option was specified). When a single integrity scan is
requested stealth terminates after the scan. When --repeat
is specified stealth
shows a prompt (i.e., `?
') and terminates after pressing the
Enter
-key.
The third synopsis is used for communication with a stealth daemon. In this case the the Unix Domain Socket defined by the stealth daemon process must be specified after the option specifying the requested command.
Short options are provided between parentheses, immediately following their long option equivalents.
Option descriptions showing (C) can only be used on the command-line, and are ignored when specified in the second section of the policy file.
In the overview of options `<uds>
' represents the name of the
Unix Domain Socket to use, and `<file-spec>
' refers to a (relative or
absolute) specification of a file location.
With the first and second synopses relative locations (of the Unix Domain Socket and of other file-specifications) are interpreted relative to the current working directory.
Command-line options overrule options defined in the policy-file.
--daemon (-d) <uds>
: (C) run as background (daemon)
process. When the Stealth daemon process is started, the Unix Domain
Socket (tt<uds>) may not already exist.
--dry-run
: (C) no integrity scans or reloads are performed, but
are assumed OK. Remaining tasks are normally performed;
--help (-h)
: (C) Display help information and exit;
--log (-L) <file-spec>
: log messages are appended to
`file-spec'. If file-spec does not exist, it is first created;
--logmail
: mail sent by stealth is logged (requires --log
or
--syslog
);
--max-size <size>[BKMG]
: files retrieved by GET
commands may
at most have <size>
bytes (B), KBytes (K), MBytes (M), GBytes
(G). The default size is 10M, the default unit is B.
--no-mail
: mail is not sent. By default mail is sent as
configured in the policy-file (--logmail
can be specified
independently from --no-mail
);
--parse-policy-file (-p)
: (C) parse the policy file, after which
stealth ends.--ping <uds>
: (C) performs no actions, but is used to verify that
a stealth daemon can be reached via its Unix Domain Socket
(<uds>
). The daemon will respond even if it's currently performing
an integrity scan. It is used by the /usr/bin/stealthcron
script
to verify that a stealth daemon is alive.
--random-interval (-i) <interval>[m]>
: start the scan a random
interval of <interval> seconds (or minutes if an `m' is appended (no
blanks) to <interval>) following the delay specified at --repeat
(see below). This option requires specification of the --repeat
and --daemon
options;
--reload <uds>
: (C) reloads the configuration and skip-files
and restarts the scan of the stealth daemon process. Options defined in
the policy file are also reloaded. However, command-line options
always take priority over options defined in the policy file, so when
command-line options were used when starting stealth in daemon mode, they
cannot be modified by reloading the policy file.
--repeat <seconds>
: wake up and perform an integrity scan at
interrupts or after <seconds>
seconds (or minutes if an `m' is
appended (no blanks) to <seconds>) after completing the previous
integrity scan. The option --random-interval
can be used to add a
random delay to <seconds>
until the next integrity scan is
performed. This option requires specification of the and --daemon
option;
--rerun <uds>
: (C) start executing the integrity scan
commands that are specified in the stealth daemon process's policy file;
--resume <uds>
: (C) resume a suspended stealth process, implies
--rerun
;
--run-command (-r) <nr>
: (C) Only execute command number <nr>
(natural number). Command numbers are shown by stealth
---parse-policy-file
. This option can only be specified using the
second synopsis;
--skip-files (-s) <file-spec>
: all entries in <file-spec>
are
skipped. Their integrity is not monitored. If an entry is already
present in a log file then stealth once generates an IGNORING
message
in the mail sent to the address specified at EMAIL
in the policy
file. Each entry mentioned in file-spec
must be on a line of
its own and must be specified using absolute file paths. Entries
ending in a slash are assumed to be directories whose full contents
must be skipped. Other entries are interpreted as the names
of files to skip. Initial and trailing blanks, empty lines and lines
having a #
as their 1st non blank character are ignored. Here are
some examples:
# skip all files in user's Mail directory /home/user/Mail/ # skip user's .history file /home/user/.history
--stdout (-o)
: messages are (also) written to the std. output
stream (only available with the second synopsis);
--suspend <uds>
: (C) suspends a currently active stealth
process. Following --suspend
use --resume
to re-activate an
stealth daemon or --terminate
to end an stealth daemon;
--syslog
: write syslog messages;
--syslog-facility <facility>
: syslog facility to use. By
default facility DAEMON is used;
--syslog-priority <priority>
: syslog priority to use. By
default priority NOTICE is used;
--syslog-tag <tag>
: <tag>
specifies the identifier that is
prefixed to syslog messages. By default the tag `STEALTH' is used, see
also the next section;
--terminate <uds>
: (C) terminate a currently active stealth
process;
--time-stamp (-t) <type>
: the time-stamps to use. By default
UTC. To use the local time specify --time-stamp
LT
. The --time-stamp
option does not apply to time-stamps
generated by syslog (see also the next section);
--usage
: (C) Display help information and exit;
--verbosity <value>
: determines the amount of logged
information. Requires options --log
or --syslog
. Possible
values are:--version (-v)
: (C) Display stealth's version information and
terminate;
policy
: file specification of the policy file. If a relative
location is specified then this location is interpreted relative to
the current working directory. Stealth converts this relative
specification to an absolute file location, and an option like
--reload
will reload the policy file from the thus determined
absolute file path.
Only one of the options --daemon, --reload, --resume,
--suspend
or --terminate
can be specified. The options --reload,
--rerun, --resume, --suspend,
and --terminate
ignore any other options.
The following options are still recognized for backward compatibility with stealth pre-3.00 versions and will be removed in a future stealth version. They generate error messages suggesting alternatives:
--echo-commands (-e)
:
echo commands to std error when they are processed; use --log
instead.
--keep-alive
: run as a daemon; use --daemon
instead.
--only-stdout
: scan report is written to stdout; use
--stdout
instead.
--quiet (-q)
: suppresses progress messages written to stderr; use
--verbosity 0
instead.
--suppress <uds>
: suppresses a currently active stealth
process; use --suspend
instead.
The following options were discontinued starting since stealth version 3.00.00:
--debug
(option --verbosity
or --dry-run
could be used
instead);
--no-child-processes
;
--parse-config-file
.
When specifying long options in policy files initial hyphens should be omitted. Here are some examples:
%% log /tmp/stealth.log verbosity 3
When requesting an IPC command or when starting stealth as a daemon 0 is returned if the command was successfully completed. Otherwise a non-0 value is returned.
Once stealth has started as a foreground or daemon process performing file integrity scans ssh(1) is used to connect to the client(s) monitored by stealth. While stealth runs only one ssh(1) connection is opened to each client. This connection remains active during stealth's lifetime to minimize the number of sshd entries in the client's log files.
The policy file consists of two sections, the second section is optional,
and starts at a line merely containing %%
.
The policy file's first section consists of two sets of data: use directives (starting with the keyword USE) and commands. Blank lines and information beyond hash-marks (#) are ignored, while lines following lines terminating in backslashes (\) are concatenated (en passant removing these trailing backslashes). Leading white space on lines of the policy file is ignored.
The (optional) second section starts at a line merely containing
%%
. Following this separating line several long option specifications can
be entered (see below at section OPTIONS). Options specified on the
command-line take priority over options specified in the policy file. Although
the --reload
option reloads the policy file, it will not change option
values originally specified as command-line options. This section may contain
specifications of the skip-files
and log
options. Relative file
locations specified for these options are interpreted relative to the location
of the policy file. E.g., if the policy file argument is specified as
/root/client/policy
then the specification log: client.log
results in
stealth writing its logs into the file /root/client/client.log
.
DEFINE directives are used to associate longer strings of text with
certain symbols. E.g., after
DEFINE FINDARGS -xdev -type f -exec /usr/bin/sha256sum {} \;
the specification ${FINDARGS}
may be used in USE DIRECTIVES and
commands (see below) to use the text associated with the FINDARGS
symbol.
Note that DEFINE symbols may also be used in the definition of other DEFINE symbols as well. Direct or indirect circular definitions should be avoided, as they are either not or incompletely expanded.
The following USE directives may be specified (directives are written
in capitals, and should appear exactly as written below: letter casing is
preserved). Specifications in angular brackets (like <this>
) represent
specifications to be provided by stealth's users:
<base-directory>
USE BASE /root/client
<dd>
/bin/dd
as default, and defines the
location of the dd(1) program, both on the server and on the client. The
DD program is used to copy files between the client and the monitor
over the existing ssh-connection. The program specified here is only used by
stealth when executing PUT
and GET
commands (described below).USE DD /bin/dd
<diff>
/usr/bin/diff
,
and defines the location of the diff(1) program on the monitor. The
diff(1) program is used to compare a formerly created logfile of an
integrity check with a newly created logfile.USE DIFF /usr/bin/diff
<prefix>
DIFF
command to lines produced by commands executed through stealth.
The default /usr/bin/diff
program prefixes lines by either `>
' or
`<
'. The default value for <prefix>
is therefore equal to 2.
Example showing the default:
USE DIFFPREFIX 2
<address>
USE EMAIL root
<mailer>
/bin/sh
command, to
allow shell-scripts to process the mail too. By default MAILER is defined
as /usr/bin/mail. MAILER is called with the following
arguments:USE MAILER /usr/bin/mail
As an alternative, the script stealthmail
is provided. It offers a
convenient filter sorting stealth's output and keeping only lines containing the
text ADDED
, MODIFIED
, REMOVED
or STEALTH
. Usually these lines
are the ones system managers are interested in. The report and log files
can always be consulted to determine the actual nature of the changes.
<args>
MAILER
, followed by the EMAIL
specification.USE MAILARGS -s "STEALTH scan report"
\"
to use a double
quote in a string that itself is delimted by double quotes; use \'
to use
a single quote in a string that itself is delimted by single quotes.
<file-spec>
USE BASE
specification.USE REPORT report
<sh>
/bin/sh
as default, and defines the
command shell used by the monitor to execute commands on itself. This must be
an absolute path specification.USE SH /bin/sh
<user>
Assuming the client trusts the monitor (which is after all what this
program is all about, so this should not be a very strong assumption),
preferably the public ssh key of the monitor should be placed in the
client's root .ssh/authorized_keys
file, granting the monitor root access
to the client. Root access is normally needed to gain access to all
directories and files of the client's file system.
In practice, connecting to an account using the sh(1) shell is
preferred. When another shell is already used by that account, one should make
sure that its shell doesn't define its own redirections for standard input
and standard output. One way to accomplish that is for force the execution of
/bin/sh
in the USE SSH specification.
Examples:
# root's shell is /bin/sh: USE SSH root@client -T -q # root uses another shell, but the use of /bin/bash is forced: USE SSH root@client -T -q exec /bin/bash # an alternative: USE SSH root@client -T -q exec /bin/bash --noprofile
In some installations stealth is used to inspect the monitor itself, even
though this is not recommended, as it breaks one of the main reasons for
stealth's existence. But in those situations (so, where stealth is used to monitor the
integrity of the localhost
), /bin/bash
could be specified at the
USE SSH
directive. For example:
# For stealth inspecting localhost: USE SSH /bin/bash --noprofile
Following the USE specifications, commands can be specified. The commands are executed in their order of appearance in the policy file. Processing continues until the last command has been processed or until a tested command (see below) returns a non-zero return value.
The following LABEL commands are available:
<text>
The text may contain \n
characters (two characters) which are
transformed to a newline character.
Example:
LABEL Inspecting files in /etc\nIncluding subdirectories
LABEL
(In this example the former LABEL specification is erased by the
latter LABEL command).
LOCAL commands are executed on the monitor itself:
<command>
command
on the monitor, using the SH command
shell. The command must succeed (i.e., must return a zero exit value). LOCAL scp rootsh@client:/usr/bin/sha256sum /tmp
<command>
command
on the monitor, using the SH command
shell. The command may or may not succeed.LOCAL NOTEST mkdir /tmp/subdir
/tmp/subdir
on the monitor. The command fails
if the directory cannot be created, but this does not terminate stealth.
<file-spec> [pathOffset]
<command>
command
on the monitor, using the SH command
shell. The command must succeed. The output of this command is compared to the
output of this command generated during the previous integrity check run by
stealth.
The phrase LOG = is optional. When a relative file location is
specified at <file-spec>
it is interpreted relatively to the USE BASE
path specification.
PathOffset
is also optional. If specified it defines the (0-based)
offset where path-names of inspected files start in lines produced by
<command>
. By default stealth assumes that the first occurrence of a forward
slash defines the first character of the path-names of inspected files.
For example, if diff-output looks like this:
01234567890123456789012345678901234567890 (column offsets) 33c33 < 90d8b506d249634c4ff80b9018644567 filename-specification --- > b88d0b77db74cc4a742d7bc26cdd2a1e filename-specificationthen the specification
LOCAL CHECK logfile 36 command-to-be-executedinforms stealth where to find the filename specifications in the diff-output. Using the standard
/usr/bin/diff
command, this offset equals
2 + the offset of the filename-specification
found in
command-to-be-executed
.
Any differences between the previous and current output are written to
REPORT. If differences were found, the existing logfile
name is
renamed to logfile.YYMMDD-HHMMSS
, with YYMMDD-HHMMSS
the
(UTC) datetime-stamp at the time stealth was run.
Note that eventually many logfile.YYMMDD-HHMMSS
files could be
created: It is up to the monitor's systems manager to decide what to do
with old datetime-stamped logfiles.
The logfile
specifications may use relative and absolute paths. When
relative paths are used, these paths are relative to BASE. When the
directories implied by the logfile
specifications do not yet exist, they
are created first.
Example:
LOCAL CHECK LOG = local/sha256sum sha256sum /tmp/sha256sum
This command checks the SHA256 sum of the /tmp/sha256sum
program. The
resulting output is saved at BASE/local/sha256sum
. The program must
succeed (i.e., sha256sum
must return a zero exit-value).
<logfile> [pathOffset] <command>
command
on the monitor, using the SH command
shell. The command may or may not succeed. Otherwise, the command performs
exactly like the LOCAL CHECK ... command, discussed above.
Example:
LOCAL NOTEST CHECK LOG=local/sha256sum sha256sum /tmp/sha256sum
This command checks the SHA256 sum of the /tmp/sha256sum
program. The
resulting output is saved at BASE/local/sha256sum
. The program must
succeed (i.e., sha256sum
must return a zero exit-value).
Note that the scp(1) command can be used to copy files between the
client and the monitor, using a local command. This, however, is
discouraged, as a separate ssh(1)-connection is required for each separate
scp(1) command. This subtlety was brought to the author's attention by
Hopko Meijerink (h.meijering@rug.nl
).
To copy files between the client and the monitor, the GET
and
PUT
commands (described below) should be used instead, as these commands
use the existing ssh(1) connection. In general, LOCAL
commands should
not be used to establish additional ssh(1) connections to a client.
Remote commands are commands executed on the client using the SSH
shell. These commands are executed using the standard PATH
set for the
SSH shell. However, it is advised to specify the full pathname to the
programs to be executed, to prevent ``trojan approaches'' where a trojan horse
is installed in an `earlier' directory of the PATH
-specification than the
intended program.
Two special remote commands are GET
and PUT
, which can be used to
copy files between the client and the monitor. Internally, GET
and
PUT
use the DD
specification. If a non-default specification is
used, one should ensure that the alternate program accepts dd(1)'s if=,
of=, bs=
and count=
options. With GET
the options bs=, count=
and
of=
are used, with PUT
the options bs=, count=
and if=
are
used. Normally there should be no need to alter the default DD
specification.
The GET
command may be used as follows:
<client-path> <local-path>
client-path
at the client to local-path
at the monitor. Here, client-path
must be the full path of an existing
file on the client, local-path
may either be a local directory, in which
case the client's file name is used, or another file name may be specified, in
which case the client's file is copied to the specified local filename. If the
local file already exists, it is overwritten by the copy-procedure.
Example:
GET /usr/bin/sha256sum /tmp
The program /usr/bin/sha256sum
, available at the client, is copied to the
monitor's /tmp
directory. If, for whatever reason, copying fails, then
stealth terminates.
<client-path> <local-path>
client-path
at the client to local-path
at the monitor. Again, client-path
must be the full path of an existing
file on the client, local-path
may either be a local directory, in which
case the client's file name is used, or another file name may be specified, in
which case the client's file is copied to the specified local filename. If the
local file already exists, it is overwritten by the copy-procedure.
Example:
GET NOTEST /usr/bin/sha256sum /tmp
The program /usr/bin/sha256sum
, available at the client, is copied to the
monitor's /tmp
directory. Remaining commands in the policy file are
executed, even if the copying process wasn't successful.
The PUT
command may be used as follows:
<local-path> <remote-path>
local-path
at the monitor to
remote-path
at the client. The argument local-path
must be the
full path of an existing file on the monitor. The argument remote-path
must be the full path to a file on the client. If the remote file already
exists, it is overwritten by PUT
.
Example:
PUT /tmp/sha256sum /usr/bin/sha256sum
The program /tmp/sha256sum
, available at the monitor, is copied to the
client as usr/bin/sha256sum
. If the copying fails, stealth terminates.
<local-path> <remote-path>
local-path
at the monitor to
remote-path
at the client. The argument local-path
must be the
full path of an existing file on the monitor. The argument remote-path
must be the full path to a file on the client. If the remote file already
exists, it is overwritten by PUT
.
Example:
PUT NOTEST /tmp/sha256sum /usr/bin/sha256sum
Copy the file indicated by local-path
at the monitor to
remote-path
at the client. The argument local-path
must be the full
path of an existing file on the monitor. The argument remote-path
must
be the full path to a file on the client. If the remote file already exists,
it is overwritten by PUT
. Remaining commands in the policy file are
executed, even if the copying process wasn't successful.
Plain commands can be executed on the client computer by merely specifying
them. Of course, this implies that programs on the client which are named,
e.g., LABEL
, LOCAL
or USE
, cannot be executed, since these names
are interpreted otherwise by stealth. It's unlikely that this restriction presents
much of a problem....
The following commands are available for execution on the client:
<command-path>
command-path
on the client using the SSH command shell
(it is strongly advised to specify a full path to the command to execute). The
command must succeed (i.e., must return a zero exit value). However, any
output generated by the the command is ignored. /usr/bin/find /tmp -type f -exec /bin/rm {} \;
/tmp
directory.
<command-path>
command-path
on the client, using the SSH command
shell. The command may or may not succeed.NOTEST /usr/bin/find /tmp -type f -exec /bin/rm {} \;
/usr/bin/find
is not interpreted.
<file-spec> [pathOffset]
<command-path>
command-path
on the client, using the SSH command
shell.
The phrase LOG = is optional. When a relative file location is
specified at <file-spec>
it is interpreted relatively to the USE BASE
path specification.
PathOffset
is also optional, and has the same meaning
as for the LOCAL CHECK
command, described above. The command must
succeed. The output of this command is compared to the output of this command
generated during the previous run of stealth. Any differences are written to
REPORT. If differences were found, the existing logfile
name is
renamed to logfile.YYMMDD-HHMMSS
, with YYMMDD-HHMMSS
the
datetime-stamp at the time stealth was run.
Note that the command is executed on the client, but the logfile is kept on the monitor. This command represents the core of the method implemented by stealth: there will be no residues of the actions performed by stealth on the client computers.
Several examples (note the use of the backslash as line continuation characters):
CHECK LOG = remote/ls.root \
/usr/bin/find / \
-xdev -perm /6111 -type f -exec /bin/ls -l {} \;
All suid/gid/executable files on the same device as the root-directory (/)
on the client computer are listed with their permissions, owner and size
information. The resulting listing is written on the file
BASE/remote/ls.root
.
CHECK remote/sha256.root \
/usr/bin/find / \
-xdev -perm /6111 -type f -exec /usr/bin/sha256sum {} \;
The SHA256 checksums of all suid/gid/executable files on the same device as
the root-directory (/) on the client computer are determined. The resulting
listing is written on the file BASE/remote/sha256.root
.
<file-spec> [pathOffset]
<command-path>
command-path
on the client, using the SSH command
shell.
The phrase LOG = is optional. When a relative file location is
specified at <file-spec>
it is interpreted relatively to the USE BASE
path specification.
PathOffset
is also optional, and has the same meaning as for the LOCAL
CHECK
command, described above. The command may or may not
succeed. Otherwise, the program acts identically as the CHECK ... command,
described above.
Example:
NOTEST CHECK LOG = remote/sha256.root \
/usr/bin/find / \
-xdev -perm /6111 -type f -exec /usr/bin/sha256sum {} \;
The SHA256 checksums of all suid/gid/executable files on the same device as
the root-directory (/) on the client computer are determined. The resulting
listing is written on the file BASE/remote/sha256.root
. stealth does not
terminate if the /usr/bin/find
program returns a non-zero exit value.
The maximum download size (using GET or CHECK) can be specified using the
--max-size
option, see below. By default this size is set at 10M.
--terminate
command, rotate
the logfiles, and restart stealth, but stealth also offers a facility to temporarily
suspend integrity scans performed by a stealth daemon process:
--suspend <uds>
suspends the
daemon's integrity scans. If stealth is
actually performing a series of integrity scans when
--suspend
is issued, the currently executing command is first
completed after which the --suspend
command completes. Once
the stealth daemon has been suspended, automatic or explicit
integrity scan requests are denied, and the daemon can only be
instructed to resume its scanning tasks (stealth --resume <uds>)
or to terminate (stealth --terminate <uds>).
--suspend <uds>
' has returned, the report file
may safely be rotated (using, e.g., logrotate(1)), and a new
(empty) report file may optionally be created by the logrotation
process.
--resume <uds>
'. This
resumes the activities of a suspended stealth daemon process,
immediately performing the next integrity scan. Following this the
stealth daemon is back to its original integrity scanning mode.
/root/stealth/clienthost/small/report /var/log/stealth/clienthost-small.log { daily rotate 4 compress missingok copytruncate sharedscripts prerotate /usr/bin/stealth --suspend /root/stealth/client/small.uds endscript postrotate /usr/bin/stealth --resume /root/stealth/client/small.uds endscript }
Here is what happens when stealth is run using the third synopsis:
--reload <uds>
, the stealth daemon process
reloads its policy file and (if specified) --skip-files
specification file. Next the stealth daemon process performs a file
integrity scan using the information in the re-read policy and
skip-files files. Stealth can reload the (modified) contents of the
originally specified policy- and skip-files names. If another policy
and/or skip-files files must be used another stealth process must be
started, for which these new filenames are specified.
--rerun <uds>
, the stealth daemon performs
another scan (unless it has been suspended using stealth --suspend
<uds>
).
--terminate <uds>
, the stealth daemon is
terminated.
When using rsyslogd(1) property based filters may be used to filter
syslog messages and write them to a file of your choice. E.g., to filter
messages starting with the syslog message tag (e.g., STEALTH
) use
:syslogtag, isequal, "STEALTH:" /var/log/stealth.log :syslogtag, isequal, "STEALTH:" stopNote that the colon is part of the tag, but is not specified with the
syslog-tag
option.
This causes all messages having the STEALTH:
tag to be written on
/var/log/stealth.log
after which they are discarded. More extensive
filtering is also supported, see, e.g.,
http://www.rsyslog.com/doc/rsyslog_conf_filter.html
and
http://www.rsyslog.com/doc/property_replacer.html
Time stamps written by rsyslogd
are not controlled by stealth's
--time-stamp
option, but, e.g., by a TZ
specification in
/etc/default/rsyslog
. Simply add the line
export TZ=UTCto
/etc/default/rsyslog
, followed by restarting rsyslogd
configures
rsyslogd
to generate time stamps using UTC.
/etc/logrotate.d/stealth...
configuration files.
/usr/share/doc/stealth/
;
the policy
file;
files under the BASE directory as defined in the policy
file;
the report file as defined by the policy's USE REPORT directive.
None reported
https://fbb-git.github.io/stealth/
.