diff --git a/harden b/harden index 77f298d..8f8434d 100755 --- a/harden +++ b/harden @@ -78,9 +78,11 @@ function install_packages { sudo apt install -y "$@" # Install the packages passed as arguments ;; "dnf") # If the package manager is dnf + sudo dnf upgrade -y # Update the package list sudo dnf install -y "$@" # Install the packages passed as arguments ;; "zypper") # If the package manager is zypper + sudo zypper update -y # Update the package list sudo zypper install -y "$@" # Install the packages passed as arguments ;; *) @@ -96,7 +98,7 @@ function install_packages { # and store the ones that are indeed absent in another local array. # Then it will install the packages that are missing by invoking the install_packages function. function check_dependencies { - local dependencies=(curl git sudo vim ssh whiptail) # Declare dependencies as a local array + local dependencies=(curl git sudo vim ssh docker docker-compose wget) # Declare dependencies as a local array #> see what to do with name differences between distros if any <# local missing_dependencies=() # Declare missing_dependencies as a local array for dependency in "${dependencies[@]}"; do # Loop through the dependencies array @@ -107,76 +109,6 @@ function check_dependencies { [[ ${#missing_dependencies[@]} -ne 0 ]] && install_packages "${missing_dependencies[@]}" } -# The main function will call the check_dependencies function and exit if it fails. -# It will also output a message to the user to let them know that the script has finished. -function main { - check_dependencies || exit 1 # Check dependencies and exit if it fails - printf "%s" "Script finished" # Output message to the user -} - -# The am_i_root function will check if the user is root and exit if they are not. -function am_i_root { - if [[ $EUID -ne 0 ]]; then # Check if the user is root - printf "%s" "Please run as root" # Output message to the user - exit 1 # Exit with error code 1 - fi -} - -# The getArgs function will get the arguments passed to the script and store them in an array. -# It will also check if the arguments are valid and exit if they are not. -function getArgs { - local args=() # Declare args as a local array - while [[ $# -gt 0 ]]; do # Loop through the arguments - case "$*" in # Use case to check for the arguments - --help | -h) # If the argument is --help or -h - printf "%s" "Usage: $SCRIPT_NAME [OPTION]..." - ;; - --create-user | -cu) # If the argument is --create-user or -cu - args+=("$1") # Add the argument to the args array - shift # Shift the arguments - case "$*" in - --username=* | -u=*) # If the argument is --username=* or -u=* - args+=("$1") # Add the argument to the args array - shift # Shift the arguments - ;; - --password=* | -p=*) # If the argument is --password=* or -p=* - args+=("$1") # Add the argument to the args array - shift # Shift the arguments - ;; - *) - printf "%s" "Invalid argument: $1" - exit 1 - ;; - esac - create_user "${args[@]}" # Call the create_user function with the args array as arguments - ;; - --harden-ssh | -hs) # If the argument is --harden-ssh or -hs - args+=("$1") # Add the argument to the args array - shift # Shift the arguments - harden_ssh "${args[@]}" # Call the harden_ssh function with the args array as arguments - ;; - esac - done - printf "%s" "${args[@]}" # Output the args array -} - -# The createUser function will create a new user with the username and password passed as arguments. -function createUser { - # Declare username as a local variable and assign it the first argument passed to the function - local username="$1" - # Declare password as a local variable and assign it the second argument passed to the function - local password="$2" - # Check if the user already exists and exit if they do - if id -u "$username" &> /dev/null; then - printf "%s" "User already exists" - exit 1 - fi - # Create the user and add them to the sudo group - useradd -m -G sudo "$username" - # Set the user's password using printf to avoid the password being echoed to the terminal - printf "%s" "$username:$password" | chpasswd -} - # Global array of the service names to be restarted services=() @@ -217,11 +149,81 @@ function hardenSSH { printf "%s" "File sshd_config not found or not readable" exit 1 fi - } +# The main function will call the check_dependencies function and exit if it fails. +# It will also output a message to the user to let them know that the script has finished. +function main { + check_dependencies || exit 1 # Check dependencies and exit if it fails + harden_ssh || exit 1 # Harden ssh and exit if it fails + printf "%s" "Script finished" # Output message to the user +} + +# # The am_i_root function will check if the user is root and exit if they are not. +# function am_i_root { +# if [[ $EUID -ne 0 ]]; then # Check if the user is root +# printf "%s" "Please run as root" # Output message to the user +# exit 1 # Exit with error code 1 +# fi +# } +# +# # The getArgs function will get the arguments passed to the script and store them in an array. +# # It will also check if the arguments are valid and exit if they are not. +# function getArgs { +# local args=() # Declare args as a local array +# while [[ $# -gt 0 ]]; do # Loop through the arguments +# case "$*" in # Use case to check for the arguments +# --help | -h) # If the argument is --help or -h +# printf "%s" "Usage: $SCRIPT_NAME [OPTION]..." +# ;; +# --create-user | -cu) # If the argument is --create-user or -cu +# args+=("$1") # Add the argument to the args array +# shift # Shift the arguments +# case "$*" in +# --username=* | -u=*) # If the argument is --username=* or -u=* +# args+=("$1") # Add the argument to the args array +# shift # Shift the arguments +# ;; +# --password=* | -p=*) # If the argument is --password=* or -p=* +# args+=("$1") # Add the argument to the args array +# shift # Shift the arguments +# ;; +# *) +# printf "%s" "Invalid argument: $1" +# exit 1 +# ;; +# esac +# create_user "${args[@]}" # Call the create_user function with the args array as arguments +# ;; +# --harden-ssh | -hs) # If the argument is --harden-ssh or -hs +# args+=("$1") # Add the argument to the args array +# shift # Shift the arguments +# harden_ssh "${args[@]}" # Call the harden_ssh function with the args array as arguments +# ;; +# esac +# done +# printf "%s" "${args[@]}" # Output the args array +# } +# +# # The createUser function will create a new user with the username and password passed as arguments. +# function createUser { +# # Declare username as a local variable and assign it the first argument passed to the function +# local username="$1" +# # Declare password as a local variable and assign it the second argument passed to the function +# local password="$2" +# # Check if the user already exists and exit if they do +# if id -u "$username" &> /dev/null; then +# printf "%s" "User already exists" +# exit 1 +# fi +# # Create the user and add them to the sudo group +# useradd -m -G sudo "$username" +# # Set the user's password using printf to avoid the password being echoed to the terminal +# printf "%s" "$username:$password" | chpasswd +# } + # Call the main function main -am_i_root +# am_i_root exit 0 # The right and proper way to exit a script diff --git a/secdep.py b/secdep.py index 945e624..1bbfda8 100755 --- a/secdep.py +++ b/secdep.py @@ -54,10 +54,10 @@ parser = argparse.ArgumentParser( prog='secdep.py', description='Manage cloud instances', ) -parser.add_argument('-l', '--list', help='List all instances', action='store_true') +parser.add_argument('-l', '--list', help='List all instances or with -P PROVIDER list a provider\'s instances', action='store_true') parser.add_argument('-v', '--values', help='Change credential values', action='store_true') parser.add_argument('-P', '--provider', help='Cloud provider', choices=['gce', 'azure', 'aws']) -parser.add_argument('-a', '--action', help='Action to perform on a single or all instances. Valid options are delete[all] start[all] stop[all] reboot[all]', choices=action_choices, metavar='ACTION') +parser.add_argument('-a', '--action', help='Action to perform on a single provider with -P PROVIDER or all instances. Valid options are delete[all] start[all] stop[all] reboot[all]', choices=action_choices, metavar='ACTION') parser.add_argument('-c', '--create', help='Create an instance', action='store_true') parser.add_argument('-dep', '--deploy', help='Docker images to deploy', type=str, nargs='*', default=None, required=False) parser.add_argument('-I', '--listimages', help='List images', action='store_true') @@ -67,7 +67,7 @@ parser.add_argument('-i', '--image', help='Image to use') parser.add_argument('-s', '--size', help='Size of instance') parser.add_argument('-n', '--name', help='Name of instance') parser.add_argument('-g', '--region', help='Region to use') -parser.add_argument('-y', '--yes', help='Do not ask for confirmation', action='store_true') +parser.add_argument('-y', '--yes', help='Do not ask for confirmation during creation', action='store_true') parser.add_argument('-p', '--print', help='Also print node, image, location or size', action='store_true') parser.add_argument('-ssh', '--ssh', help='Connect to an instance using ssh', action='store_true') args = parser.parse_args()