summaryrefslogtreecommitdiffstats
path: root/bin
diff options
context:
space:
mode:
authorWilliam Mantly <wmantly@gmail.com>2019-12-12 16:15:31 -0500
committerBrian May <brian@linuxpenguins.xyz>2019-12-13 08:15:31 +1100
commit69d3f7dc64211d3ab91991cc90865dbf9edcba15 (patch)
tree84d44cc4ea82bbc27fcbc70f3ecd0e6f3127d105 /bin
parent6ad4473c87511bcafaec3d8d0c69dfcb166b48ed (diff)
Auto sudoers file (#269)
* added sudoers options to command line arguments * added sudoers options to command line arguments * template for sudoers file * Added option for GUI sudo * added support for GUI sudo * script for auto adding sudo file * sudoers auto add works and validates * small change * Clean up for CI * removed code that belongs in another PR * added path for package bins * added sudoers bin * added sudoers-add to setup file * fixed issue with sudoers bash script * auto sudoers now works * added --sudoers-no-modify option * bin now works with ./run * removed debug print * Updated sudoers-add script * Fixed error passing sudoers config to script * more dynamic building of sudoers file * added option to specify sudoers.d file name * fixed indent issue * fixed indent issue * indent issue * clean up * formating * docs * fix for flags * Update usage.rst * removed shell=true * cleared CI errors * cleared CI errors * removed random * cleared linter issue * cleared linter issue * cleared linter issue * updated sudoers-add script * safer temp file * moved bin directory * moved bin directory * removed print * fixed spacing issue * sudoers commands must only containe upper case latters
Diffstat (limited to 'bin')
-rwxr-xr-xbin/sudoers-add76
1 files changed, 76 insertions, 0 deletions
diff --git a/bin/sudoers-add b/bin/sudoers-add
new file mode 100755
index 0000000..5bec3d1
--- /dev/null
+++ b/bin/sudoers-add
@@ -0,0 +1,76 @@
+#!/usr/bin/env bash
+# William Mantly <wmantly@gmail.com>
+# MIT License
+# https://github.com/wmantly/sudoers-add
+
+NEWLINE=$'\n'
+CONTENT=""
+ME="$(basename "$(test -L "$0" && readlink "$0" || echo "$0")")"
+
+if [ "$1" == "--help" ] || [ "$1" == "-h" ]; then
+ echo "Usage: $ME [file_path] [sudoers-file-name]"
+ echo "Usage: [content] | $ME sudoers-file-name"
+ echo "This will take a sudoers config validate it and add it to /etc/sudoers.d/{sudoers-file-name}"
+ echo "The config can come from a file, first usage example or piped in second example."
+
+ exit 0
+fi
+
+if [ "$1" == "" ]; then
+ (>&2 echo "This command take at lest one argument. See $ME --help")
+
+ exit 1
+fi
+
+if [ "$2" == "" ]; then
+ FILE_NAME=$1
+ shift
+else
+ FILE_NAME=$2
+fi
+
+if [[ $EUID -ne 0 ]]; then
+ echo "This script must be run as root"
+
+ exit 1
+fi
+
+while read -r line
+do
+ CONTENT+="${line}${NEWLINE}"
+done < "${1:-/dev/stdin}"
+
+if [ "$CONTENT" == "" ]; then
+ (>&2 echo "No config content specified. See $ME --help")
+ exit 1
+fi
+
+if [ "$FILE_NAME" == "" ]; then
+ (>&2 echo "No sudoers file name specified. See $ME --help")
+ exit 1
+fi
+
+# Make a temp file to hold the sudoers config
+umask 077
+TEMP_FILE=$(mktemp)
+echo "$CONTENT" > "$TEMP_FILE"
+
+# Make sure the content is valid
+visudo_STDOUT=$(visudo -c -f "$TEMP_FILE" 2>&1)
+visudo_code=$?
+# The temp file is no longer needed
+rm "$TEMP_FILE"
+
+if [ $visudo_code -eq 0 ]; then
+ echo "$CONTENT" > "/etc/sudoers.d/$FILE_NAME"
+ chmod 0440 "/etc/sudoers.d/$FILE_NAME"
+ echo "The sudoers file /etc/sudoers.d/$FILE_NAME has been successfully created!"
+
+ exit 0
+else
+ echo "Invalid sudoers config!"
+ echo "$visudo_STDOUT"
+
+ exit 1
+fi
+