克隆Linux用户(复制用户,基于另一个用户)

克隆Linux用户(复制用户,基于另一个用户)

如何创建一个新的系统用户,另一个系统用户的精确副本(具有相同的组、权限、特权和设置),但具有不同的用户名、密码和主目录?

答案1

该脚本将执行此操作(根据评论更新):

#!/bin/bash
SRC=$1
DEST=$2

SRC_GROUPS=$(id -Gn ${SRC} | sed "s/ /,/g" | sed -r 's/\<'${SRC}'\>\b,?//g')
SRC_SHELL=$(awk -F : -v name=${SRC} '(name == $1) { print $7 }' /etc/passwd)

sudo useradd --groups ${SRC_GROUPS} --shell ${SRC_SHELL} --create-home ${DEST}
sudo passwd ${DEST}

它获取源用户的组(不包括与其登录名相同的组)和 shell,然后创建具有相同 shell 和辅助组的新用户。

Usage: clone-user src_user_name new_user_name

没有错误检查,它只是一个快速而肮脏的克隆脚本。

答案2

  • 编辑 /etc/passwd 并复制您想要精确副本的用户行。修改登录名、真实姓名和主目录。
  • 编辑 /etc/shadow 并再次复制原始用户的行。修改登录名。
  • 最后执行passwd newuser修改密码。

请注意,系统方面两个用户是相同的(相同的 UID),因此一个用户将能够进入另一个用户的主目录并随意修改。

答案3

适用于 Linux Mint 18 Mate

根据 Mike Anderson 的脚本,我制作了一个询问有关新用户、旧用户、新密码的问题,然后复制旧用户的主目录,并将新主目录中旧用户名的所有实例替换为新用户名的实例。用户名。

我的脚本中关于 useradd 行的主要区别是 passwd 在 Linux Mint 18 中失败,被 chpasswd 取代。为了让密码起作用,我创建了一个新行: echo $newuser:$newpassword | chpasswd。

另一个区别是我无法让 --create-home 工作,所以我只是在新行中使用 mkdir 。

请注意您是否有一个巨大的旧用户主目录。

拿走你需要的,留下其余的。您对您复制的任何代码负责——做好备份!

#!/bin/bash

# clone a user
# usage:
# if you named this as below then
# change to the directory and run this command
# sudo bash clone-user.sh

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 
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_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
read -rsp $'Press any key to continue or ctrl-c to exit...\n' -n1 key

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 /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 

感谢世界上所有帮助我完成这个脚本的人。约翰在俄勒冈州

答案4

/usr/local/bin/clone-usermod

#!/bin/bash
SRC=$1
DEST=$2

SRC_GROUPS=$(id -Gn ${SRC} | sed "s/ /,/g" | sed -r 's/\<'${SRC}'\>\b,?//g')
#SRC_SHELL=$(awk -F : -v name=${SRC} '(name == $1) { print $7 }' /etc/passwd)

usermod --groups ${SRC_GROUPS}  $2

PS 无论是谁输入了 /user/local/bin/clone-usermod - 它都会被列为“代码”,以便人们知道创建所需的文件。我也没有表明您必须使该文件可执行。您显然没有阅读具体的路径,而不是拼写错误。因此,你不是一个知情的 Linux 用户,所以我会忽略你的无礼。如果您有具体问题,请提出。如果你想做出判断,请继续……这些不是你要找的机器人,这里没什么可看的——我真的不感兴趣。祝你今天过得愉快。

相关内容