ผู้ใช้ Clone Linux (คัดลอกผู้ใช้ตามผู้ใช้คนอื่น)


14

ฉันจะสร้างผู้ใช้ระบบใหม่สำเนาที่แน่นอนของผู้อื่น (มีกลุ่มสิทธิ์สิทธิ์และการตั้งค่าเดียวกัน) แต่ด้วยชื่อผู้ใช้รหัสผ่านและไดเรกทอรีบ้านที่แตกต่างกันอย่างไร


ลินุกซ์ไม่ได้มีวิธีการที่ยอมรับใด ๆ คุณต้องเขียนสคริปต์ ....
อ่าวเปอร์เซีย

2
ไม่แตกต่างกันครั้งเดียวคำสั่งสคริปต์หรือ HOWTO :) คำถามคือวิธีการที่จะทำมัน :)
Sfisioza

ดังนั้นฉันจะตอบคุณ ...
PersianGulf

คำตอบ:


9

สคริปต์นี้จะทำ:

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

ไม่มีการตรวจสอบข้อผิดพลาดมันเป็นสคริปต์โคลนที่รวดเร็วและสกปรก


1
ใช่น่าสนใจ แต่รวดเร็วและสกปรก: จะล้มเหลวหากชื่อล็อกอินเป็นคำนำหน้าหรือคำต่อท้ายของชื่อกลุ่มใด ๆ เช่นการเข้าสู่ระบบเป็นหนึ่งในกลุ่มคือjohn johnnyนี่คือสิ่งที่เกิดขึ้น: SRC=john ; echo "$SRC group1 johnny group3" | sed "s/ ${SRC}//g" | sed "s/ /,/g"ผลผลิต:john,group1ny,group3
Stéphane Gourichon

ขอบคุณที่สร้างสคริปต์นี้ ฉันขอแนะนำให้เปลี่ยน SRC_GROUPS เป็นเช่นSRC_GROUPS=$(id -Gn ${SRC} | sed "s/ /,/g" | sed -r 's/\<'${SRC}'\>\b,?//g') นั้นซึ่งจะลบชื่อกลุ่มผู้ใช้ที่ถูกต้องตรงข้ามกับการจับคู่สตริงบางส่วน อดีต หากรหัสของผู้ใช้คือ 'pi' และผู้ใช้มีกลุ่มรวมถึง 'pi, gpio, spi ฯลฯ ' จะลบ 'pi' เท่านั้นและจะไม่ตรงกับสตริงอื่น ๆ บางส่วน
ฟิล

5
  • แก้ไข / etc / passwd และทำซ้ำบรรทัดของผู้ใช้ที่คุณต้องการสำเนาที่แน่นอน ปรับเปลี่ยนชื่อเข้าสู่ระบบชื่อจริงและไดเรกทอรีบ้าน
  • แก้ไข / etc / shadow และทำซ้ำบรรทัดของผู้ใช้เดิมอีกครั้ง ปรับเปลี่ยนชื่อเข้าสู่ระบบ
  • ในที่สุดก็ดำเนินpasswd newuserการแก้ไขรหัสผ่าน

โปรดทราบว่าระบบที่ชาญฉลาดผู้ใช้ทั้งสองจะเหมือนกัน (UID เดียวกัน) ดังนั้นผู้ใช้จะสามารถเข้าสู่โฮมไดเร็กตอรี่ของอีกคนหนึ่งและแก้ไขได้ตามต้องการ


นี่เป็นวิธีที่ง่ายที่สุด อย่างไรก็ตามอาจเป็นความคิดที่ดีที่จะแก้ไข UID เช่นกันหากคุณไม่ต้องการให้พวกเขาเป็นผู้ใช้เดียวกันจริง ๆ...
Wildcard

1
@Wildcard useraddแต่แล้วมันจะไม่เป็นโคลนก็จะเป็นผู้ใช้ใหม่และงานที่สามารถทำได้ด้วยง่าย ตอนนี้ที่ฉันคิดเกี่ยวกับมันคุณสามารถทำได้ในทางอื่น ๆ สร้างผู้ใช้ใหม่ด้วยuseraddแล้วปรับเปลี่ยน UID และ GID เพื่อโคลนคนแรก
YoMismo

3

สำหรับ 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 

ขอบคุณทุกคนในโลกที่ช่วยฉันด้วยสคริปต์นี้ จอห์นในโอเรกอน


คำแนะนำ: ตรวจสอบการอนุญาตที่ถูกต้องฉันลองใช้งานโดยไม่ต้องใช้ sudo ครั้งแรกสคริปต์ทำงานได้ค่อนข้างไกล นอกจากนี้ยังมีประโยชน์ในการ grep .bashrc / .zshrc ฯลฯ สำหรับ "/ home / $ olduser" และเตือนหรือเสนอให้แทนที่ด้วย $ HOME หากพบว่ามันสับสนมากเมื่ออ้างอิงถึงโฮมไดเร็กตอรี่ของผู้ใช้เก่า
Mike

ขอขอบคุณที่สร้างสิ่งนี้ ฉันขอแนะนำให้เปลี่ยน olduser_GROUPS เช่นolduser_GROUPS=$(id -Gn ${olduser} | sed "s/ /,/g" | sed -r 's/\<'${olduser}'\>\b,?//g')นี้ซึ่งจะลบชื่อกลุ่มผู้ใช้ที่ถูกต้องตรงข้ามกับการจับคู่สตริงบางส่วน อดีต หากรหัสของผู้ใช้คือ 'pi' และผู้ใช้มีกลุ่มรวมถึง 'pi, gpio, spi ฯลฯ ' จะลบ 'pi' เท่านั้นและจะไม่ตรงกับสตริงอื่น ๆ บางส่วน
ฟิล

1

อย่างที่คุณทราบผู้ใช้ Unix ที่ไม่ใช่ชื่อ UID สำหรับ exampel: mohsen รู้จักกันในชื่อ 1001 หรือ mohsen กลุ่มที่รู้จักกันเป็น 1001
คุณต้องเขียนสคริปต์และทำตามขั้นตอนต่อไปนี้:

  1. ค้นหา uid และ gid ของผู้ใช้ที่กำหนด
  2. ค้นหาไดเรกทอรีบ้าน
  3. ค้นหากลุ่มที่ผู้ใช้เป็นสมาชิกของกลุ่ม
  4. อ่าน/etc/suduersและระบุผู้ใช้ของคุณ
  5. มันสำคัญมากที่คุณจะต้องแยกแยะความแตกต่างระหว่างไฟล์ที่ซ่อนไฟล์ลิงค์ไฟล์ขยะและไฟล์ที่เกี่ยวข้องกับเครื่องของคุณ
  6. ตามตัวเลขก่อนหน้านี้บีบอัด dir บ้าน
  7. ลัง meta dir ตามข้อกำหนดอื่นเช่นการกำหนดค่าและอื่น ๆ
  8. scp บนเป้าหมายของคุณ
  9. แน่นอนว่าการบีบอัดและการใช้ dir ในบ้านนั้นเป็นแนวคิดที่ยิ่งใหญ่

หมายเหตุ:อย่าใช้สคริปต์และใช้หมายเหตุข้างต้นทีละขั้นตอน แม้คุณสามารถแทรกไปด้านบน


-2

ลองคำสั่งนี้

useradd -N -g gid -G gid2,gid3 -m

1
มันไม่ใช่คำตอบ.Posterต้องการโคลนผู้ใช้
PersianGulf

รหัสนี้ถูกขโมยโดยไม่มีลิงค์และคำอธิบาย!
kyb
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.