You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
osync/dev/tests/sudo_prep.sh

160 lines
4.3 KiB
Bash

#!/usr/bin/env bash
testUser=osyncsudo
testUserHome=/home/osyncsudo
function CreateUser {
local remoteUser"${1}"
local homedir="${2}"
if type getent > /dev/null 2>&1; then
if ! getent passwd | grep "$remoteUser" > /dev/null; then
echo "Manual creation of $remoteUser with homedir $homedir"
if type adduser >/dev/null 2>&1; then
adduser "$remoteUser"
else
echo "Cannot create user $remoteUser. Don't know what tool to use !"
fi
else
echo "It seems that $remoteUser already exists"
fi
elif type dscl > /dev/null 2>&1; then
if ! dscl . -search /Users name $remoteUser | grep "$remoteUser" > /dev/null; then
echo "Manual creation of $remoteUser with homedir $homedir"
dscl . -create /Users/$remoteUser
else
echo "It seems that $remoteUser already exists"
fi
else
echo "Well, I don't know what tool to use to create that user for you"
fi
}
function SetupSSH {
local remoteUser="${1}"
local homedir="${2}"
if [ ! -d "$homedir/.ssh" ]; then
mkdir "$homedir/.ssh"
if [ $? != 0 ]; then
echo "Cannot create [$homedir/.ssh]."
exit 1
fi
fi
chmod 700 "$homedir/.ssh"
if [ $? != 0 ]; then
echo "Cannot chmod [$homedir/.ssh]."
exit 1
fi
chown $remoteUser "$homedir/.ssh"
if [ $? != 0 ]; then
echo "Cannot chown [$homedir/.ssh]."
exit 1
fi
echo -e 'y\n'| ssh-keygen -t rsa -b 2048 -N "" -f "$homedir/.ssh/id_rsa_local"
if ! grep "$(cat $homedir/.ssh/id_rsa_local.pub)" "$homedir/.ssh/authorized_keys"; then
cat "$homedir/.ssh/id_rsa_local.pub" >> "$homedir/.ssh/authorized_keys"
fi
chmod 600 "$homedir/.ssh/authorized_keys"
chown $remoteUser "$homedir/.ssh/authorized_keys"
chown $remoteUser "$homedir/.ssh/id_rsa_local"
chown $remoteUser "$homedir/.ssh/id_rsa_local.pub"
# Add localhost to known hosts so self connect works
if [ -z "$(ssh-keygen -F localhost)" ]; then
ssh-keyscan -H localhost >> "$homedir/.ssh/known_hosts"
fi
if [ -f "$homedir/.ssh/known_hosts" ]; then
chown $remoteUser "$homedir/.ssh/known_hosts"
fi
}
function PrepareSudoers {
local remoteUser="${1}"
local bashPath
local rsyncPath
if ! type bash > /dev/null 2>&1; then
echo "No bash available"
exit 1
else
bashPath=$(type -p bash)
fi
if ! type rsync > /dev/null 2>&1; then
echo "No rsync available"
exit 1
else
rsyncPath=$(type -p rsync)
fi
RemoveSudoers $remoteUser
if [ -f "/etc/sudoers" ]; then
echo "$remoteUser ALL=NOPASSWD:SETENV:$rsyncPath,$bashPath" >> "/etc/sudoers"
echo "Defaults:$remoteUser !requiretty" >> "/etc/sudoers"
elif [ -f "/usr/local/etc/sudoers" ]; then
echo "$remoteUser ALL=NOPASSWD:SETENV:$rsyncPath,$bashPath" >> "/usr/local/etc/sudoers"
echo "Defaults:$remoteUser !requiretty" >> "usr/local/etc/sudoers"
else
echo "No sudoers file found."
echo "copy the following lines to /etc/sudoers (or /usr/local/etc/sudoers) and adjust /usr/bin path to the target system"
echo "$remoteUser ALL=NOPASSWD:SETENV:$rsyncPath,$bashPath"
echo "Defaults:$remoteUser !requiretty"
fi
}
function RemoveUser {
local remoteUser="${1}"
if type rmuser > /dev/null 2>&1; then
rmuser -y $remoteUser
elif type userdel > /dev/null 2>&1; then
userdel -fr $remoteUser
elif type dscl > /dev/null 2>&1; then
dscl . -delete "Users/$remoteUser"
else
echo "Please remove $remoteUser manually"
fi
}
function RemoveSudoers {
local remoteUser="${1}"
if [ -f "/etc/sudoers" ]; then
cp "/etc/sudoers" "/etc/sudoers.old"
grep -v "$remoteUser" "/etc/sudoers.old" > "/etc/sudoers"
elif [ -f "/usr/local/etc/sudoers" ]; then
cp "/usr/local/etc/sudoers" "/usr/local/etc/sudoers.old"
grep -v "$remoteUser" "/usr/local/etc/sudoers.old" > "/usr/local/etc/sudoers"
else
echo "Please remove lines containing $remoteUser from sudoers file manualle"
fi
}
if [ "$1" == "set" ]; then
CreateUser "$testUser" "$testUserHome"
SetupSSH "$testUser" "$testUserHome"
PrepareSudoers "$testUser"
echo ""
echo "Now feel free to run osync sudo test with"
echo "su osyncsudo"
echo "SUDO_EXEC=yes osync.sh --initiator=/home/osyncsudo --target=ssh://osyncsudo@localhost:22//root/osync-tests --rsakey=/home/osyncsudo/.ssh/id_rsa_local"
echo "Don't forget to run $0 unset later"
elif [ "$1" == "unset" ]; then
RemoveUser "$testUser"
RemoveSudoers "$testUser"
else
echo "usage: $0 [set] [unset]"
fi