#!/bin/sh ################################################################################# # # Lynis # ------------------ # # Copyright 2007-2013, Michael Boelen # Copyright 2007-2019, CISOfy # # Website : https://cisofy.com # Blog : http://linux-audit.com # GitHub : https://github.com/CISOfy/lynis # # Lynis comes with ABSOLUTELY NO WARRANTY. This is free software, and you are # welcome to redistribute it under the terms of the GNU General Public License. # See LICENSE file for usage of this software. # ################################################################################# # # Home directories # ################################################################################# # InsertSection "Home directories" # ################################################################################# # # Ignore some top level directories (not the sub directories below) IGNORE_HOME_DIRS="/bin /boot /cdrom /dev /etc /home /lib /lib64 /media /mnt /opt /proc /sbin /selinux /srv /sys /tmp /usr /var" # ################################################################################# # # Test : HOME-9302 # Description : Create list with home directories Register --test-no HOME-9302 --weight L --network NO --category security --description "Create list with home directories" if [ ${SKIPTEST} -eq 0 ]; then # Read sixth field of /etc/passwd LogText "Test: query /etc/passwd to obtain home directories" FIND=$(${AWKBINARY} -F: '{ if ($1 !~ "#") print $6 }' /etc/passwd | ${SORTBINARY} -u) for I in ${FIND}; do if [ -d ${I} ]; then LogText "Result: found home directory: ${I} (directory exists)" Report "home_directory[]=${I}" else LogText "Result: found home directory: ${I} (directory does not exist)" fi done fi # ################################################################################# # # Test : HOME-9304 # Description : Check if users' home directories permissions are 750 or more restrictive Register --test-no HOME-9304 --weight L --network NO --category security --description "Check if users' home directories permissions are 750 or more restrictive" if [ ${SKIPTEST} -eq 0 ]; then # Check if users' home directories permissions are 750 or more restrictive FOUND=0 for LINE in $(${CAT_BINARY} /etc/passwd | ${EGREPBINARY} -v '^(root|halt|sync|shutdown)' | ${AWKBINARY} -F: '($7 !="/sbin/nologin" && $7 != "/bin/false") { print }'); do USER=$(echo ${LINE} | ${CUTBINARY} -d: -f1) DIR=$(echo ${LINE} | ${CUTBINARY} -d: -f6) if [ -d ${DIR} ]; then WRITE_GROUP_PERM=$(ls -ld ${DIR} | ${CUTBINARY} -f1 -d" " | ${CUTBINARY} -c6) OTHER_PERMS=$(ls -ld ${DIR} | ${CUTBINARY} -f1 -d" " | ${CUTBINARY} -c8-10) if [ ! ${WRITE_GROUP_PERM} = "-" -o ! ${OTHER_PERMS} = "---" ]; then LogText "Result: permissions of home directory ${DIR} of user ${USER} are not strict enough. Should be 750 or more restrictive. Change with: chmod 750 ${DIR}" FOUND=1 fi fi done # Result if [ ${FOUND} -eq 1 ]; then Display --indent 2 --text "- Checking users' home directories permissions" --result "${STATUS_WARNING}" --color RED ReportWarning ${TEST_NO} "Permissions of some users' home directories are not strict enough. Should be 750 or more restrictive." else Display --indent 2 --text "- Checking users' home directories permissions" --result "${STATUS_OK}" --color GREEN LogText "Result: Ok, All users' home directories permissions are 750 or more restrictive" fi fi # ################################################################################# # # Test : HOME-9306 # Description : Check if users own their home directories Register --test-no HOME-9306 --weight L --network NO --category security --description "Check if users own their home directories" if [ ${SKIPTEST} -eq 0 ]; then # Check if users own their home directories FOUND=0 for LINE in $(${CAT_BINARY} /etc/passwd | ${EGREPBINARY} -v '^(root|halt|sync|shutdown)' | ${AWKBINARY} -F: '($7 !="/sbin/nologin" && $7 != "/bin/false") { print }'); do USER=$(echo ${LINE} | ${CUTBINARY} -d: -f1) DIR=$(echo ${LINE} | ${CUTBINARY} -d: -f6) if [ -d ${DIR} ]; then OWNER=$(ls -ld ${DIR} | awk -F" " '{ print $3 }') if [ ! ${OWNER} = ${USER} ]; then LogText "Result: The home directory ${DIR} of user ${USER} is owned by ${OWNER}. Change with: chown ${OWNER} ${DIR}" FOUND=1 fi fi done # Result if [ ${FOUND} -eq 1 ]; then Display --indent 2 --text "- Checking users' home directories ownership" --result "${STATUS_WARNING}" --color RED ReportWarning ${TEST_NO} "Owner of some users' home directories are not correctly set" else Display --indent 2 --text "- Checking users' home directories ownership" --result "${STATUS_OK}" --color GREEN LogText "Result: Ok, All users own their home directories" fi fi # ################################################################################# # # Test : HOME-9310 # Description : Check for suspicious shell history files Register --test-no HOME-9310 --weight L --network NO --category security --description "Checking for suspicious shell history files" if [ ${SKIPTEST} -eq 0 ]; then if [ ! -z "${HOMEDIRS}" ]; then if [ "${OS}" = "Solaris" ]; then # Solaris doesn't support -maxdepth FIND=$(${FINDBINARY} ${HOMEDIRS} -name ".*history" ! -type f -print) else FIND=$(${FINDBINARY} ${HOMEDIRS} -maxdepth 1 -name ".*history" ! -type f -print) fi if [ -z "${FIND}" ]; then Display --indent 2 --text "- Checking shell history files" --result "${STATUS_OK}" --color GREEN LogText "Result: Ok, history files are type 'file'." else Display --indent 2 --text "- Checking shell history files" --result "${STATUS_WARNING}" --color RED LogText "Result: the following files seem to be of the wrong file type:" LogText "Output: ${FIND}" LogText "Info: above files could be redirected files to avoid logging and should be investigated" ReportWarning ${TEST_NO} "Incorrect file type found for shell history file" fi LogText "Remarks: History files are normally of the type 'file'. Symbolic links and other types can be riskful." else Display --indent 2 --text "- Checking shell history files" --result "${STATUS_SKIPPED}" --color WHITE LogText "Result: Homedirs is empty, test will be skipped" fi fi # ################################################################################# # # Test : HOME-9314 # Description : Check if non local paths are found in PATH, which can be a risk, but also bad for performance # (like searching on a filer, instead of local disk) #Register --test-no HOME-9314 --weight L --network NO --category security --description "Create list with home directories" # ################################################################################# # # Test : HOME-9350 # Description : Scan home directories for specific files, used in different tests later # Notes : For performance reasons we combine the scanning of different files, so inode caching is used # as much as possible for every find command # Profile opt : ignore-home-dir (multiple lines allowed), ignores home directory if [ ! -z "${REPORTFILE}" ]; then PREQS_MET="YES"; else PREQS_MET="NO"; fi Register --test-no HOME-9350 --preqs-met ${PREQS_MET} --weight L --network NO --category security --description "Collecting information from home directories" if [ ${SKIPTEST} -eq 0 ]; then IGNORE_HOME_DIRS=$(${GREPBINARY} "^ignore-home-dir=" ${REPORTFILE} | ${AWKBINARY} -F= '{ print $2 }') if [ -z "${IGNORE_HOME_DIRS}" ]; then LogText "Result: IGNORE_HOME_DIRS empty, no paths excluded" else LogText "Output: ${IGNORE_HOME_DIRS}" fi fi # ################################################################################# # WaitForKeyPress # #================================================================================ # Lynis - Security Auditing and System Hardening for Linux and UNIX - https://cisofy.com