2022-02-21 11:54:03 -08:00
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
# clone a user
|
|
|
|
|
|
|
|
function clone_user_ () {
|
|
|
|
|
2022-03-28 10:02:17 -07:00
|
|
|
module_load confirm
|
|
|
|
|
|
|
|
echo "============="
|
|
|
|
echo "this script will create a new user"
|
|
|
|
echo "based on an existing user's data"
|
|
|
|
echo
|
|
|
|
echo "You will be shown a list of users who can currently log on"
|
|
|
|
echo "Remember which user you would like to clone."
|
|
|
|
echo "You will be asked for the new user's name, their password"
|
|
|
|
echo "and the old user to clone".
|
|
|
|
echo "============="
|
|
|
|
echo
|
|
|
|
|
|
|
|
echo -n "New user's name: "
|
|
|
|
read newuser
|
|
|
|
|
|
|
|
echo -n "New user's password: "
|
|
|
|
read newpassword
|
|
|
|
|
|
|
|
echo
|
|
|
|
|
|
|
|
echo "Current users you can clone:"
|
|
|
|
echo "----"
|
|
|
|
awk -F'[/:]' '{if ($3 >= 1000 && $3 != 65534) print $1}' /etc/passwd
|
|
|
|
echo
|
|
|
|
|
|
|
|
echo -n "Old user to clone: "
|
|
|
|
read olduser
|
|
|
|
echo "olduser uid is $(id -u $olduser)"
|
|
|
|
|
|
|
|
echo
|
|
|
|
echo "You have selected: "
|
|
|
|
echo "----"
|
|
|
|
echo "new user: $newuser"
|
|
|
|
echo "new user password: $newpassword"
|
|
|
|
echo "old user: $olduser"
|
|
|
|
echo
|
|
|
|
|
|
|
|
olduser_GROUPS="$(id -Gn ${olduser} | sed "s/${olduser} //g" | sed "s/ ${olduser}//g" | sed "s/ /,/g"),$olduser"
|
|
|
|
olduser_SHELL=$(awk -F : -v name=${olduser} '(name == $1) { print $7 }' /etc/passwd)
|
|
|
|
|
|
|
|
echo "old user groups: "
|
|
|
|
echo "----"
|
|
|
|
echo $olduser_GROUPS
|
|
|
|
echo "olduser shell: "
|
|
|
|
echo $olduser_SHELL
|
|
|
|
|
|
|
|
confirm "ready to clone user, begin?" || return 1
|
|
|
|
|
|
|
|
useradd --groups $olduser_GROUPS --shell $olduser_SHELL $newuser
|
|
|
|
|
|
|
|
echo $newuser:$newpassword | chpasswd
|
|
|
|
|
|
|
|
read -rsp $'ready to make home direcoty -- ctrl-c to exit...\n' -n1 key
|
|
|
|
|
|
|
|
mkdir /home/$newuser
|
|
|
|
chown -R $newuser:$newuser /home/$newuser
|
|
|
|
|
|
|
|
echo
|
|
|
|
echo "Script should be done now."
|
|
|
|
echo
|
|
|
|
echo "Do you see your new users name below?"
|
|
|
|
echo
|
|
|
|
awk -F'[/:]' '{if ($3 >= 1000 && $3 != 65534) print $1}' /etc/passwd
|
|
|
|
|
|
|
|
echo
|
|
|
|
echo "We are now going to copy the old user's home folder to the new user"
|
|
|
|
echo "then change ownership to the new user"
|
|
|
|
echo
|
|
|
|
read -rsp $'Ready to copy home folder --- or ctrl-c to exit...\n' -n1 key
|
|
|
|
|
|
|
|
rsync -aPv --exclude 'Downloads' /home/$olduser/. /home/$newuser/
|
|
|
|
chown -R --from=$olduser $newuser:$newuser /home/$newuser
|
|
|
|
|
|
|
|
echo
|
|
|
|
echo "Now we are going to change the names of files and folders to the new user"
|
|
|
|
echo
|
|
|
|
|
|
|
|
grep -rlI $olduser /home/$newuser/ . | sudo xargs sed -i 's/$olduser/$newuser/g'
|
|
|
|
|
|
|
|
echo
|
|
|
|
echo "Done now."
|
|
|
|
echo
|
|
|
|
read -rsp $'Press any key to exit...\n' -n1 key
|
|
|
|
echo
|
|
|
|
echo
|
2022-02-21 11:54:03 -08:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
clone_user () {
|
2022-03-28 10:02:17 -07:00
|
|
|
if [[ $EUID != 0 ]]; then
|
|
|
|
|
|
|
|
clone=$(declare -f clone_user_)
|
|
|
|
module_load confirm
|
|
|
|
confirm=$(declare -f confirm)
|
|
|
|
sudo bash -c "$confirm; $clone; clone_user_"
|
|
|
|
else
|
|
|
|
echo run as regular user with sudo privliges and it will elevate
|
|
|
|
fi
|
2022-02-21 11:54:03 -08:00
|
|
|
}
|
|
|
|
|
2022-03-28 10:02:17 -07:00
|
|
|
rename_user () {
|
|
|
|
|
|
|
|
module_load confirm
|
|
|
|
local force; local name; local newname; local newhome
|
|
|
|
|
|
|
|
[[ $1 = "-f" ]] && { force=true; shift 1; }
|
|
|
|
[[ $1 = "-h" ]] && { newhome=$2; shift 2; }
|
|
|
|
# usage: < -f, -h newhome > name newname
|
|
|
|
# default new user home is /home/newname
|
|
|
|
name=$1
|
|
|
|
newname=$2
|
|
|
|
if [[ ! ($name && $newname) ]]; then
|
|
|
|
echo "============="
|
|
|
|
echo "this script will rename an existing user"
|
|
|
|
echo "user running this script must to root or have sudo priviledges to run"
|
|
|
|
echo "---- Available Users to Rename ---"
|
|
|
|
awk -F'[/:]' '{if ($3 >= 1000 && $3 != 65534) print $1}' /etc/passwd
|
|
|
|
echo "============="
|
|
|
|
read -r -p "Enter an available user name: " name
|
|
|
|
read -r -p "Enter users new name: " newname
|
|
|
|
read -r -p "Enter users new home directory <enter for default /home/$newname>: " newhome
|
|
|
|
fi
|
|
|
|
|
|
|
|
newhome=${newhome:-/home/$newname}
|
|
|
|
|
|
|
|
if [[ ! $force ]]; then
|
|
|
|
echo "Changing $name to $newname with home $newhome"
|
|
|
|
echo sudo usermod -l $newname $name
|
|
|
|
echo sudo groupmod -n $newname $name
|
|
|
|
echo sudo usermod --d $newhome --m $name
|
|
|
|
confirm -s "These are the commands that will be run. Do you want to continue?" || return 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
sudo usermod -l $newname $name
|
|
|
|
echo sudo groupmod -n $newname $name
|
|
|
|
echo sudo usermod --d $newhome --m $name
|
|
|
|
}
|