From 974a5f3294b51f4d67670ebc4571543df31eb844 Mon Sep 17 00:00:00 2001 From: Xavier Date: Wed, 24 Aug 2022 08:04:54 +0200 Subject: [PATCH] first commit --- README.md | 25 + build.sh | 61 ++ icone.ico | Bin 0 -> 2310 bytes img/rkh.png | Bin 0 -> 24803 bytes img/rkhunter.png | Bin 0 -> 7941 bytes img/rkhunter_old.png | Bin 0 -> 57974 bytes main.py | 164 +++++ rkhunter | 34 ++ rkhunter.conf | 1352 ++++++++++++++++++++++++++++++++++++++++++ setup.py | 101 ++++ 10 files changed, 1737 insertions(+) create mode 100755 README.md create mode 100755 build.sh create mode 100644 icone.ico create mode 100644 img/rkh.png create mode 100644 img/rkhunter.png create mode 100644 img/rkhunter_old.png create mode 100755 main.py create mode 100644 rkhunter create mode 100644 rkhunter.conf create mode 100755 setup.py diff --git a/README.md b/README.md new file mode 100755 index 0000000..78eed59 --- /dev/null +++ b/README.md @@ -0,0 +1,25 @@ + GUI RKHunter Version 1.01 +============================ + + +## Install +pres-requis: +python3 +sudo apt-get install python3-tk rkhunter gnome-terminal + +sudo ./build.sh + +## Run +sudo guirkhunter + +## Version en production 1.01 + +Outils graphique pour simplifier les commandes. + + +73 +Xavier + + + + diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..31d0dc6 --- /dev/null +++ b/build.sh @@ -0,0 +1,61 @@ +#!/bin/bash + +#pres-requis install +if [ -e /usr/bin/python3 ] +then + echo "Phyton installé" +else + echo "Install Python et TK" + apt install python3 -y + +fi + +if [ -e /usr/share/doc/python3-tk ] +then + echo "Phyton TK installé" +else + echo "Install TK" + apt install python3-tk -y +fi + +if [ -e /usr/bin/pip3 ] +then + echo "Phyton pip3 installé" +else + echo "Install pip3" + apt install python3-pip -y + pip3 install cx_Freeze + pip3 install serial +fi + + +if [ -e /usr/bin/rkhunter ] +then + echo "RKHunter installé" +else + echo "Install RKHunter" + apt install rkhunter -y +fi + +if [ -e /usr/bin/gnome-terminal ] +then + echo "gnome-terminal installé" +else + echo "Install gnome-terminal" + apt install gnome-terminal -y +fi + + + + +#build and install guiinstall +./setup.py build +cp -r img/ build/exe.linux-x86_64-*/ +chmod -R 755 build/ +echo "install" +cd build/ +rm -r /opt/guirkhunter/ +mv exe.linux-x86_64-*/ /opt/guirkhunter/ +rm /usr/local/sbin/guirkhunter +ln -s /opt/guirkhunter/main /usr/local/sbin/guirkhunter +exit 0 diff --git a/icone.ico b/icone.ico new file mode 100644 index 0000000000000000000000000000000000000000..20dda78a0493a511b797fd1c4dce50d03b70f4dd GIT binary patch literal 2310 zcmeH|c~sO@6vw}Asic)Hlv%k{U}a_-*FtPFd-2U21Gyt25}LPA0i8XAhQurNeKL?ALU5(0q$QBhHdj*do5ObpyN>mU>gvC-3r*w|Ra z#l=A+55vl#~R&od(EcG9)J_BP}fr>FMdn$jCru zW+t-sWg#mo3)$J($jQk;Zf-8}^74?dR}0ZzJ>+sZ^7HdiSXhXnq9P=xYM@Xkpj0YR zTwDxNOh75cfddC{@ZdolI&=snf0m%6qy(j{s@ZrPwgX(eQ$PpYpdK6{l7jf*^F;rJqwBYppmJ0G{IytVaPOup`jrR4-em}-T%)|I04qvOq5Dm zP(X4OB&9%EKD2Y@S!^=1G5;Ol9N7u4K>qOxq3;%dDjlJjl z@NfZ{$h)QflA7`2lW{+#W=ghN_~`)w0dI2jZN@*CAbgBcS4YbD_-P-ke}4wy+{W+k zo|CmR$adyCff3pJHe2{9?3b`;WdHez!l`@cDt9xlwBAMimQ!x&*d`&x?zunTXEkTG z)g5pBnmfYZ%Qj%ozhOJ2D`g_P*XJ*j`^~UrG#(hCnbc)c)J9VUwz~)5b!-L?|+g!QSRQrbKS)4SihGw)1+WlZ0TN} fJUmn=*<|)7%UkMGzVq_(@>NWZo$xvN&%%EIUiBWh literal 0 HcmV?d00001 diff --git a/img/rkh.png b/img/rkh.png new file mode 100644 index 0000000000000000000000000000000000000000..4d4fa980a6d6f12f79a30951bd54abb035f550e8 GIT binary patch literal 24803 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%0A; zyb+?{f*Yyc8ax%Z^&;=1q;xOn8_45xfpc3Eo&w#-zA?3C-}GV#XYu|c&hQ*aF$BO_ zT%30rR!q||&iy-H#Z|+{1~;}6(VH5I)KRwTaE0S{R_&qQUd0BGd`#u?O2A+s|LX1| zBGbuZE?Q+dMP=MMs*g`pYH$&v450Pb8|d#4`e4IUxe>Ciu%V{&RJEK&wcV!pp(2!S zu;a%#QAx5~-YFzLIH5%w_sZeI2<=P_Nh^t;LYS{Bn}W+-cA55_$_F1QlK|OpYdrB3<+ I%e)T!2e=MmWB>pF literal 0 HcmV?d00001 diff --git a/img/rkhunter.png b/img/rkhunter.png new file mode 100644 index 0000000000000000000000000000000000000000..c639b970004d3edb000508c242212f9e1193c0b0 GIT binary patch literal 7941 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 E3mZ=7&Hw-a literal 0 HcmV?d00001 diff --git a/main.py b/main.py new file mode 100755 index 0000000..d6e581c --- /dev/null +++ b/main.py @@ -0,0 +1,164 @@ +#! /usr/bin/env python3 +# -*- coding: UTF-8 -*- +#(c) Xavier 2022 + +# pour débugger… en ligne de commande !-) +#import pdb; pdb.set_trace() + +#GUI RKHunter FRS2013 + +# for Python3 +from tkinter import * +import tkinter.messagebox +import tkinter.filedialog +import os +import serial +import time +import csv +import shutil +import subprocess + + +try: + + import configparser as configparser +except ImportError: + import ConfigParser as configparser + + +#param os +sysos="linux" +clearscreen="clear" + +os.system(clearscreen) + +#def function + +def Version(): + versionrkh = os.popen('rkhunter --version') + + tkinter.messagebox.showinfo("Version","GUI RKHunter V" + versionrkh.read() + "\n(C) 2022 Xavier\n1.01") + +def Clean(): + for c in frame.winfo_children(): + c.destroy() + os.system(clearscreen) + FormGUI() + + +def Rkhscanall(): + os.system(clearscreen) + subprocess.call(['gnome-terminal -- bash -c "rkhunter --checkall"',''], shell=True) + + +def Rkhscanfast(): + os.system(clearscreen) + subprocess.call(['gnome-terminal -- bash -c "rkhunter -c --rwo"', ''], shell=True) + + +def Rkhupdate(): + os.system(clearscreen) + subprocess.call(['gnome-terminal -- bash -c "rkhunter --update"',''], shell=True) + + +def Rkhfix(): + subprocess.call(['gnome-terminal -- bash -c "rkhunter --propupd"',''], shell=True) + +def Rkhlog(): + os.system(clearscreen) + subprocess.call(['gnome-terminal -- bash -c "cat /var/log/rkhunter.log | more"',''], shell=True) + + +def FormGUI(): + + for c in frame.winfo_children(): + c.destroy() + Label0 = Label(frame, text = 'GUI RKHunter: ') + Label0.grid(column=0,row=0, sticky='w',pady=2) + + bouton2= Button (frame, text="RkHunter ScanAll", command=Rkhscanall, padx=2) + bouton2.grid (column=1, row=11,sticky='sw', padx=20) + + bouton2= Button (frame, text="RKHunter update", command=Rkhupdate, padx=2) + bouton2.grid (column=10, row=11,sticky='sw', padx=20) + + bouton2= Button (frame, text="RkHunter Scan Fast", command=Rkhscanfast, padx=2) + bouton2.grid (column=1, row=31,sticky='sw', padx=20) + + bouton2= Button (frame, text="RKHunter Log", command=Rkhlog, padx=2) + bouton2.grid (column=10, row=31,sticky='sw', padx=20) + + bouton2= Button (frame, text="RKHunter Fix", command=Rkhfix, padx=2) + bouton2.grid (column=5, row=51,sticky='sw', padx=20) + +def FormNoRoot(): + tkinter.messagebox.showinfo("Error","GUI RKHunter need ROOT\n") + os._exit(os.EX_OK) + +def Quit(): + os._exit(os.EX_OK) + +def Apropos(): + tkinter.messagebox.showinfo("Aide sur GUIRKHunter", +"Ce GUI est un interpréteur de CMD\nScanAll rkhunter --checkall\nSacnFast rkhunter -c --rwo\nUpdate rkhunter --update\nFix rkhunter --propudp\nLog nano /var/log/rkhunter.log\n\n\n") + + +if __name__ == '__main__': + + print("START INI") + chemin = os.popen("readlink guirkhunter | sed 's/main//g'") + # Main window + Mafenetre = Tk() + Mafenetre.title("GUI RKHunter") + if os.name == 'nt': + Mafenetre.iconbitmap("icone.ico") + + # Mon logo + logo = PhotoImage(file= "/opt/guirkhunter/img/rkhunter.png") + + # Création d'un widget Menu + menubar = Menu(Mafenetre) + menuaide = Menu(menubar,tearoff=0) + if not os.name == 'nt': + menubar.add_cascade(image=logo) + + menufichier = Menu(menubar,tearoff=0) + menufichier.add_separator() + menufichier.add_command(label="Nettoyer Frame",command=Clean) + menufichier.add_command(label="Quitter",command=Quit) + menubar.add_cascade(label="Fichier", menu=menufichier) + + menuaprs = Menu(menubar,tearoff=0) + menuaprs.add_command(label="RKH Scan All",command=Rkhscanall) + menuaprs.add_command(label="RKH Scan Fast",command=Rkhscanfast) + menuaprs.add_command(label="RKH Update",command=Rkhupdate) + menuaprs.add_command(label="RKH Fix",command=Rkhfix) + menuaprs.add_separator() + menuaprs.add_command(label="RKH Log",command=Rkhlog) + menuaprs.add_separator() + + menubar.add_cascade(label="GUI RKHunter", menu=menuaprs) + + menuaide = Menu(menubar,tearoff=0) + menuaide.add_command(label="A propos",command=Apropos) + menuaide.add_command(label="Version",command=Version) + menubar.add_cascade(label="Aide", menu=menuaide) + + # Affichage du menu + Mafenetre.config(menu=menubar) + frame=Frame(Mafenetre,height=200,width=400) + frame.pack() + + Canevas = Canvas(Mafenetre,width=400, height=5) + Canevas.pack() + frame.photo = PhotoImage(file ='') + espace_image = Canvas(frame, width =170, height =170, bg ='black') + espace_image.grid(row=3 ,columnspan=2, column=0, padx =10, pady =10) + espace_image.create_image(85, 85, image =frame.photo) + if os.getuid() != 0: + # We're not root so, like, whatever dude + print("No root") + FormNoRoot(); + + FormGUI() + Mafenetre.mainloop() diff --git a/rkhunter b/rkhunter new file mode 100644 index 0000000..dadc1eb --- /dev/null +++ b/rkhunter @@ -0,0 +1,34 @@ +# Defaults for rkhunter automatic tasks +# sourced by /etc/cron.*/rkhunter and /etc/apt/apt.conf.d/90rkhunter +# +# This is a POSIX shell fragment +# + +# Set this to yes to enable rkhunter daily runs +# (default: false) +CRON_DAILY_RUN="true" + +# Set this to yes to enable rkhunter weekly database updates +# (default: false) +CRON_DB_UPDATE="true" + +# Set this to yes to enable reports of weekly database updates +# (default: false) +DB_UPDATE_EMAIL="false" + +# Set this to the email address where reports and run output should be sent +# (default: root) +REPORT_EMAIL="root" + +# Set this to yes to enable automatic database updates +# (default: false) +APT_AUTOGEN="true" + +# Nicenesses range from -20 (most favorable scheduling) to 19 (least favorable) +# (default: 0) +NICE="0" + +# Should daily check be run when running on battery +# powermgmt-base is required to detect if running on battery or on AC power +# (default: false) +RUN_CHECK_ON_BATTERY="false" diff --git a/rkhunter.conf b/rkhunter.conf new file mode 100644 index 0000000..5be5fe2 --- /dev/null +++ b/rkhunter.conf @@ -0,0 +1,1352 @@ +# +# This is the main configuration file for Rootkit Hunter. +# +# You can modify this file directly, or you can create a local configuration +# file. The local file must be named 'rkhunter.conf.local', and must reside +# in the same directory as this file. Alternatively you can create a directory, +# named 'rkhunter.d', which also must be in the same directory as this +# configuration file. Within the 'rkhunter.d' directory you can place further +# configuration files. There is no restriction on the file names used, other +# than they must end in '.conf'. +# +# Please modify the configuration file(s) to your own requirements. It is +# recommended that the command 'rkhunter -C' is run after any changes have +# been made. +# +# Please review the documentation before posting bug reports or questions. +# To report bugs, provide patches or comments, please go to: +# http://rkhunter.sourceforge.net +# +# To ask questions about rkhunter, please use the 'rkhunter-users' mailing list. +# Note that this is a moderated list, so please subscribe before posting. +# +# In the configuration files, lines beginning with a hash (#), and blank lines, +# are ignored. Also, end-of-line comments are not supported. +# +# Any of the configuration options may appear more than once. However, several +# options only take one value, and so the last one seen will be used. Some +# options are allowed to appear more than once, and the text describing the +# option will say if this is so. These configuration options will, in effect, +# have their values concatenated together. To delete a previously specified +# option list, specify the option with no value (that is, a null string). +# +# Some of the options are space-separated lists, others, typically those +# specifying pathnames, are newline-separated lists. These must be entered +# as one item per line. Quotes must not be used to surround the pathname. +# +# For example, to specify two pathnames, '/tmp/abc' and '/tmp/xyz', for an +# option: XXX=/tmp/abc (correct) +# XXX=/tmp/xyz +# +# XXX="/tmp/abc" (incorrect) +# XXX="/tmp/xyz" +# +# XXX=/tmp/abc /tmp/xyz (incorrect) +# or XXX="/tmp/abc /tmp/xyz" (incorrect) +# or XXX="/tmp/abc" "/tmp/xyz" (incorrect) +# +# The last three examples are being configured as space-separated lists, +# which is incorrect, generally, for options specifying pathnames. They +# should be configured with one entry per line as in the first example. +# +# If wildcard characters (globbing) are allowed for an option, then the +# text describing the option will say so. Any globbing character explicitly +# required in a pathname should be escaped. +# +# Space-separated lists may be enclosed by quotes, although they are not +# required. If they are used, then they must only appear at the start and +# end of the list, not in the middle. +# +# For example: XXX=abc def gh (correct) +# XXX="abc def gh" (correct) +# XXX="abc" "def" "gh" (incorrect) +# +# Space-separated lists may also be entered simply as one entry per line. +# +# For example: XXX=abc (correct) +# XXX=def +# XXX="gh" +# +# If a configuration option is never set, then the program will assume a +# default value. The text describing the option will state the default value. +# If there is no default, then rkhunter will calculate a value or pathname +# to use. If a value is set for a configuration option, then the default +# value is ignored. If it is wished to keep the default value, as well as +# any other set value, then the default must be explicitly set. +# + + +# +# If this option is set to '1', it specifies that the mirrors file +# ('mirrors.dat'), which is used when the '--update' and '--versioncheck' +# options are used, is to be rotated. Rotating the entries in the file allows +# a basic form of load-balancing between the mirror sites whenever the above +# options are used. +# +# If the option is set to '0', then the mirrors will be treated as if in a +# priority list. That is, the first mirror listed will always be used first. +# The second mirror will only be used if the first mirror fails, the third +# mirror will only be used if the second mirror fails, and so on. +# +# If the mirrors file is read-only, then the '--versioncheck' command-line +# option can only be used if this option is set to '0'. +# +# The default value is '1'. +# +#ROTATE_MIRRORS=1 + +# +# If this option is set to '1', it specifies that when the '--update' option is +# used, then the mirrors file is to be checked for updates as well. If the +# current mirrors file contains any local mirrors, these will be prepended to +# the updated file. If this option is set to '0', the mirrors file can only be +# updated manually. This may be useful if only using local mirrors. +# +# The default value is '1'. +# +UPDATE_MIRRORS=1 + +# +# The MIRRORS_MODE option tells rkhunter which mirrors are to be used when +# the '--update' or '--versioncheck' command-line options are given. +# Possible values are: +# 0 - use any mirror +# 1 - only use local mirrors +# 2 - only use remote mirrors +# +# Local and remote mirrors can be defined in the mirrors file by using the +# 'local=' and 'remote=' keywords respectively. +# +# The default value is '0'. +# +MIRRORS_MODE=0 + +# +# Email a message to this address if a warning is found when the system is +# being checked. Multiple addresses may be specified simply be separating +# them with a space. To disable the option, simply set it to the null string +# or comment it out. +# +# The option may be specified more than once. +# +# The default value is the null string. +# +# Also see the MAIL_CMD option. +# +#MAIL-ON-WARNING=root + +# +# This option specifies the mail command to use if MAIL-ON-WARNING is set. +# +# NOTE: Double quotes are not required around the command, but are required +# around the subject line if it contains spaces. +# +# The default is to use the 'mail' command, with a subject line +# of '[rkhunter] Warnings found for ${HOST_NAME}'. +# +#MAIL_CMD=mail -s "[rkhunter] Warnings found for ${HOST_NAME}" + +# +# This option specifies the directory to use for temporary files. +# +# NOTE: Do not use '/tmp' as your temporary directory. Some important files +# will be written to this directory, so be sure that the directory permissions +# are secure. +# +# The installer program will set the default directory. If this default is +# subsequently commented out or removed, then the program will assume a +# default directory beneath the installation directory. +# +TMPDIR=/var/lib/rkhunter/tmp + +# +# This option specifies the database directory to use. +# +# The installer program will set the default directory. If this default is +# subsequently commented out or removed, then the program will assume a +# default directory beneath the installation directory. +# +DBDIR=/var/lib/rkhunter/db + +# +# This option specifies the script directory to use. +# +# The installer program will set the default directory. If this default is +# subsequently commented out or removed, then the program will not run. +# +SCRIPTDIR=/usr/share/rkhunter/scripts + +# +# This option can be used to modify the command directory list used by rkhunter +# to locate commands (that is, its PATH). By default this will be the root PATH, +# and an internal list of some common command directories. +# +# Any directories specified here will, by default, be appended to the default +# list. However, if a directory name begins with the '+' character, then that +# directory will be prepended to the list (that is, it will be put at the start +# of the list). +# +# This is a space-separated list of directory names. The option may be +# specified more than once. +# +# The default value is based on the root account PATH environment variable. +# +#BINDIR=/bin /usr/bin /sbin /usr/sbin +#BINDIR=+/usr/local/bin +/usr/local/sbin + +# +# This option specifies the default language to use. This should be similar to +# the ISO 639 language code. +# +# NOTE: Please ensure that the language you specify is supported. +# For a list of supported languages use the following command: +# +# rkhunter --lang en --list languages +# +# The default language is 'en' (English). +# +LANGUAGE=en + +# +# This option is a space-separated list of the languages that are to be updated +# when the '--update' option is used. If unset, then all the languages will be +# updated. If none of the languages are to be updated, then set this option to +# just 'en'. +# +# The default language, specified by the LANGUAGE option, and the English (en) +# language file will always be updated regardless of this option. +# +# This option may be specified more than once. +# +# The default value is the null string, indicating that all the language files +# will be updated. +# +UPDATE_LANG="en" + +# +# This option specifies the log file pathname. The file will be created if it +# does not initially exist. If the option is unset, then the program will +# display a message each time it is run saying that the default value is being +# used. +# +# The default value is '/var/log/rkhunter.log'. +# +LOGFILE=/var/log/rkhunter.log + +# +# Set this option to '1' if the log file is to be appended to whenever rkhunter +# is run. A value of '0' will cause a new log file to be created whenever the +# program is run. +# +# The default value is '0'. +# +#APPEND_LOG=0 + +# +# Set the following option to '1' if the log file is to be copied when rkhunter +# finishes and an error or warning has occurred. The copied log file name will +# be appended with the current date and time (in YYYY-MM-DD_HH:MM:SS format). +# For example: rkhunter.log.2009-04-21_00:57:51 +# If the option value is '0', then the log file will not be copied regardless +# of whether any errors or warnings occurred. +# +# The default value is '0'. +# +#COPY_LOG_ON_ERROR=0 + +# +# Set the following option to enable the rkhunter check start and finish times +# to be logged by syslog. Warning messages will also be logged. The value of +# the option must be a standard syslog facility and priority, separated by a +# dot. For example: +# +# USE_SYSLOG=authpriv.warning +# +# Setting the value to 'NONE', or just leaving the option commented out, +# disables the use of syslog. +# +# The default value is not to use syslog. +# +USE_SYSLOG=authpriv.warning + +# +# Set the following option to '1' if the second colour set is to be used. This +# can be useful if your screen uses black characters on a white background +# (for example, a PC instead of a server). A value of '0' will cause the default +# colour set to be used. +# +# The default value is '0'. +# +#COLOR_SET2=0 + +# +# Set the following option to '0' if rkhunter should not detect if X is being +# used. If X is detected as being used, then the second colour set will +# automatically be used. If set to '1', then the use of X will be detected. +# +# The default value is '0'. +# +AUTO_X_DETECT=1 + +# +# Set the following option to '1' if it is wanted that any 'Whitelisted' results +# are shown in white rather than green. For colour set 2 users, setting this +# option will cause the result to be shown in black. Setting the option to '0' +# causes whitelisted results to be displayed in green. +# +# The default value is '0'. +# +#WHITELISTED_IS_WHITE=0 + +# +# The following option is checked against the SSH configuration file +# 'PermitRootLogin' option. A warning will be displayed if they do not match. +# However, if a value has not been set in the SSH configuration file, then a +# value here of 'unset' can be used to avoid warning messages. +# +# The default value is 'no'. +# +#ALLOW_SSH_ROOT_USER=no + +# +# Set this option to '1' to allow the use of the SSH-1 protocol, but note +# that theoretically it is weaker, and therefore less secure, than the +# SSH-2 protocol. Do not modify this option unless you have good reasons +# to use the SSH-1 protocol (for instance for AFS token passing or Kerberos4 +# authentication). If the 'Protocol' option has not been set in the SSH +# configuration file, then a value of '2' may be set here in order to +# suppress a warning message. A value of '0' indicates that the use of +# SSH-1 is not allowed. +# +# The default value is '0'. +# +ALLOW_SSH_PROT_V1=2 + +# +# This setting tells rkhunter the directory containing the SSH configuration +# file. If unset, this setting will be worked out by rkhunter, and so should +# not usually need to be set. +# +# This option has no default value. +# +#SSH_CONFIG_DIR=/etc/ssh + +# +# These two options determine which tests are to be performed. The ENABLE_TESTS +# option can use the word 'ALL' to refer to all of the available tests. The +# DISABLE_TESTS option can use the word 'NONE' to mean that no tests are +# disabled. The list of disabled tests is applied to the list of enabled tests. +# +# Both options are space-separated lists of test names, and both options may +# be specified more than once. The currently available test names can be seen +# by using the command 'rkhunter --list tests'. +# +# The supplied configuration file has some tests already disabled, and these +# are tests that will be used only occasionally, can be considered 'advanced' +# or that are prone to produce more than the average number of false-positives. +# +# Please read the README file for more details about enabling and disabling +# tests, the test names, and how rkhunter behaves when these options are used. +# +# The default values are to enable all tests and to disable none. However, if +# either of the options below are specified, then they will override the +# program defaults. +# +ENABLE_TESTS=ALL +DISABLE_TESTS=suspscan hidden_ports hidden_procs deleted_files packet_cap_apps apps + +# +# The HASH_CMD option can be used to specify the command to use for the file +# properties hash value check. It can be specified as just the command name or +# the full pathname. If just the command name is given, and it is one of MD5, +# SHA1, SHA224, SHA256, SHA384 or SHA512, then rkhunter will first look for the +# relevant command, such as 'sha256sum', and then for 'sha256'. If neither of +# these are found, it will then look to see if a perl module has been installed +# which will support the relevant hash function. To see which perl modules have +# been installed use the command 'rkhunter --list perl'. +# +# Systems using prelinking are restricted to using either the SHA1 or MD5 +# function. +# +# A value of 'NONE' (in uppercase) can be specified to indicate that no hash +# function should be used. Rkhunter will detect this, and automatically disable +# the file properties hash check test. +# +# Examples: +# For Solaris 9 : HASH_CMD=gmd5sum +# For Solaris 10: HASH_CMD=sha1sum +# For AIX (>5.2): HASH_CMD="csum -hMD5" +# For NetBSD : HASH_CMD="cksum -a sha512" +# +# NOTE: Whenever this option is changed 'rkhunter --propupd' must be run. +# +# The default value is the SHA256 function, unless prelinking is used in +# which case it defaults to the SHA1 function. +# +# Also see the HASH_FLD_IDX option. In addition, note the comments under +# the PKGMGR option relating to the use of HASH_CMD. +# +#HASH_CMD=SHA256 + +# +# The HASH_FLD_IDX option specifies which field from the HASH_CMD command +# output contains the hash value. The fields are assumed to be space-separated. +# +# The option value must be an integer greater than zero. +# +# The default value is '1', but for *BSD users rkhunter will, by default, use a +# value of '4' if the HASH_CMD option has not been set. +# +#HASH_FLD_IDX=4 + +# +# The PKGMGR option tells rkhunter to use the specified package manager to +# obtain the file property information. This is used when updating the file +# properties file ('rkhunter.dat'), and when running the file properties check. +# For RedHat/RPM-based systems, 'RPM' can be used to get information from the +# RPM database. For Debian-based systems 'DPKG' can be used, for *BSD systems +# 'BSD' can be used, or for *BSD systems with the 'pkg' command 'BSDng' can be +# used, and for Solaris systems 'SOLARIS' can be used. No value, or a value of +# 'NONE', indicates that no package manager is to be used. +# +# The package managers obtain each file hash value using a hash function. The +# Solaris package manager includes a 16-bit checksum value, but this is not +# used by default (see USE_SUNSUM below). The 'RPM' and 'BSDng' package managers +# currently use a SHA256 hash function. Other package managers will, typically, +# use an MD5 hash function. +# +# The 'DPKG', 'BSD' and 'BSDng' package managers only provide a file hash value. +# The 'RPM' package manager additionally provides values for the inode, file +# permissions, uid, gid and other values. The 'SOLARIS' package manager also +# provides most of the values, similar to 'RPM', but not the inode number. +# +# For any file not part of a package, rkhunter will revert to using the +# HASH_CMD hash function instead. This means that if the HASH_CMD option +# is set, and PKGMGR is set, then the HASH_CMD hash function is only used, +# and stored, for non-packaged files. All packaged files will use, and store, +# whatever hash function the relevant package manager uses. So, for example, +# with the 'RPM' package manager, packaged files will be stored with their +# SHA256 value regardless of the value of the HASH_CMD option. +# +# NOTE: Whenever this option is changed 'rkhunter --propupd' must be run. +# +# The default value is 'NONE'. +# +# Also see the PKGMGR_NO_VRFY and USE_SUNSUM options. +# +# NONE is the default for Debian as well, as running --propupd takes +# about 4 times longer when it's set to DPKG +# +#PKGMGR=NONE + +# +# It is possible that a file, which is part of a package, may have been +# modified by the administrator. Typically this occurs for configuration +# files. However, the package manager may list the file as being modified. +# For the RPM package manager this may well depend on how the package was +# built. This option specifies a pathname which is to be exempt from the +# package manager verification process, and which will be treated +# as a non-packaged file. As such, the file properties are still checked. +# +# This option only takes effect if the PKGMGR option has been set, and +# is not 'NONE'. +# +# This option may be specified more than once. +# +# NOTE: Whenever this option is changed 'rkhunter --propupd' must be run. +# +# The default value is the null string. +# +#PKGMGR_NO_VRFY="" + +# +# If the 'SOLARIS' package manager is used, then it is possible to use the +# checksum (hash) value stored for a file. However, this is only a 16-bit +# checksum, and as such is not nearly as secure as, for example, a SHA-2 value. +# If the option is set to '0', then the checksum is not used and the hash +# function given by HASH_CMD is used instead. To enable this option, set its +# value to '1'. The Solaris 'sum' command must be present on the system if this +# option is used. +# +# The default value is '0'. +# +#USE_SUNSUM=0 + +# +# This option can be used to tell rkhunter to ignore any prelink dependency +# errors for the given commands. However, a warning will also be issued if the +# error does not occur for a given command. As such this option must only be +# used on commands which experience a persistent problem. +# +# Short-term prelink dependency errors can usually be resolved simply by +# running the 'prelink' command on the given pathname. +# +# This is a space-separated list of command pathnames. The option can be +# specified more than once. +# +# NOTE: Whenever this option is changed 'rkhunter --propupd' must be run. +# +# The default value is the null string. +# +#IGNORE_PRELINK_DEP_ERR=/bin/ps /usr/bin/top + +# +# These options specify a command, directory or file pathname which will be +# included or excluded in the file properties checks. +# +# For the USER_FILEPROP_FILES_DIRS option, simple command names - for example, +# 'top' - and directory names are added to the internal list of directories to +# be searched for each of the command names in the command list. Additionally, +# full pathnames to files, which need not be commands, may be given. Any files +# or directories which are already part of the internal lists will be silently +# ignored from the configuration. +# +# For the USER_FILEPROP_FILES_DIRS option, wildcards are allowed, except for +# simple command names. +# For example, 'top*' cannot be given, but '/usr/bin/top*' is allowed. +# +# To extend the use of wildcards to include recursive checking of directories, +# see the GLOBSTAR configuration option. +# +# Specific files may be excluded by using the EXCLUDE_USER_FILEPROP_FILES_DIRS +# option. Wildcards may be used with this option. +# +# By combining these two options, and using wildcards, whole directories can be +# excluded. For example: +# +# USER_FILEPROP_FILES_DIRS=/etc/* +# USER_FILEPROP_FILES_DIRS=/etc/*/* +# EXCLUDE_USER_FILEPROP_FILES_DIRS=/etc/rc?.d/* +# +# This will look for files in the first two directory levels of '/etc'. However, +# anything in '/etc/rc0.d', '/etc/rc1.d', '/etc/rc2.d' and so on, will be +# excluded. +# +# NOTE: Only files and directories which have been added by the user, and are +# not part of the internal lists, can be excluded. So, for example, it is not +# possible to exclude the 'ps' command by using '/bin/ps'. These will be +# silently ignored from the configuration. +# +# Both options can be specified more than once. +# +# NOTE: Whenever these options are changed 'rkhunter --propupd' must be run. +# +# The default value for both options is the null string. +# +#USER_FILEPROP_FILES_DIRS=top +#USER_FILEPROP_FILES_DIRS=/usr/local/sbin +#USER_FILEPROP_FILES_DIRS=/etc/rkhunter.conf +#USER_FILEPROP_FILES_DIRS=/etc/rkhunter.conf.local +#USER_FILEPROP_FILES_DIRS=/etc/rkhunter.d/* +#EXCLUDE_USER_FILEPROP_FILES_DIRS=/opt/ps* + +# +# This option whitelists files and directories from existing, or not existing, +# on the system at the time of testing. This option is used when the +# configuration file options themselves are checked, and during the file +# properties check, the hidden files and directories checks, and the filesystem +# check of the '/dev' directory. +# +# This option may be specified more than once, and may use wildcards. +# Be aware though that this is probably not what you want to do as the +# wildcarding will be expanded after files have been deleted. As such +# deleted files won't be whitelisted if wildcarded. +# +# NOTE: The user must take into consideration how often the file will appear +# and disappear from the system in relation to how often rkhunter is run. If +# the file appears, and disappears, too often then rkhunter may not notice +# this. All it will see is that the file has changed. The inode number and DTM +# will certainly be different for each new file, and rkhunter will report this. +# +# The default value is the null string. +# +#EXISTWHITELIST="" + +# +# Whitelist various attributes of the specified file. The attributes are those +# of the 'attributes' test. Specifying a file name here does not include it +# being whitelisted for the write permission test (see below). +# +# This option may be specified more than once, and may use wildcard characters. +# +# The default value is the null string. +# +#ATTRWHITELIST=/usr/bin/date + +# +# Allow the specified file to have the 'others' (world) permission have the +# write-bit set. For example, files with permissions r-xr-xrwx or rwxrwxrwx. +# +# This option may be specified more than once, and may use wildcard characters. +# +# The default value is the null string. +# +#WRITEWHITELIST=/usr/bin/date + +# +# Allow the specified file to be a script. +# +# This option may be specified more than once, and may use wildcard characters. +# +# The default value is the null string. +# +SCRIPTWHITELIST=/usr/bin/egrep +SCRIPTWHITELIST=/usr/bin/fgrep +SCRIPTWHITELIST=/usr/bin/which +SCRIPTWHITELIST=/usr/bin/ldd +SCRIPTWHITELIST=/usr/bin/lwp-request +SCRIPTWHITELIST=/usr/sbin/adduser +#SCRIPTWHITELIST=/usr/sbin/prelink +#SCRIPTWHITELIST=/usr/sbin/unhide.rb + +# +# Allow the specified file to have the immutable attribute set. +# +# This option may be specified more than once, and may use wildcard characters. +# +# The default value is the null string. +# +#IMMUTWHITELIST=/sbin/ifdown + +# +# If this option is set to '1', then the immutable-bit test is reversed. That +# is, the files are expected to have the bit set. A value of '0' means that the +# immutable-bit should not be set. +# +# The default value is '0'. +# +#IMMUTABLE_SET=0 + +# +# If this option is set to '1', then any changed inode value is ignored in +# the file properties check. The inode test itself still runs, but it will +# always return that no inodes have changed. +# +# This option may be useful for filesystems such as Btrfs, which handle inodes +# slightly differently than other filesystems. +# +# The default value is '0'. +# +#SKIP_INODE_CHECK=0 + +# +# Allow the specified hidden directory to be whitelisted. +# +# This option may be specified more than once, and may use wildcard characters. +# +# The default value is the null string. +# +ALLOWHIDDENDIR=/etc/.java +ALLOWHIDDENDIR=/dev/shm +#ALLOWHIDDENDIR=/etc/.git +#ALLOWHIDDENDIR=/dev/.lxc + +# +# Allow the specified hidden file to be whitelisted. +# +# This option may be specified more than once, and may use wildcard characters. +# +# The default value is the null string. +# +#ALLOWHIDDENFILE=/usr/share/man/man1/..1.gz +#ALLOWHIDDENFILE=/usr/bin/.fipscheck.hmac +#ALLOWHIDDENFILE=/usr/bin/.ssh.hmac +#ALLOWHIDDENFILE=/usr/lib/.libfipscheck.so.1.1.0.hmac +#ALLOWHIDDENFILE=/usr/lib/hmaccalc/sha1hmac.hmac +#ALLOWHIDDENFILE=/usr/lib/hmaccalc/sha256hmac.hmac +#ALLOWHIDDENFILE=/usr/sbin/.sshd.hmac +#ALLOWHIDDENFILE=/usr/share/man/man5/.k5login.5.gz +#ALLOWHIDDENFILE=/usr/share/man/man5/.k5identity.5.gz +#ALLOWHIDDENFILE=/etc/.gitignore +#ALLOWHIDDENFILE=/etc/.bzrignore +#ALLOWHIDDENFILE=/etc/.etckeeper + +# +# Allow the specified process to use deleted files. The process name may be +# followed by a colon-separated list of full pathnames (which have been +# deleted). The process will then only be whitelisted if it is using one of +# the given pathnames. For example: +# +# ALLOWPROCDELFILE=/usr/libexec/gconfd-2:/tmp/abc:/var/tmp/xyz +# +# This option may be specified more than once. It may also use wildcards, but +# only in the deleted file pathnames, not in the process name. The use of +# extended pattern matching in pathname expansion (for example, '**') is not +# supported for this option. However, the option itself extends globbing when +# the '*' character is used by matching zero or more characters in the +# pathname, including those in sub-directories. For example, the pathname +# '/tmp/abc/def/xyz' would not be matched by shell globbing using '/tmp/*/xyz' +# but is matched when used in this option. Similarly, using '/tmp/*' will +# match any file found in the '/tmp' directory or any sub-directories. +# +# The default value is the null string. +# +#ALLOWPROCDELFILE=/sbin/cardmgr +#ALLOWPROCDELFILE=/usr/lib/libgconf2-4/gconfd-2 +#ALLOWPROCDELFILE=/usr/sbin/mysqld:/tmp/ib* +#ALLOWPROCDELFILE=/usr/lib/iceweasel/iceweasel +#ALLOWPROCDELFILE=/usr/bin/file-roller + +# +# Allow the specified process to listen on any network interface. +# +# This option may be specified more than once, and may use wildcard characters. +# +# The default value is the null string. +# +#ALLOWPROCLISTEN=/sbin/dhclient +#ALLOWPROCLISTEN=/usr/bin/dhcpcd +#ALLOWPROCLISTEN=/usr/sbin/tcpdump +#ALLOWPROCLISTEN=/usr/sbin/snort-plain + +# +# Allow the specified network interfaces to be in promiscuous mode. +# +# This is a space-separated list of interface names. The option may be +# specified more than once. +# +# The default value is the null string. +# +#ALLOWPROMISCIF=eth0 + +# +# This option specifies how rkhunter should scan the '/dev' directory for +# suspicious files. The only allowed values are 'THOROUGH' and 'LAZY'. +# +# A THOROUGH scan will increase the overall runtime of rkhunter. Despite this, +# it is highly recommended that this value is used. +# +# The default value is 'THOROUGH'. +# +# Also see the ALLOWDEVFILE option. +# +#SCAN_MODE_DEV=THOROUGH + +# +# Allow the specified file to be present in the '/dev' directory, and not +# regarded as suspicious. +# +# This option may be specified more than once, and may use wildcard characters. +# +# The default value is the null string. +# +#ALLOWDEVFILE=/dev/shm/pulse-shm-* +#ALLOWDEVFILE=/dev/shm/sem.ADBE_* + +# +# Allow the specified process pathnames to use shared memory segments. +# +# This option may be specified more than once, and may use wildcard characters. +# +# The default value is the null string. +# +#ALLOWIPCPROC=/usr/bin/firefox +#ALLOWIPCPROC=/usr/bin/vlc + +# +# Allow the specified memory segment creator PIDs to use shared memory segments. +# +# This is a space-separated list of PID numbers (as given by the +# 'ipcs -p' command). This option may be specified more than once. +# +# The default value is the null string. +# +#ALLOWIPCPID=12345 6789 + +# +# Allow the specified account names to use shared memory segments. +# +# This is a space-separated list of account names. The option may be specified +# more than once. +# +# The default value is the null string. +# +#ALLOWIPCUSER=usera userb + +# +# This option can be used to set the maximum shared memory segment size +# (in bytes) that is not considered suspicious. Any segment above this size, +# and with 600 or 666 permissions, will be considered suspicious during the +# shared memory check. +# +# The default is 1048576 (1M) bytes. +# +#IPC_SEG_SIZE=1048576 + +# +# This option is used to indicate if the Phalanx2 test is to perform a basic +# check, or a more thorough check. If the option is set to '0', then a basic +# check is performed. If it is set to '1', then all the directories in the +# '/etc' and '/usr' directories are scanned. +# +# NOTE: Setting this option to '1' will cause the test to take longer +# to complete. +# +# The default value is '0'. +# +#PHALANX2_DIRTEST=0 + +# +# This option tells rkhunter where the inetd configuration file is located. +# +# The default value is the null string. +# +#INETD_CONF_PATH=/etc/inetd.conf + +# +# This option allows the specified enabled inetd services. +# +# This is a space-separated list of service names. The option may be specified +# more than once. +# +# For non-Solaris users the simple service name should be used. +# For example: +# +# INETD_ALLOWED_SVC=echo +# +# For Solaris 9 users the simple service name should also be used, but +# if it is an RPC service, then the executable pathname should be used. +# For example: +# +# INETD_ALLOWED_SVC=imaps +# INETD_ALLOWED_SVC=/usr/sbin/rpc.metad /usr/sbin/rpc.metamhd +# +# For Solaris 10 users the service/FMRI name should be used. For example: +# +# INETD_ALLOWED_SVC=/network/rpc/meta +# INETD_ALLOWED_SVC=/network/rpc/metamed +# INETD_ALLOWED_SVC=/application/font/stfsloader +# INETD_ALLOWED_SVC=/network/rpc-100235_1/rpc_ticotsord +# +# The default value is the null string. +# +#INETD_ALLOWED_SVC=echo + +# +# This option tells rkhunter where the xinetd configuration file is located. +# +# The default value is the null string. +# +#XINETD_CONF_PATH=/etc/xinetd.conf + +# +# This option allows the specified enabled xinetd services. Whilst it would be +# nice to use the service names themselves, at the time of testing we only have +# the pathname available. As such, these entries are the xinetd file pathnames. +# +# This is a space-separated list of service names. The option may be specified +# more than once. +# +# The default value is the null string. +# +#XINETD_ALLOWED_SVC=/etc/xinetd.d/echo + +# +# This option tells rkhunter the local system startup file pathnames. The +# directories will be searched for files. If unset, then rkhunter will try +# and determine were the startup files are located. If the option is set to +# 'NONE' then certain tests will be skipped. +# +# This is a space-separated list of file and directory pathnames. The option +# may be specified more than once, and may use wildcard characters. +# +# This option has no default value. +# +#STARTUP_PATHS=/etc/init.d /etc/rc.local + +# +# This option tells rkhunter the pathname to the file containing the user +# account passwords. If unset, this setting will be worked out by rkhunter, +# and so should not usually need to be set. Users of TCB shadow files should +# not set this option. +# +# This option has no default value. +# +#PASSWORD_FILE=/etc/shadow + +# +# This option allows the specified accounts to be root equivalent. These +# accounts will have a UID value of zero. The 'root' account does not need +# to be listed as it is automatically whitelisted. +# +# This is a space-separated list of account names. The option may be specified +# more than once. +# +# NOTE: For *BSD systems you will probably need to use this option for the +# 'toor' account. +# +# The default value is the null string. +# +#UID0_ACCOUNTS=toor rooty sashroot + +# +# This option allows the specified accounts to have no password. NIS/YP entries +# do not need to be listed as they are automatically whitelisted. +# +# This is a space-separated list of account names. The option may be specified +# more than once. +# +# The default value is the null string. +# +#PWDLESS_ACCOUNTS=abc + +# +# This option tells rkhunter the pathname to the syslog configuration file. +# If unset, this setting will be worked out by rkhunter, and so should not +# usually need to be set. A value of 'NONE' can be used to indicate that +# there is no configuration file, but that the syslog daemon process may +# be running. +# +# This is a space-separated list of pathnames. The option may be specified +# more than once. +# +# This option has no default value. +# +#SYSLOG_CONFIG_FILE=/etc/syslog.conf + +# +# If this option is set to '1', then the use of syslog remote logging is +# permitted. A value of '0' disallows the use of remote logging. +# +# The default value is '0'. +# +#ALLOW_SYSLOG_REMOTE_LOGGING=0 + +# +# This option allows the specified applications, or a specific version of an +# application, to be whitelisted. If a specific version is to be whitelisted, +# then the name must be followed by a colon and then the version number. +# For example: +# +# APP_WHITELIST=openssl:0.9.7d gpg httpd:1.3.29 +# +# This is a space-separated list of pathnames. The option may be specified +# more than once. +# +# The default value is the null string. +# +#APP_WHITELIST="" + +# +# Set this option to scan for suspicious files in directories which pose a +# relatively higher risk due to user write access. +# +# Please do not enable the 'suspscan' test by default as it is CPU and I/O +# intensive, and prone to producing false positives. Do review all settings +# before usage. Also be aware that running 'suspscan' in combination with +# verbose logging on, rkhunter's default, will show all ignored files. +# +# Please consider adding all directories the user the (web)server runs as, +# and has write access to, including the document root (e.g: '/var/www') and +# log directories (e.g: '/var/log/httpd'). +# +# This is a space-separated list of directory pathnames. The option may be +# specified more than once. +# +# The default value is the '/tmp' and '/var/tmp' directories. +# +#SUSPSCAN_DIRS=/tmp /var/tmp + +# +# This option specifies the directory for temporary files used by the +# 'suspscan' test. A memory-based directory, such as a tempfs filesystem, is +# better (faster). Do not use a directory name that is listed in SUSPSCAN_DIRS +# as that is highly likely to cause false-positive results. +# +# The default value is '/dev/shm'. +# +#SUSPSCAN_TEMP=/dev/shm + +# +# This option specifies the 'suspscan' test maximum filesize in bytes. Files +# larger than this will not be inspected. Do make sure you have enough space +# available in your temporary files directory. +# +# The default value is '1024000'. +# +#SUSPSCAN_MAXSIZE=1024000 + +# +# This option specifies the 'suspscan' test score threshold. Below this value +# no hits will be reported. +# +# The default value is '200'. +# +#SUSPSCAN_THRESH=200 + +# +# This option may be used to whitelist file pathnames from the suspscan test. +# +# Shell globbing may be used in the pathname. Also see the GLOBSTAR configuration +# option. +# +# This option may be specified more than once. +# +# The default value is the null string. +# +#SUSPSCAN_WHITELIST="" + +# +# The following options can be used to whitelist network ports which are known +# to have been used by malware. +# +# The PORT_WHITELIST option is a space-separated list of one or more of two +# types of whitelisting. These are: +# +# 1) a 'protocol:port' pair +# 2) an asterisk ('*') +# +# Only the UDP or TCP protocol may be specified, and the port number must be +# between 1 and 65535 inclusive. +# +# The asterisk can be used to indicate that any executable which rkhunter can +# locate as a command, is whitelisted. (Also see BINDIR) +# +# The PORT_PATH_WHITELIST option specifies one of two types of whitelisting. +# These are: +# +# 1) a pathname to an executable +# 2) a combined pathname, protocol and port +# +# As above, the protocol can only be TCP or UDP, and the port number must be +# between 1 and 65535 inclusive. +# +# Examples: +# +# PORT_WHITELIST=TCP:2001 UDP:32011 +# PORT_PATH_WHITELIST=/usr/sbin/squid +# PORT_PATH_WHITELIST=/usr/sbin/squid:TCP:3801 +# +# NOTE: In order to whitelist a pathname, or use the asterisk option, the +# 'lsof' command must be present. +# +# Both options may be specified more than once. +# +# The default value for both options is the null string. +# +#PORT_WHITELIST="" +#PORT_PATH_WHITELIST="" + +# +# The following option can be used to tell rkhunter where the operating system +# 'release' file is located. This file contains information specifying the +# current O/S version. RKH will store this information, and check to see if it +# has changed between each run. If it has changed, then the user is warned that +# RKH may issue warning messages until RKH has been run with the '--propupd' +# option. +# +# Since the contents of the file vary according to the O/S distribution, RKH +# will perform different actions when it detects the file itself. As such, this +# option should not be set unless necessary. If this option is specified, then +# RKH will assume the O/S release information is on the first non-blank line of +# the file. +# +# This option has no default value. +# +# Also see the WARN_ON_OS_CHANGE and UPDT_ON_OS_CHANGE options. +# +#OS_VERSION_FILE=/etc/debian_version + +# +# Set the following option to '0' if you do not want to receive a warning if any +# O/S information has changed since the last run of 'rkhunter --propupd'. The +# warnings occur during the file properties check. Setting a value of '1' will +# cause rkhunter to issue a warning if something has changed. +# +# The default value is '1'. +# +#WARN_ON_OS_CHANGE=1 + +# +# Set the following option to '1' if you want rkhunter to automatically run a +# file properties update ('--propupd') if the O/S has changed. Detection of an +# O/S change occurs during the file properties check. Setting a value of '0' +# will cause rkhunter not to do an automatic update. +# +# WARNING: Only set this option if you are sure that the update will work +# correctly. That is, that the database directory is writeable, that a valid +# hash function is available, and so on. This can usually be checked simply by +# running 'rkhunter --propupd' at least once. +# +# The default value is '0'. +# +#UPDT_ON_OS_CHANGE=0 + +# +# The following two options can be used to whitelist files and directories that +# would normally be flagged with a warning during the various rootkit and +# malware checks. Only existing files and directories can be specified, and +# these must be full pathnames not links. +# +# Additionally, the RTKT_FILE_WHITELIST option may include a string after the +# file name (separated by a colon). This will then only whitelist that string +# in that file (as part of the malware checks). For example: +# +# RTKT_FILE_WHITELIST=/etc/rc.local:hdparm +# +# If the option list includes the filename on its own as well, then the file +# will be whitelisted from rootkit checks of the files existence, but still +# only the specific string within the file will be whitelisted. For example: +# +# RTKT_FILE_WHITELIST=/etc/rc.local +# RTKT_FILE_WHITELIST=/etc/rc.local:hdparm +# +# To whitelist a file from the existence checks, but not from the strings +# checks, then include the filename on its own and on its own but with just +# a colon appended. For example: +# +# RTKT_FILE_WHITELIST=/etc/rc.local +# RTKT_FILE_WHITELIST=/etc/rc.local: +# +# NOTE: It is recommended that if you whitelist any files, then you include +# those files in the file properties check. See the USER_FILEPROP_FILES_DIRS +# configuration option. +# +# Both of these options may be specified more than once. +# +# For both options the default value is the null string. +# +#RTKT_DIR_WHITELIST="" +#RTKT_FILE_WHITELIST="" + +# +# The following option can be used to whitelist shared library files that would +# normally be flagged with a warning during the preloaded shared library check. +# These library pathnames usually exist in the '/etc/ld.so.preload' file or in +# the LD_PRELOAD environment variable. +# +# NOTE: It is recommended that if you whitelist any files, then you include +# those files in the file properties check. See the USER_FILEPROP_FILES_DIRS +# configuration option. +# +# This option is a space-separated list of library pathnames. The option may be +# specified more than once. +# +# The default value is the null string. +# +#SHARED_LIB_WHITELIST=/lib/snoopy.so + +# +# To force rkhunter to use the supplied script for the 'stat' or 'readlink' +# command the following two options can be used. The value must be set to +# 'BUILTIN'. +# +# NOTE: IRIX users will probably need to enable STAT_CMD. +# +# For both options the default value is the null string. +# +#STAT_CMD=BUILTIN +#READLINK_CMD=BUILTIN + +# +# In the file properties test any modification date/time is displayed as the +# number of epoch seconds. Rkhunter will try and use the 'date' command, or +# failing that the 'perl' command, to display the date and time in a +# human-readable format as well. This option may be used if some other command +# should be used instead. The given command must understand the '%s' and +# 'seconds ago' options found in the GNU 'date' command. +# +# A value of 'NONE' may be used to request that only the epoch seconds be shown. +# A value of 'PERL' may be used to force rkhunter to use the 'perl' command, if +# it is present. +# +# This option has no default value. +# +#EPOCH_DATE_CMD="" + +# +# This setting tells rkhunter the directory containing the available Linux +# kernel modules. If unset, this setting will be worked out by rkhunter, and +# so should not usually need to be set. +# +# This option has no default value. +# +#MODULES_DIR="" + +# +# The following option can be set to a command which rkhunter will use when +# downloading files from the Internet - that is, when the '--update' or +# '--versioncheck' option is used. The command can take options. +# +# This allows the user to use a command other than the one automatically +# selected by rkhunter, but still one which it already knows about. +# For example: +# +# WEB_CMD=curl +# +# Alternatively, the user may specify a completely new command. However, note +# that rkhunter expects the downloaded file to be written to stdout, and that +# everything written to stderr is ignored. For example: +# +# WEB_CMD="/opt/bin/dlfile --timeout 5m -q" +# +# *BSD users may want to use the 'ftp' command, provided that it supports the +# HTTP protocol: +# +# WEB_CMD="ftp -o -" +# +# This option has no default value. +# +WEB_CMD="" + +# +# Set the following option to '1' if locking is to be used when rkhunter runs. +# The lock is set just before logging starts, and is removed when the program +# ends. It is used to prevent items such as the log file, and the file +# properties file, from becoming corrupted if rkhunter is running more than +# once. The mechanism used is to simply create a lock file in the LOCKDIR +# directory. If the lock file already exists, because rkhunter is already +# running, then the current process simply loops around sleeping for 10 seconds +# and then retrying the lock. A value of '0' means not to use locking. +# +# The default value is '0'. +# +# Also see the LOCKDIR, LOCK_TIMEOUT and SHOW_LOCK_MSGS options. +# +#USE_LOCKING=0 + +# +# This option specifies the directory to be used when locking is enabled. +# If the option is unset, then the directory to be used will be worked out +# by rkhunter. In that instance the directories '/run/lock', '/var/lock', +# '/var/run/lock', '/run' and '/var/run' will be checked in turn. If none +# of those can be found, or are not read/writeable, then the TMPDIR directory +# will be used. +# +# To avoid the lock file persisting across a server reboot, the directory +# used should be memory-resident. +# +# This option has no default value. +# +#LOCKDIR="" + +# +# If locking is used, then rkhunter may have to wait to get the lock file. +# This option sets the total amount of time, in seconds, that rkhunter should +# wait. It will retry the lock every 10 seconds, until either it obtains the +# lock or the timeout value has been reached. +# +# The default value is 300 seconds (5 minutes). +# +#LOCK_TIMEOUT=300 + +# +# If locking is used, then rkhunter may be doing nothing for some time if it +# has to wait for the lock. If this option is set to '1', then some simple +# messages are echoed to the users screen to let them know that rkhunter is +# waiting for the lock. Set this option to '0' if the messages are not to be +# displayed. +# +# The default value is '1'. +# +#SHOW_LOCK_MSGS=1 + +# +# If this option is set to 'THOROUGH' then rkhunter will search (on a per +# rootkit basis) for filenames in all of the directories (as defined by the +# result of running 'find / -xdev'). While still not optimal, as it still +# searches for only file names as opposed to file contents, this is one step +# away from the rigidity of searching in known (evidence) or default +# (installation) locations. +# +# THIS OPTION SHOULD NOT BE ENABLED BY DEFAULT. +# +# You should only activate this feature as part of a more thorough +# investigation, which should be based on relevant best practices and +# procedures. +# +# Enabling this feature implies you have the knowledge to interpret the +# results properly. +# +# The default value is the null string. +# +#SCANROOTKITMODE=THOROUGH + +# +# The following option can be set to the name(s) of the tests the 'unhide' +# command is to use. Options such as '-m' and '-v' may be specified, but will +# only take effect when they are seen. The test names are a space-separated +# list, and will be executed in the order given. +# +# This option may be specified more than once. +# +# The default value is 'sys' in order to maintain compatibility with older +# versions of 'unhide'. +# +#UNHIDE_TESTS=sys + +# +# The following option can be used to set options for the 'unhide-tcp' command. +# The options are space-separated. +# +# This option may be specified more than once. +# +# The default value is the null string. +# +#UNHIDETCP_OPTS="" + +# +# This option can be set to either '0' or '1'. If set to '1' then the summary, +# shown after rkhunter has run, will display the actual number of warnings +# found. If it is set to '0', then the summary will simply indicate that +# 'One or more' warnings were found. If no warnings were found, and this option +# is set to '1', then a "0" will be shown. If the option is set to '0', then +# the words 'No warnings' will be shown. +# +# The default value is '0'. +# +#SHOW_SUMMARY_WARNINGS_NUMBER=0 + +# +# This option is used to determine where, if anywhere, the summary scan time is +# displayed. A value of '0' indicates that it should not be displayed anywhere. +# A value of '1' indicates that the time should only appear on the screen, and a +# value of '2' that it should only appear in the log file. A value of '3' +# indicates that the time taken should appear both on the screen and in the log +# file. +# +# The default value is '3'. +# +#SHOW_SUMMARY_TIME=3 + +# +# The two options below may be used to check if a file is missing or empty +# (that is, it has a size of zero). The EMPTY_LOGFILES option will also check +# if the file is missing, since that can be interpreted as a file of no size. +# However, the file will only be reported as missing if the MISSING_LOGFILES +# option hasn't already done this. +# +# Both options are space-separated lists of pathnames, and may be specified +# more than once. +# +# NOTE: Log files are usually 'rotated' by some mechanism. At that time it is +# perfectly possible for the file to be either missing or empty. As such these +# options may produce false-positive warnings when log files are rotated. +# +# For both options the default value is the null string. +# +#EMPTY_LOGFILES="" +#MISSING_LOGFILES="" + +# +# This option can be set to either '0' or '1'. If set to '1' then the globbing +# characters '**' can be used to allow the recursive checking of directories. +# This can be useful, for example, with the USER_FILEPROP_FILES_DIRS option. +# For example: +# +# USER_FILEPROP_FILES_DIRS=/etc/**/*.conf +# +# This will check all '.conf' files within the '/etc' directory, and any +# sub-directories (at any level). If GLOBSTAR is not set, then the shell will +# interpret '**' as '*' and only one level of sub-directories will be checked. +# +# NOTE: This option is only valid for those shells which support the 'globstar' +# option. Typically this will be 'bash' (version 4 and above) via the 'shopt' command, +# and 'ksh' via the 'set' command. +# +# The default value is '0'. +# +#GLOBSTAR=0 + +INSTALLDIR=/usr + diff --git a/setup.py b/setup.py new file mode 100755 index 0000000..f2d5520 --- /dev/null +++ b/setup.py @@ -0,0 +1,101 @@ +#!/usr/bin/python3 +# -*- coding: utf-8 -*- +# Python 3 +#(c) Xavier 2019 +""" +Icone sous Windows: il faut: +=> un xxx.ico pour integration dans le exe, avec "icon=xxx.ico" +=> un xxx.png pour integration avec PyQt4 + demander la recopie avec includefiles. +""" + +import sys, os +from cx_Freeze import setup, Executable + +############################################################################# +# preparation des options + +# chemins de recherche des modules +# ajouter d'autres chemins (absolus) si necessaire: sys.path + ["chemin1", "chemin2"] +path = sys.path + +# options d'inclusion/exclusion des modules +includes = [] # nommer les modules non trouves par cx_freeze +excludes = [] +packages = [] # nommer les packages utilises + +# copier les fichiers non-Python et/ou repertoires et leur contenu: +includefiles = [] + +if sys.platform == "win32": + pass + # includefiles += [...] : ajouter les recopies specifiques à Windows +elif sys.platform == "linux2": + pass + # includefiles += [...] : ajouter les recopies specifiques à Linux +else: + pass + # includefiles += [...] : cas du Mac OSX non traite ici + +# pour que les bibliotheques binaires de /usr/lib soient recopiees aussi sous Linux +binpathincludes = [] +if sys.platform == "linux2": + binpathincludes += ["/usr/lib"] + +# niveau d'optimisation pour la compilation en bytecodes +optimize = 0 + +# si True, n'affiche que les warning et les erreurs pendant le traitement cx_freeze +silent = True + +# construction du dictionnaire des options +options = {"path": path, + "includes": includes, + "excludes": excludes, + "packages": packages, + "include_files": includefiles, + "bin_path_includes": binpathincludes, + #"create_shared_zip": False, # <= ne pas generer de fichier zip + #"include_in_shared_zip": False, # <= ne pas generer de fichier zip + #"compressed": False, # <= ne pas generer de fichier zip + "optimize": optimize, + "silent": silent + } + +# pour inclure sous Windows les dll system de Windows necessaires +if sys.platform == "win32": + options["include_msvcr"] = True + +############################################################################# +# preparation des cibles +base = None +if sys.platform == "win32": + base = "Win32GUI" # pour application graphique sous Windows + # base = "Console" # pour application en console sous Windows + +icone = "icone.ico" +if sys.platform == "win32": + icone = "icone.ico" + +cible_1 = Executable( + script="main.py", + base=base, + #compress=False, # <= ne pas generer de fichier zip + #copyDependentFiles=True, + #appendScriptToExe=True, + #appendScriptToLibrary=False, # <= ne pas generer de fichier zip + icon="icone.ico" + ) + + +############################################################################# +# creation du setup +setup( + name="GUI RKHunter", + version="1.01", + description="GUI RKHunter", + author="FRS2013", + options={"build_exe": options}, + executables=[cible_1] + ) + +