क्लोन लिनक्स यूजर (कॉपी यूजर, दूसरे के आधार पर)


14

मैं एक नया सिस्टम उपयोगकर्ता कैसे बना सकता हूं, एक दूसरे की सटीक प्रतिलिपि (समान समूह, अनुमतियां, विशेषाधिकार और सेटिंग वाले), लेकिन अलग-अलग उपयोगकर्ता नाम, पासवर्ड और होम निर्देशिका के साथ?


लिनक्स के पास कोई भी कैनोनिकल तरीका नहीं है, आपको एक स्क्रिप्ट लिखनी होगी ....
फ़ारसीगुल्फ

2
एक बार कमांड, स्क्रिप्ट या
हाउटो में

तो मैं आपको जवाब देता हूं ...
फ़ारसीगुल्फ़

जवाबों:


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
स्टीफन गौरीचॉन

इस स्क्रिप्ट को बनाने के लिए धन्यवाद। मेरा सुझाव है कि SRC_GROUPS को इस तरह बदलना SRC_GROUPS=$(id -Gn ${SRC} | sed "s/ /,/g" | sed -r 's/\<'${SRC}'\>\b,?//g') कि आंशिक स्ट्रिंग मैच के विपरीत सटीक उपयोगकर्ता समूह नाम को ठीक से हटा दे। पूर्व। यदि किसी उपयोगकर्ता की आईडी 'pi' है और उपयोगकर्ता के पास 'pi, gpio, spi, आदि' सहित समूह हैं, तो यह केवल 'pi' को हटाएगा, न कि अन्य आंशिक स्ट्रिंग मिलानों को।
फिल

5
  • संपादित करें / आदि / पासवार्ड और उस उपयोगकर्ता की पंक्ति को डुप्लिकेट करें जिसे आप एक सटीक प्रतिलिपि चाहते हैं। लॉगऑन नाम, वास्तविक नाम और होम निर्देशिका को संशोधित करें।
  • संपादित करें / आदि / छाया और फिर से मूल उपयोगकर्ता की लाइन को डुप्लिकेट करें। लॉगऑन नाम को संशोधित करें।
  • अंत passwd newuserमें पासवर्ड को संशोधित करने के लिए निष्पादित करें।

ज्ञात रहे कि सिस्टम वार दोनों यूजर्स एक ही (समान यूआईडी) हैं, इसलिए व्यक्ति दूसरे के होम डायरेक्टरी में प्रवेश कर सकेगा और वसीयत में संशोधन कर सकेगा।


यह लगभग निश्चित रूप से सबसे सरल तरीका है। हालाँकि यह यूआईडी को संशोधित करने के लिए एक अच्छा विचार हो सकता है यदि आप उनके लिए वास्तव में एक ही उपयोगकर्ता होने का इरादा नहीं रखते हैं ...
वाइल्डकार्ड

1
@Wildcard, लेकिन तब यह एक क्लोन नहीं होगा, यह एक नया उपयोगकर्ता होगा और यह कार्य एक सरल के साथ पूरा किया जा सकता है useradd। अब जब मैं इसके बारे में सोचता हूं, तो आप इसे दूसरे तरीके से कर सकते हैं, एक नया उपयोगकर्ता बना सकते हैं useraddऔर फिर UID और GID को संशोधित करके पहले वाले को क्लोन कर सकते हैं।
योइमोसो

3

लिनक्स मिंट 18 मेट के लिए

माइक एंडरसन की स्क्रिप्ट के आधार पर, मैंने एक ऐसा बनाया जो नए उपयोगकर्ता, पुराने उपयोगकर्ता, नए पासवर्ड के बारे में प्रश्न पूछता है, और फिर पुराने उपयोगकर्ता के होम डायरेक्टरी को कॉपी करता है और नए होम डायरेक्टरी में पुराने उपयोगकर्ता के नाम के सभी उदाहरणों को नए के साथ बदल देता है उपयोगकर्ता का नाम।

Useradd लाइन के बारे में मेरी लिपि में मुख्य अंतर यह है कि लिनक्स टकसाल 18 में पासवार्ड विफल रहता है, जिसे चोगवड द्वारा प्रतिस्थापित किया जाता है। काम करने के लिए पासवर्ड प्राप्त करने के लिए मेरे पास एक नई लाइन थी: $ $ नया शब्द: $ 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 के बिना चलने की कोशिश की, स्क्रिप्ट बहुत दूर हो जाती है। Allso "/ home / $ olduser" के लिए grep .bashrc / .zshrc इत्यादि के लिए उपयोगी होगा और चेतावनी दी जाए या $ HOME से बदलने की पेशकश की जाए, तो यह बहुत ही भ्रामक है जब पुराने उपयोगकर्ता के होम डाइरेक्टरी के संदर्भ में रहते हैं
माइक

इसे बनाने के लिए धन्यवाद। मेरा सुझाव है कि olduser_GROUPS को इस तरह से बदलना जो olduser_GROUPS=$(id -Gn ${olduser} | sed "s/ /,/g" | sed -r 's/\<'${olduser}'\>\b,?//g')आंशिक स्ट्रिंग मैच के विपरीत सटीक उपयोगकर्ता समूह नाम को ठीक से हटा देगा। पूर्व। यदि किसी उपयोगकर्ता की आईडी 'pi' है और उपयोगकर्ता के पास 'pi, gpio, spi, आदि' सहित समूह हैं, तो यह केवल 'pi' को हटाएगा, न कि अन्य आंशिक स्ट्रिंग मिलानों को।
फिल

1

जैसा कि आप जानते हैं, यूनिक्स के रूप में यूनिक्स उपयोगकर्ता नाम के लिए नहीं, परीक्षा के लिए: 1001 के रूप में जाना जाने वाला मोहनन या 1001 के रूप में जाना जाने वाला समूह मोहसिन।
आपको एक स्क्रिप्ट लिखना है और निम्न चरणों का पालन करना है:

  1. दिए गए उपयोगकर्ता का यूआईडी और जीआईडी ​​खोजें
  2. इसकी होम डायरेक्टरी खोजें।
  3. उन समूहों को ढूंढें जिनके उपयोगकर्ता उनके सदस्य हैं।
  4. पढ़ें /etc/suduersऔर अपने उपयोगकर्ता की स्थिति।
  5. आपके लिए छिपी हुई फ़ाइलों, लिंक फ़ाइलों, कचरा फ़ाइलों और अपनी मूल मशीन से संबंधित फ़ाइलों के बीच अंतर करना बहुत महत्वपूर्ण है।
  6. पिछली संख्या के अनुसार इसके घर को डुबाना।
  7. अन्य युक्ति जैसे विन्यास और अन्य के अनुसार एक मेटा डाइर क्रेट करें।
  8. scp आपके निशाने पर।
  9. बेशक, होम डिअर के अनकंप्रेस और उपयोग अपने आप में एक बड़ी अवधारणा है।

नोट: स्क्रिप्ट का उपयोग न करें और ऊपर दिए गए नोट्स का उपयोग चरण दर चरण करें। यहां तक ​​कि आप ऊपर भी डाल सकते हैं।


-2

इस कमांड को आज़माएं

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

1
इसका जवाब नहीं है। फोस्टर उपयोगकर्ता को क्लोन करना चाहता है।
फ़ारसीगुल्फ़

यह कोड लिंक और विवरण के बिना चोरी हो गया था!
कीब
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.