diff options
| author | Dominik Lisiak <dominik.lisiak@bemsoft.pl> | 2018-10-28 07:43:57 +0100 | 
|---|---|---|
| committer | Dominik Lisiak <dominik.lisiak@bemsoft.pl> | 2018-10-28 07:43:57 +0100 | 
| commit | d5aba60f9d156b9532549555b3293958ca4de18f (patch) | |
| tree | aacbcd28877ad35db5aefead15c8724c53343106 | |
| parent | Added config_profile and manage_agent commands. (diff) | |
| download | ossec-d5aba60f9d156b9532549555b3293958ca4de18f.tar.xz | |
Added help command.
| -rw-r--r-- | security/ossec-hids-local/files/ossec-hids.in | 222 | 
1 files changed, 151 insertions, 71 deletions
diff --git a/security/ossec-hids-local/files/ossec-hids.in b/security/ossec-hids-local/files/ossec-hids.in index 4af1d93..c044f24 100644 --- a/security/ossec-hids-local/files/ossec-hids.in +++ b/security/ossec-hids-local/files/ossec-hids.in @@ -50,13 +50,13 @@ ossec_merged="${ossec_home}/etc/shared/merged.mg"  ossec_local_time="/etc/localtime" -extra_commands="status reload ossec_conf" +extra_commands="help status reload ossec_conf"  case ${ossec_type} in      server) -        extra_commands="${extra_commands} manage_agent reset_counter agent_conf" +        extra_commands="${extra_commands} agent_conf manage_agent reset_counter"          ;;      agent) -        extra_commands="${extra_commands} manage_agent reset_counter config_profile fetch_config" +        extra_commands="${extra_commands} agent_conf manage_agent reset_counter config_profile fetch_config"          ;;  esac  if [ -x "${ossec_conf_bin}" ]; then @@ -66,6 +66,7 @@ fi  ossec_rc_command=$1  shift 1 +help_cmd="ossec_hids_help $@"  start_cmd="ossec_hids_command start $@"  stop_cmd="ossec_hids_command stop $@"  restart_cmd="ossec_hids_command restart $@" @@ -88,6 +89,98 @@ fetch_config_precmd="${start_precmd}"  agent_ids_cmd="${ossec_home}/bin/manage_agents -l | sed -En -e 's|.*ID:[[:space:]]*([[:digit:]]+).*|\1|p'"  agent_names_cmd="${ossec_home}/bin/manage_agents -l | sed -En -e 's|.*Name:[[:space:]]*([^,]+).*|\1|p'" +ossec_hids_help() { +    local indent="    " +    for command in ${extra_commands}; do +        case ${command} in +            ossec_conf) +                echo "${command}" +                if [ -x "${ossec_conf_bin}" ]; then +                    echo "${indent}Displays the \"ossec.conf\" as it would have been produced" +                    echo "${indent}by merging files from \"ossec.conf.d\" directory." +                    echo "${indent}Does not overwrite the actual \"ossec.conf\"." +                else +                    echo "${indent}Displays the current \"ossec.conf\"." +                fi +                echo +            ;; +            agent_conf) +                echo "${command}" +                if [ -x "${agent_conf_bin}" ]; then +                    echo "${indent}Displays the \"agent.conf\" as it would have been produced" +                    echo "${indent}by merging files from \"agent.conf.d\" directory." +                    echo "${indent}Does not overwrite the actual \"agent.conf\"." +                else +                    echo "${indent}Displays the current \"agent.conf\"." +                fi +                echo +            ;; +            manage_agent) +                echo "${command} [...]" +                echo "${indent}Executes OSSEC Agent Manager." +                echo "${indent}Any additional arguments will be passed along (-h for help)." +                echo "${indent}Use this command to export and import agent keys." +                echo +            ;; +            reset_counter) +                case ${ossec_type} in +                    server) +                        echo "${command} <agent_name>" +                        echo "${indent}Stops the OSSEC and resets (removes) the replay attack prevention counter(s)." +                        echo "${indent}Only the counter for the given <agent_name> is reset." +                        echo "${indent}If the <agent_name> is \"-\", then counters for all agents are reset." +                    ;; +                    agent) +                        echo "${command}" +                        echo "${indent}Stops the OSSEC and resets (removes) the replay attack prevention counter." +                    ;; +                esac +                echo "${indent}Use this command on both the server and the agent to bring back connectivity." +                echo "${indent}The typical scenario for desynchronization of counters is one of the OSSEC" +                echo "${indent}instances has been restored from backup." +                echo "${indent}Use the following procedure:" +                echo "${indent}1. Reset counter on the agent." +                echo "${indent}2. Reset counter on the server for that specific agent." +                echo "${indent}3. Start the server." +                echo "${indent}4. Start the agent." +                echo +            ;; +            config_profile) +                echo "${command}" +                echo "${indent}Displays a list (i.e. union of sets) of applicable (to this agent) configuration" +                echo "${indent}profiles sent by the server (current \"agent.conf\") merged with configuration" +                echo "${indent}profiles enabled on this agent (current \"ossec.conf\"). Each entry on the list" +                echo "${indent}is marked with one of the following markers:" +                echo "${indent}(+) - The profile is sent by the server and is enabled on this agent." +                echo "${indent}(-) - The profile is sent by the server and is applicable for this agent, but is" +                echo "${indent}      not enabled in the \"ossec.conf\"." +                echo "${indent}(?) - The profile is enabled on this agent, but is not sent by the server or is" +                echo "${indent}      not applicable to this agent." +                echo +            ;; +            fetch_config) +                echo "${command}" +                echo "${indent}(Re)starts the agent with a fresh copy of server shared configuration (including" +                echo "${indent}\"agent.conf\"). Command can also be used to ensure server connectivity." +                echo +            ;; +            merge_config) +                echo "${command}" +                echo "${indent}Creates \"ossec.conf\" by merging files from \"ossec.conf.d\" directory." +                case ${ossec_type} in +                    server) +                        echo "${indent}Creates \"agent.conf\" by merging files from \"agent.conf.d\" directory." +                    ;; +                esac +                echo "${indent}Usually you do not need to run this command, because configuration files will" +                echo "${indent}be merged before OSSEC startup if any of them has been modified/created/deleted" +                echo "${indent}since the last merging. This command, however, does merging unconditionally." +                echo +            ;; +        esac +    done +} +  ossec_hids_create_file() {      local path=$1      local owner=$2 @@ -281,6 +374,10 @@ ossec_hids_clean() {  ossec_hids_reset_counter() {      local agent_name="$1" +    ossec_hids_command stop +    sleep 1 +    echo +      case ${ossec_type} in          server)              if [ -z "${agent_name}" ]; then @@ -290,9 +387,6 @@ ossec_hids_reset_counter() {              fi              local agent_counter=0              if [ "${agent_name}" == "-" ]; then -                ossec_hids_command stop -                sleep 1 -                echo                  for agent_id in $(eval ${agent_ids_cmd}); do                      if [ -e "${ossec_home}/queue/rids/${agent_id}" ]; then                          rm "${ossec_home}/queue/rids/${agent_id}" && agent_counter=$((agent_counter + 1)) @@ -302,9 +396,6 @@ ossec_hids_reset_counter() {                  local agent_id=`${ossec_home}/bin/manage_agents -l | sed -En -e "s|.*ID:[[:space:]]*([[:digit:]]+),[[:space:]]*Name:[[:space:]]${agent_name},.*|\1|p"`                  if [ -n "${agent_id}" ]; then                      if [ -e "${ossec_home}/queue/rids/${agent_id}" ]; then -                        ossec_hids_command stop -                        sleep 1 -                        echo                          rm "${ossec_home}/queue/rids/${agent_id}" && agent_counter=$((agent_counter + 1))                      fi                  fi @@ -317,9 +408,6 @@ ossec_hids_reset_counter() {              for agent_id in $(eval ${agent_ids_cmd}); do                  # Should be executed only once                  if [ -e "${ossec_home}/queue/rids/${agent_id}" ]; then -                    ossec_hids_command stop -                    sleep 1 -                    echo                      rm "${ossec_home}/queue/rids/${agent_id}" && agent_counter=$((agent_counter + 1))                  fi              done @@ -332,70 +420,62 @@ ossec_hids_reset_counter() {  }  ossec_hids_fetch_config() { -    case ${ossec_type} in -        agent) -            ossec_hids_command stop -            sleep 1 +    ossec_hids_command stop +    sleep 1 +    echo +    rm -f "${ossec_merged}" +    ossec_hids_command start || return 1 +    echo +    echo "Waiting ${ossec_hids_fetch_connect_time} seconds for the shared configuration download to start." +    sleep ${ossec_hids_fetch_connect_time} +    if [ ! -s "${ossec_merged}" ]; then +        echo "ERROR: Failed to download shared configuration from the OSSEC server." +        echo +        local ossec_log_tail=$(tail "${ossec_log}") +        echo "Portion of the \"${ossec_log}\":" +        echo "${ossec_log_tail}" +        echo +        if echo "${ossec_log_tail}" | grep -q "ERROR: Unable to send message to"; then +            echo "Check if your configuration contains the correct server address in \"server-ip\" option."              echo -            rm -f "${ossec_merged}" -            ossec_hids_command start || return 1 +        else +            local ossec_rc_path="$(realpath $0)" +            echo "Is the imported agent key correct? To import it run:" +            echo "${ossec_rc_path} manage_agent"              echo -            echo "Waiting ${ossec_hids_fetch_connect_time} seconds for the shared configuration download to start." -            sleep ${ossec_hids_fetch_connect_time} -            if [ ! -s "${ossec_merged}" ]; then -                echo "ERROR: Failed to download shared configuration from the OSSEC server." -                echo -                local ossec_log_tail=$(tail "${ossec_log}") -                echo "Portion of the \"${ossec_log}\":" -                echo "${ossec_log_tail}" +            echo "If you are certain the imported agent key is correct, then run:" +            echo "${ossec_rc_path} reset_counter" +            echo "${ossec_rc_path} fetch_config" +            echo +            echo "If this does't help, you need to reset counter on the server." +            echo "If the server runs FreeBSD port of OSSEC, run:" +            echo "On the agent:" +            echo "${ossec_rc_path} reset_counter" +            echo "On the server:" +            echo "${ossec_rc_path} reset_counter $(eval ${agent_names_cmd})" +            echo "${ossec_rc_path} start" +            echo "On the agent:" +            echo "${ossec_rc_path} fetch_config" +            echo +        fi +        ossec_hids_command stop +        return 1 +    else +        # The download has started +        while true; do +            local current_time=$(date +%s) +            local modification_time=$(stat -f %m "${ossec_merged}") +            if [ $((current_time - modification_time)) -gt ${ossec_hids_fetch_read_time} ]; then +                echo "Download finished."                  echo -                if echo "${ossec_log_tail}" | grep -q "ERROR: Unable to send message to"; then -                    echo "Check if your configuration contains the correct server address in \"server-ip\" option." -                    echo -                else -                    local ossec_rc_path="$(realpath $0)" -                    echo "Is the imported agent key correct? To import it run:" -                    echo "${ossec_rc_path} manage_agent" -                    echo -                    echo "If you are certain the imported agent key is correct then run:" -                    echo "${ossec_rc_path} reset_counter" -                    echo "${ossec_rc_path} fetch_config" -                    echo -                    echo "If this does't help you need to reset counter on the server." -                    echo "If the server runs FreeBSD port of OSSEC run:" -                    echo "On the agent:" -                    echo "${ossec_rc_path} reset_counter" -                    echo "On the server:" -                    echo "${ossec_rc_path} reset_counter $(eval ${agent_names_cmd})" -                    echo "${ossec_rc_path} start" -                    echo "On the agent:" -                    echo "${ossec_rc_path} fetch_config" -                    echo -                fi -                return 1 +                ossec_hids_command restart || return 1 +                break;              else -                # The download has started -                while true; do -                    local current_time=$(date +%s) -                    local modification_time=$(stat -f %m "${ossec_merged}") -                    if [ $((current_time - modification_time)) -gt ${ossec_hids_fetch_read_time} ]; then -                        echo "Download finished." -                        echo -                        ossec_hids_command restart || return 1 -                        break; -                    else -                        echo "Download in progress..." -                        sleep ${ossec_hids_fetch_read_time} -                    fi -                done +                echo "Download in progress..." +                sleep ${ossec_hids_fetch_read_time}              fi -            ;; -        *) -            echo "ERROR: Shared configuration is only available for agent installations." -            echo -            return 1 -            ;; -    esac +        done +    fi      return 0  }  | 
