More improvements to rename-user.sh
This commit is contained in:
parent
41a0592f20
commit
3612787274
@ -3,6 +3,16 @@
|
|||||||
# Renames a user
|
# Renames a user
|
||||||
# Required arguments: old user name, new user name
|
# Required arguments: old user name, new user name
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
question() {
|
||||||
|
echo
|
||||||
|
echo "$@"
|
||||||
|
read -r answer
|
||||||
|
answer="${answer:0:1}"
|
||||||
|
answer="${answer^}"
|
||||||
|
}
|
||||||
|
|
||||||
if [[ $# -ne 2 ]]; then
|
if [[ $# -ne 2 ]]; then
|
||||||
echo "Usage: $0 old-user new-user"
|
echo "Usage: $0 old-user new-user"
|
||||||
exit 1
|
exit 1
|
||||||
@ -20,13 +30,11 @@ fi
|
|||||||
# Make sure old user is not logged in
|
# Make sure old user is not logged in
|
||||||
if pgrep -u "$oldUser" >/dev/null; then
|
if pgrep -u "$oldUser" >/dev/null; then
|
||||||
echo "The user $oldUser is currently logged in or has running processes. Cannot continue."
|
echo "The user $oldUser is currently logged in or has running processes. Cannot continue."
|
||||||
echo "Would you like to forcibly log out $oldUser? (Y/N)"
|
question "Would you like to forcibly log out $oldUser? (Y/N)"
|
||||||
read -r answer
|
|
||||||
answer="${answer:0:1}"
|
|
||||||
answer="${answer^}"
|
|
||||||
if [[ "$answer" != "Y" ]]; then
|
if [[ "$answer" != "Y" ]]; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
systemctl stop display-manager
|
||||||
loginctl terminate-user "$oldUser"
|
loginctl terminate-user "$oldUser"
|
||||||
sleep 2
|
sleep 2
|
||||||
if pgrep -u "$oldUser" >/dev/null; then
|
if pgrep -u "$oldUser" >/dev/null; then
|
||||||
@ -48,17 +56,20 @@ if ! [[ "$newUser" =~ ^[a-z_][a-z0-9_-]{0,31}$ ]]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Passed all safety checks, proceed with the rename
|
# Passed all safety checks, proceed with the rename
|
||||||
|
echo "Renaming $oldUser to $newUser..."
|
||||||
groups=$(id -nG "$oldUser")
|
groups=$(id -nG "$oldUser")
|
||||||
groups="${groups// /,}"
|
groups="${groups// /,}"
|
||||||
usermod -G "$groups" -m -d "/home/$newUser" -l "$newUser" "$oldUser"
|
usermod -G "$groups" -m -d "/home/$newUser" -l "$newUser" "$oldUser"
|
||||||
|
|
||||||
# Update nodm.conf if it exists
|
# Update nodm.conf if it exists
|
||||||
if [[ -e /etc/nodm.conf ]]; then
|
if [[ -e /etc/nodm.conf ]]; then
|
||||||
|
echo "Updating /etc/nodm.conf..."
|
||||||
sed -i -e "s#^NODM_USER=.*#NODM_USER='$newUser'#" -e "s#^NODM_XSESSION=.*#NODM_XSESSION='/home/$newUser/.xinitrc'#" /etc/nodm.conf
|
sed -i -e "s#^NODM_USER=.*#NODM_USER='$newUser'#" -e "s#^NODM_XSESSION=.*#NODM_XSESSION='/home/$newUser/.xinitrc'#" /etc/nodm.conf
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Copy over crontab if it exists
|
# Copy over crontab if it exists
|
||||||
if crontab -u "$oldUser" -l >/tmp/${oldUser}_crontab.bak 2>/dev/null; then
|
if crontab -u "$oldUser" -l >/tmp/${oldUser}_crontab.bak 2>/dev/null; then
|
||||||
|
echo "Copying over crontab..."
|
||||||
if crontab -u "$newUser" "/tmp/${oldUser}_crontab.bak"; then
|
if crontab -u "$newUser" "/tmp/${oldUser}_crontab.bak"; then
|
||||||
rm "/tmp/${oldUser}_crontab.bak"
|
rm "/tmp/${oldUser}_crontab.bak"
|
||||||
else
|
else
|
||||||
@ -69,18 +80,24 @@ fi
|
|||||||
|
|
||||||
# Update linger
|
# Update linger
|
||||||
if [[ -e "/var/lib/systemd/linger/$oldUser" ]]; then
|
if [[ -e "/var/lib/systemd/linger/$oldUser" ]]; then
|
||||||
|
echo "Enabling linger..."
|
||||||
mv "/var/lib/systemd/linger/$oldUser" "/var/lib/systemd/linger/$newUser"
|
mv "/var/lib/systemd/linger/$oldUser" "/var/lib/systemd/linger/$newUser"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Optionally update files in new home directory
|
# Optionally update files in new home directory
|
||||||
|
echo
|
||||||
echo "Would you like to search for references to $oldUser and update them to $newUser in files located in /home/$newUser?"
|
echo "Would you like to search for references to $oldUser and update them to $newUser in files located in /home/$newUser?"
|
||||||
echo "This can take a while. (Y/N)"
|
question "This can take a while. (Y/N)"
|
||||||
read -r answer
|
|
||||||
answer="${answer:0:1}"
|
|
||||||
answer="${answer^}"
|
|
||||||
if [[ "$answer" == "Y" ]]; then
|
if [[ "$answer" == "Y" ]]; then
|
||||||
find "/home/$newUser" -type f -exec sed -i "s|$oldUser|$newUser|g" "{}" \;
|
echo "Updating files..."
|
||||||
|
find "/home/$newUser" -type f -exec grep -Iq . "{}" \; -and -exec sed -i "s|$oldUser|$newUser|g" "{}" \;
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "Rename complete. The user, $newUser, is now available."
|
||||||
|
question "Would you like to reboot?"
|
||||||
|
if [[ "${answer}" == "Y" ]]; then
|
||||||
|
reboot
|
||||||
fi
|
fi
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
|
Loading…
x
Reference in New Issue
Block a user