diff --git a/deployment_scripts/deploy_linux.sh b/deployment_scripts/deploy_linux.sh index 4e641407e..834d811a7 100755 --- a/deployment_scripts/deploy_linux.sh +++ b/deployment_scripts/deploy_linux.sh @@ -1,10 +1,14 @@ #!/bin/bash source config +exists() { + command -v "$1" >/dev/null 2>&1 +} + # Setup monkey either in dir required or current dir -monkey_home=${1:-`pwd`} -if [[ $monkey_home == `pwd` ]]; then - monkey_home="$monkey_home/$MONKEY_FOLDER_NAME" +monkey_home=${1:-$(pwd)} +if [[ $monkey_home == $(pwd) ]]; then + monkey_home="$monkey_home/$MONKEY_FOLDER_NAME" fi # We can set main paths after we know the home dir @@ -15,55 +19,58 @@ ISLAND_BINARIES_PATH="$ISLAND_PATH/cc/binaries" INFECTION_MONKEY_DIR="$monkey_home/monkey/infection_monkey" MONKEY_BIN_DIR="$INFECTION_MONKEY_DIR/bin" -handle_error () { - echo "Fix the errors above and rerun the script" - exit 1 +handle_error() { + echo "Fix the errors above and rerun the script" + exit 1 } -log_message () { - echo -e "\n\n-------------------------------------------" - echo -e "DEPLOYMENT SCRIPT: $1" - echo -e "-------------------------------------------\n" +log_message() { + echo -e "\n\n-------------------------------------------" + echo -e "DEPLOYMENT SCRIPT: $1" + echo -e "-------------------------------------------\n" } sudo -v if [[ $? != 0 ]]; then - echo "You need root permissions for some of this script operations. Quiting." - exit 1 + echo "You need root permissions for some of this script operations. Quiting." + exit 1 fi if [[ ! -d ${monkey_home} ]]; then - mkdir -p ${monkey_home} + mkdir -p "${monkey_home}" fi -git --version &>/dev/null -git_available=$? -if [[ ${git_available} != 0 ]]; then - echo "Please install git and re-run this script" +if ! exists git; then + echo "Please install git and re-run this script" + exit 1 +fi + +if ! exists wget; then + echo 'Your system does have wget, please install and re-run this script' exit 1 fi log_message "Cloning files from git" branch=${2:-"develop"} if [[ ! -d "$monkey_home/monkey" ]]; then # If not already cloned - git clone --single-branch -b $branch ${MONKEY_GIT_URL} ${monkey_home} 2>&1 || handle_error - chmod 774 -R ${monkey_home} + git clone --single-branch -b "$branch" "${MONKEY_GIT_URL}" "${monkey_home}" 2>&1 || handle_error + chmod 774 -R "${monkey_home}" fi # Create folders log_message "Creating island dirs under $ISLAND_PATH" -mkdir -p ${MONGO_PATH} -mkdir -p ${ISLAND_BINARIES_PATH} || handle_error +mkdir -p "${MONGO_PATH}" +mkdir -p "${ISLAND_BINARIES_PATH}" || handle_error # Detecting command that calls python 3.7 python_cmd="" -if [[ `python --version 2>&1` == *"Python 3.7"* ]]; then +if [[ $(python --version 2>&1) == *"Python 3.7"* ]]; then python_cmd="python" fi -if [[ `python37 --version 2>&1` == *"Python 3.7"* ]]; then +if [[ $(python37 --version 2>&1) == *"Python 3.7"* ]]; then python_cmd="python37" fi -if [[ `python3.7 --version 2>&1` == *"Python 3.7"* ]]; then +if [[ $(python3.7 --version 2>&1) == *"Python 3.7"* ]]; then python_cmd="python3.7" fi @@ -92,7 +99,7 @@ ${python_cmd} -m pip install --user --upgrade -r ${requirements} || handle_error log_message "Installing monkey requirements" sudo apt-get install libffi-dev upx libssl-dev libc++1 -cd ${monkey_home}/monkey/infection_monkey || handle_error +cd "${monkey_home}"/monkey/infection_monkey || handle_error ${python_cmd} -m pip install -r requirements.txt --user --upgrade || handle_error # Download binaries @@ -105,21 +112,23 @@ wget -c -N -P ${ISLAND_BINARIES_PATH} ${WINDOWS_64_BINARY_URL} chmod a+x "$ISLAND_BINARIES_PATH/$LINUX_32_BINARY_NAME" chmod a+x "$ISLAND_BINARIES_PATH/$LINUX_64_BINARY_NAME" - # Get machine type/kernel version -kernel=`uname -m` -linux_dist=`lsb_release -a 2> /dev/null` +kernel=$(uname -m) +linux_dist=$(lsb_release -a 2>/dev/null) # If a user haven't installed mongo manually check if we can install it with our script log_message "Installing MongoDB" -${ISLAND_PATH}/linux/install_mongo.sh ${MONGO_PATH} || handle_error +"${ISLAND_PATH}"/linux/install_mongo.sh ${MONGO_PATH} || handle_error log_message "Installing openssl" sudo apt-get install openssl # Generate SSL certificate log_message "Generating certificate" -cd ${ISLAND_PATH} +cd "${ISLAND_PATH}" || { + echo "cd failed" + exit 1 +} openssl genrsa -out cc/server.key 2048 openssl req -new -key cc/server.key -out cc/server.csr -subj "/C=GB/ST=London/L=London/O=Global Security/OU=Monkey Department/CN=monkey.com" openssl x509 -req -days 366 -in cc/server.csr -signkey cc/server.key -out cc/server.crt @@ -137,20 +146,19 @@ log_message "Generating front end" npm run dist # Making dir for binaries -mkdir ${MONKEY_BIN_DIR} +mkdir "${MONKEY_BIN_DIR}" # Download sambacry binaries log_message "Downloading sambacry binaries" -wget -c -N -P ${MONKEY_BIN_DIR} ${SAMBACRY_64_BINARY_URL} -wget -c -N -P ${MONKEY_BIN_DIR} ${SAMBACRY_32_BINARY_URL} +wget -c -N -P "${MONKEY_BIN_DIR}" "${SAMBACRY_64_BINARY_URL}" +wget -c -N -P "${MONKEY_BIN_DIR}" "${SAMBACRY_32_BINARY_URL}" # Download traceroute binaries log_message "Downloading traceroute binaries" -wget -c -N -P ${MONKEY_BIN_DIR} ${TRACEROUTE_64_BINARY_URL} -wget -c -N -P ${MONKEY_BIN_DIR} ${TRACEROUTE_32_BINARY_URL} +wget -c -N -P "${MONKEY_BIN_DIR}" "${TRACEROUTE_64_BINARY_URL}" +wget -c -N -P "${MONKEY_BIN_DIR}" "${TRACEROUTE_32_BINARY_URL}" - -sudo chmod +x ${monkey_home}/monkey/infection_monkey/build_linux.sh +sudo chmod +x "${monkey_home}"/monkey/infection_monkey/build_linux.sh log_message "Deployment script finished." exit 0 diff --git a/monkey/monkey_island/deb-package/DEBIAN/control b/monkey/monkey_island/deb-package/DEBIAN/control index 2693afbd9..88723149c 100644 --- a/monkey/monkey_island/deb-package/DEBIAN/control +++ b/monkey/monkey_island/deb-package/DEBIAN/control @@ -5,4 +5,4 @@ Homepage: http://www.guardicore.com Priority: optional Version: 1.0 Description: Guardicore Infection Monkey Island installation package -Depends: openssl, python-pip, python-dev +Depends: openssl, python3-pip, python3-dev diff --git a/monkey/monkey_island/deb-package/DEBIAN/postinst b/monkey/monkey_island/deb-package/DEBIAN/postinst index 8efc19bbb..93053a76e 100644 --- a/monkey/monkey_island/deb-package/DEBIAN/postinst +++ b/monkey/monkey_island/deb-package/DEBIAN/postinst @@ -5,8 +5,8 @@ INSTALLATION_FOLDER=/var/monkey/monkey_island/installation PYTHON_FOLDER=/var/monkey/monkey_island/bin/python # Prepare python virtualenv -pip2 install virtualenv --no-index --find-links file://$INSTALLATION_FOLDER -virtualenv -p python2.7 ${PYTHON_FOLDER} +pip3 install virtualenv --no-index --find-links file://$INSTALLATION_FOLDER +virtualenv -p python3 ${PYTHON_FOLDER} # install pip requirements ${PYTHON_FOLDER}/bin/python -m pip install -r $MONKEY_FOLDER/monkey_island/requirements.txt --no-index --find-links file://$INSTALLATION_FOLDER diff --git a/monkey/monkey_island/deb-package/DEBIAN_MONGO/postinst b/monkey/monkey_island/deb-package/DEBIAN_MONGO/postinst index 76e57caa3..42dc2d5a2 100644 --- a/monkey/monkey_island/deb-package/DEBIAN_MONGO/postinst +++ b/monkey/monkey_island/deb-package/DEBIAN_MONGO/postinst @@ -5,8 +5,8 @@ INSTALLATION_FOLDER=/var/monkey/monkey_island/installation PYTHON_FOLDER=/var/monkey/monkey_island/bin/python # Prepare python virtualenv -pip2 install virtualenv --no-index --find-links file://$INSTALLATION_FOLDER -virtualenv -p python2.7 ${PYTHON_FOLDER} +pip3 install virtualenv --no-index --find-links file://$INSTALLATION_FOLDER +virtualenv -p python3 ${PYTHON_FOLDER} # install pip requirements ${PYTHON_FOLDER}/bin/python -m pip install -r $MONKEY_FOLDER/monkey_island/requirements.txt --no-index --find-links file://$INSTALLATION_FOLDER diff --git a/monkey/monkey_island/linux/install.sh b/monkey/monkey_island/linux/install.sh index d4ebfedbe..ab03e4798 100644 --- a/monkey/monkey_island/linux/install.sh +++ b/monkey/monkey_island/linux/install.sh @@ -1,7 +1,7 @@ #!/bin/bash -MACHINE_TYPE=`uname -m` -if [ ${MACHINE_TYPE} == 'x86_64' ]; then +MACHINE_TYPE=$(uname -m) +if [ "${MACHINE_TYPE}" == 'x86_64' ]; then # 64-bit stuff here ARCH=64 else @@ -11,4 +11,4 @@ fi MONKEY_FILE=monkey-linux-$ARCH cp -f /var/monkey/monkey_island/cc/binaries/$MONKEY_FILE /tmp -/tmp/$MONKEY_FILE m0nk3y $@ +/tmp/$MONKEY_FILE m0nk3y "$@" diff --git a/monkey/monkey_island/linux/install_mongo.sh b/monkey/monkey_island/linux/install_mongo.sh index 478d7e0ed..51091d144 100755 --- a/monkey/monkey_island/linux/install_mongo.sh +++ b/monkey/monkey_island/linux/install_mongo.sh @@ -1,40 +1,58 @@ #!/bin/bash -export os_version_monkey=$(cat /etc/issue) +exists() { + command -v "$1" >/dev/null 2>&1 +} + +os_version_monkey=$(cat /etc/issue) +export os_version_monkey MONGODB_DIR=$1 # If using deb, this should be: /var/monkey/monkey_island/bin/mongodb -if [[ ${os_version_monkey} == "Ubuntu 16.04"* ]] ; -then - echo Detected Ubuntu 16.04 - export tgz_url="https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-3.6.12.tgz" -elif [[ ${os_version_monkey} == "Ubuntu 18.04"* ]] ; -then - echo Detected Ubuntu 18.04 - export tgz_url="https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1804-4.2.0.tgz" -elif [[ ${os_version_monkey} == "Debian GNU/Linux 8"* ]] ; -then - echo Detected Debian 8 - export tgz_url="https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-debian81-3.6.12.tgz" -elif [[ ${os_version_monkey} == "Debian GNU/Linux 9"* ]] ; -then - echo Detected Debian 9 - export tgz_url="https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-debian92-3.6.12.tgz" +if [[ ${os_version_monkey} == "Ubuntu 16.04"* ]]; then + echo Detected Ubuntu 16.04 + export tgz_url="https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-3.6.12.tgz" +elif [[ ${os_version_monkey} == "Ubuntu 18.04"* ]]; then + echo Detected Ubuntu 18.04 + export tgz_url="https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1804-4.2.0.tgz" +elif [[ ${os_version_monkey} == "Debian GNU/Linux 8"* ]]; then + echo Detected Debian 8 + export tgz_url="https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-debian81-3.6.12.tgz" +elif [[ ${os_version_monkey} == "Debian GNU/Linux 9"* ]]; then + echo Detected Debian 9 + export tgz_url="https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-debian92-3.6.12.tgz" else - echo Unsupported OS - exit -1 + echo Unsupported OS + exit 1 fi TEMP_MONGO=$(mktemp -d) -pushd ${TEMP_MONGO} -wget ${tgz_url} -O mongodb.tgz +pushd "${TEMP_MONGO}" || { + echo "Pushd failed" + exit 1 +} + +if exists wget; then + wget ${tgz_url} -O mongodb.tgz +else + if exists curl; then + curl --output mongodb.tgz ${tgz_url} + else + echo 'Your system has neither curl nor wget, exiting' + exit 1 + fi +fi + tar -xf mongodb.tgz -popd +popd || { + echo "popd failed" + exit 1 +} -mkdir -p ${MONGODB_DIR}/bin -mkdir -p ${MONGODB_DIR}/db -cp ${TEMP_MONGO}/mongodb-*/bin/mongod ${MONGODB_DIR}/bin/mongod -cp ${TEMP_MONGO}/mongodb-*/LICENSE-Community.txt ${MONGODB_DIR}/ -chmod a+x ${MONGODB_DIR}/bin/mongod -rm -r ${TEMP_MONGO} +mkdir -p "${MONGODB_DIR}"/bin +mkdir -p "${MONGODB_DIR}"/db +cp "${TEMP_MONGO}"/mongodb-*/bin/mongod "${MONGODB_DIR}"/bin/mongod +cp "${TEMP_MONGO}"/mongodb-*/LICENSE-Community.txt "${MONGODB_DIR}"/ +chmod a+x "${MONGODB_DIR}"/bin/mongod +rm -r "${TEMP_MONGO}" -exit 0 \ No newline at end of file +exit 0 diff --git a/monkey/monkey_island/linux/monkey.sh b/monkey/monkey_island/linux/monkey.sh index d4ebfedbe..ab03e4798 100644 --- a/monkey/monkey_island/linux/monkey.sh +++ b/monkey/monkey_island/linux/monkey.sh @@ -1,7 +1,7 @@ #!/bin/bash -MACHINE_TYPE=`uname -m` -if [ ${MACHINE_TYPE} == 'x86_64' ]; then +MACHINE_TYPE=$(uname -m) +if [ "${MACHINE_TYPE}" == 'x86_64' ]; then # 64-bit stuff here ARCH=64 else @@ -11,4 +11,4 @@ fi MONKEY_FILE=monkey-linux-$ARCH cp -f /var/monkey/monkey_island/cc/binaries/$MONKEY_FILE /tmp -/tmp/$MONKEY_FILE m0nk3y $@ +/tmp/$MONKEY_FILE m0nk3y "$@" diff --git a/monkey/monkey_island/linux/run.sh b/monkey/monkey_island/linux/run.sh index 54e1cdd65..2a5c45bbe 100644 --- a/monkey/monkey_island/linux/run.sh +++ b/monkey/monkey_island/linux/run.sh @@ -2,13 +2,13 @@ # Detecting command that calls python 3.7 python_cmd="" -if [[ `python --version 2>&1` == *"Python 3.7"* ]]; then +if [[ $(python --version 2>&1) == *"Python 3.7"* ]]; then python_cmd="python" fi -if [[ `python37 --version 2>&1` == *"Python 3.7"* ]]; then +if [[ $(python37 --version 2>&1) == *"Python 3.7"* ]]; then python_cmd="python37" fi -if [[ `python3.7 --version 2>&1` == *"Python 3.7"* ]]; then +if [[ $(python3.7 --version 2>&1) == *"Python 3.7"* ]]; then python_cmd="python3.7" fi