ฉันจะสร้างผู้ใช้ระบบใหม่สำเนาที่แน่นอนของผู้อื่น (มีกลุ่มสิทธิ์สิทธิ์และการตั้งค่าเดียวกัน) แต่ด้วยชื่อผู้ใช้รหัสผ่านและไดเรกทอรีบ้านที่แตกต่างกันอย่างไร
ฉันจะสร้างผู้ใช้ระบบใหม่สำเนาที่แน่นอนของผู้อื่น (มีกลุ่มสิทธิ์สิทธิ์และการตั้งค่าเดียวกัน) แต่ด้วยชื่อผู้ใช้รหัสผ่านและไดเรกทอรีบ้านที่แตกต่างกันอย่างไร
คำตอบ:
สคริปต์นี้จะทำ:
#!/bin/bash
SRC=$1
DEST=$2
SRC_GROUPS=$(id -Gn ${SRC} | sed "s/${SRC} //g" | sed "s/ ${SRC}//g" | sed "s/ /,/g")
SRC_SHELL=$(awk -F : -v name=${SRC} '(name == $1) { print $7 }' /etc/passwd)
useradd --groups ${SRC_GROUPS} --shell ${SRC_SHELL} --create-home ${DEST}
passwd ${DEST}
ได้รับกลุ่มผู้ใช้แหล่งที่มา (ไม่รวมกลุ่มที่เหมือนกันกับการเข้าสู่ระบบ) และเชลล์จากนั้นสร้างผู้ใช้ใหม่ที่มีเชลล์และกลุ่มรองเดียวกัน
Usage: clone-user src_user_name new_user_name
ไม่มีการตรวจสอบข้อผิดพลาดมันเป็นสคริปต์โคลนที่รวดเร็วและสกปรก
john
johnny
นี่คือสิ่งที่เกิดขึ้น: SRC=john ; echo "$SRC group1 johnny group3" | sed "s/ ${SRC}//g" | sed "s/ /,/g"
ผลผลิต:john,group1ny,group3
SRC_GROUPS=$(id -Gn ${SRC} | sed "s/ /,/g" | sed -r 's/\<'${SRC}'\>\b,?//g')
นั้นซึ่งจะลบชื่อกลุ่มผู้ใช้ที่ถูกต้องตรงข้ามกับการจับคู่สตริงบางส่วน อดีต หากรหัสของผู้ใช้คือ 'pi' และผู้ใช้มีกลุ่มรวมถึง 'pi, gpio, spi ฯลฯ ' จะลบ 'pi' เท่านั้นและจะไม่ตรงกับสตริงอื่น ๆ บางส่วน
passwd newuser
การแก้ไขรหัสผ่านโปรดทราบว่าระบบที่ชาญฉลาดผู้ใช้ทั้งสองจะเหมือนกัน (UID เดียวกัน) ดังนั้นผู้ใช้จะสามารถเข้าสู่โฮมไดเร็กตอรี่ของอีกคนหนึ่งและแก้ไขได้ตามต้องการ
useradd
แต่แล้วมันจะไม่เป็นโคลนก็จะเป็นผู้ใช้ใหม่และงานที่สามารถทำได้ด้วยง่าย ตอนนี้ที่ฉันคิดเกี่ยวกับมันคุณสามารถทำได้ในทางอื่น ๆ สร้างผู้ใช้ใหม่ด้วยuseradd
แล้วปรับเปลี่ยน UID และ GID เพื่อโคลนคนแรก
สำหรับ Linux Mint 18 Mate
จากสคริปต์ของ Mike Anderson ฉันสร้างคำถามที่ถามเกี่ยวกับผู้ใช้ใหม่ผู้ใช้เก่ารหัสผ่านใหม่แล้วคัดลอกโฮมไดเรกทอรีของผู้ใช้เก่าและแทนที่ทุกกรณีของชื่อผู้ใช้เก่าในโฮมไดเรกทอรีใหม่ด้วยใหม่ ชื่อผู้ใช้
ข้อแตกต่างที่สำคัญในสคริปต์ของฉันเกี่ยวกับบรรทัด useradd คือ passwd ล้มเหลวใน Linux Mint 18 แทนที่ด้วย chpasswd ในการรับรหัสผ่านให้ทำงานฉันได้สร้างบรรทัดใหม่: echo $ newuser: $ newpassword | chpasswd
ความแตกต่างอีกอย่างคือฉันไม่สามารถสร้างบ้านให้ทำงานได้ดังนั้นฉันจึงใช้ 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
ขอบคุณทุกคนในโลกที่ช่วยฉันด้วยสคริปต์นี้ จอห์นในโอเรกอน
olduser_GROUPS=$(id -Gn ${olduser} | sed "s/ /,/g" | sed -r 's/\<'${olduser}'\>\b,?//g')
นี้ซึ่งจะลบชื่อกลุ่มผู้ใช้ที่ถูกต้องตรงข้ามกับการจับคู่สตริงบางส่วน อดีต หากรหัสของผู้ใช้คือ 'pi' และผู้ใช้มีกลุ่มรวมถึง 'pi, gpio, spi ฯลฯ ' จะลบ 'pi' เท่านั้นและจะไม่ตรงกับสตริงอื่น ๆ บางส่วน
อย่างที่คุณทราบผู้ใช้ Unix ที่ไม่ใช่ชื่อ UID สำหรับ exampel: mohsen รู้จักกันในชื่อ 1001 หรือ mohsen กลุ่มที่รู้จักกันเป็น 1001
คุณต้องเขียนสคริปต์และทำตามขั้นตอนต่อไปนี้:
/etc/suduers
และระบุผู้ใช้ของคุณscp
บนเป้าหมายของคุณหมายเหตุ:อย่าใช้สคริปต์และใช้หมายเหตุข้างต้นทีละขั้นตอน แม้คุณสามารถแทรกไปด้านบน
ลองคำสั่งนี้
useradd -N -g gid -G gid2,gid3 -m