如何创建一个新的系统用户,另一个系统用户的精确副本(具有相同的组、权限、特权和设置),但具有不同的用户名、密码和主目录?
答案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 用户,所以我会忽略你的无礼。如果您有具体问题,请提出。如果你想做出判断,请继续……这些不是你要找的机器人,这里没什么可看的——我真的不感兴趣。祝你今天过得愉快。