prototype password management methods
authorChris Koeritz <fred@gruntose.com>
Wed, 7 Feb 2018 20:24:10 +0000 (15:24 -0500)
committerChris Koeritz <fred@gruntose.com>
Wed, 7 Feb 2018 20:24:10 +0000 (15:24 -0500)
used for getting the mysql password in the revamp script, reading it from cmd line as well as storing for later use.

scripts/security/password_functions.sh [new file with mode: 0644]
scripts/site_avenger/revamp_cakelampvm.sh

diff --git a/scripts/security/password_functions.sh b/scripts/security/password_functions.sh
new file mode 100644 (file)
index 0000000..0840931
--- /dev/null
@@ -0,0 +1,70 @@
+#!/bin/bash
+
+# a set of useful functions for managing operations with passwords.
+# a set of very simple operations, but the file needs to be protected from
+# undesirable access.  a good way to do that is to make the file owned by
+# root, and for it to have permssions of "600" (full access by owner only),
+# and to only try to read the password file when in sudo mode.  the first
+# two requirements are done automatically by the store_password function.
+
+# load_password:
+# provides a way to read a password out of a file.
+# the return value is an echoed password, so this method should always be
+# called from within a subshell, e.g.:
+#    mypass="$(load_password /etc/glorp/secret_passcode)"
+# the returned echo will be blank if the function failed.
+function load_password()
+{
+  local passfile="$1"; shift
+  if [ -z "$passfile" ]; then
+    echo 'The load_password function needs a filename to read the password from.'
+    return 1
+  fi
+  local passwd
+  read passwd < "$passfile"
+  echo "$passwd"
+}
+
+# stores a password into a password file.  the password file should be the
+# first parameter and the password should be the second.
+# this makes sure that only root can read the file.
+function store_password()
+{
+  local passfile="$1"; shift
+  local passwd="$1"; shift
+  if [ -z "$passfile" -o -z "$passwd" ]; then
+    echo '
+The store_password function needs (1) the file to store the password into,
+and (2) the password that should be stored.
+'
+    return 1
+  fi
+
+  echo "$passwd" > "$passfile"
+  test_or_die "writing password into the file $passfile"
+
+  chown root:root "$passfile"
+  test_or_die "chowning the password file to root ownership for: $passfile"
+
+  chmod 600 "$passfile"
+  test_or_die "restricting permissions on password file for: $passfile"
+}
+
+# reads a password from the console, without echoing the letters when they
+# are typed.  the prompt to show the user is required as the first parameter.
+# the password read in is returned as an echo, like load_password above.
+function read_password()
+{
+  prompt="$1"; shift
+  echo -n "$prompt "
+  # turn off echo but remember former setting.
+  stty_orig=`stty -g`
+  stty -echo
+  read the_passwd
+  # turn echo back on.
+  stty $stty_orig
+  # return the password as an echo.
+  echo "$the_passwd"
+}
+
+
index fe09c4d5dbd6bd914755699697b978f697e9e496..c5cf860f2a83ad237239bb5dbd86e60851b7a4b6 100644 (file)
@@ -16,21 +16,30 @@ export FEISTY_MEOW_APEX="$( \cd "$WORKDIR/../.." && \pwd )"
 
 export NO_HELLO=right
 source "$FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh"
+# load dependencies for our script.
 source "$FEISTY_MEOW_SCRIPTS/system/common_sysadmin.sh"
+source "$FEISTY_MEOW_SCRIPTS/security/password_functions.sh"
 
 ##############
 
-# new requirement is to get the sql root password, since we need to do some sql db configuration.
-echo -n "Please enter the MySQL root account password: "
-# turn off echo but remember former setting.
-stty_orig=`stty -g`
-stty -echo
-read mysql_passwd
-# turn echo back on.
-stty $stty_orig
+# new requirement to have the sql root password, since we need to do some sql db configuration.
+
+mysql_passwd="$(load_password /etc/mysql/secret_password)"
+if [ -z "$mysql_password" ]; then
+  mysql_password="$(read_password "Please enter the MySQL root account password:")"
+#  echo -n "Please enter the MySQL root account password: "
+#  # turn off echo but remember former setting.
+#  stty_orig=`stty -g`
+#  stty -echo
+#  read mysql_passwd
+#  # turn echo back on.
+#  stty $stty_orig
+fi
 if [ -z "$mysql_passwd" ]; then
   echo "This script must have the sql root password to proceed."
   exit 1
+else
+  store_password /etc/mysql/secret_password "$mysql_password"
 fi
 
 ##############