ক্লোন লিনাক্স ব্যবহারকারী (অনুলিপি ব্যবহারকারী, অন্য একের উপর ভিত্তি করে)


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') যা আংশিক স্ট্রিং ম্যাচের বিপরীতে সঠিক ব্যবহারকারী গ্রুপের নামটি যথাযথভাবে সরিয়ে ফেলবে। যাত্রা। যদি কোনও ব্যবহারকারীর আইডি 'পাই' হয় এবং কোনও ব্যবহারকারীর মধ্যে 'পাই, জিপিও, স্পি, ইত্যাদি' সহ গোষ্ঠী থাকে তবে এটি কেবল 'পাই' সরিয়ে ফেলবে, অন্য আংশিক স্ট্রিংয়ের মিলগুলি নয়।
ফিল

5
  • সম্পাদনা / ইত্যাদি / পাসডাব্লুড এবং আপনার সঠিক কপিটি ব্যবহারকারীর লাইনটি নকল করুন। লগনের নাম, আসল নাম এবং হোম ডিরেক্টরিটি সংশোধন করুন।
  • সম্পাদনা / ইত্যাদি / ছায়া এবং আবার মূল ব্যবহারকারীর লাইনটি সদৃশ করুন। লগনের নাম পরিবর্তন করুন।
  • শেষ passwd newuserপর্যন্ত পাসওয়ার্ডটি পরিবর্তন করতে কার্যকর করুন exec

সচেতন হন যে সিস্টেমের ভিত্তিতে উভয় ব্যবহারকারীই একই (একই ইউআইডি), তাই একজন অন্যের হোম ডিরেক্টরিতে প্রবেশ করতে এবং ইচ্ছায় পরিবর্তন করতে সক্ষম হবে।


এটি প্রায় অবশ্যই সহজ উপায়। তবে আপনি যদি একইভাবে তাদের একই ব্যবহারকারী হওয়ার ইচ্ছা না রাখেন তবে ইউআইডি সংশোধন করাও ভাল ধারণা হতে পারে ....
ওয়াইল্ডকার্ড

1
@ উইল্ডকার্ড, তবে তারপরে এটি একটি ক্লোন হবে না, এটি একটি নতুন ব্যবহারকারী হবে এবং সেই কাজটি একটি সাধারণ দ্বারা সম্পাদন করা যেতে পারে useradd। এখন যেহেতু আমি এটি সম্পর্কে ভাবছি, আপনি এটি অন্য উপায়ে করতে পারেন, একটি নতুন ব্যবহারকারী তৈরি করতে পারেন useraddএবং তারপরে প্রথমটির ক্লোন করতে ইউআইডি এবং জিআইডি সংশোধন করতে পারেন।
YoMismo

3

লিনাক্স মিন্টের 18 মেটের জন্য

মাইক অ্যান্ডারসনের স্ক্রিপ্টের উপর ভিত্তি করে, আমি এমন একটি তৈরি করেছি যা নতুন ব্যবহারকারী, পুরানো ব্যবহারকারী, নতুন পাসওয়ার্ড সম্পর্কে প্রশ্ন জিজ্ঞাসা করে এবং তারপরে পুরানো ব্যবহারকারীর হোম ডিরেক্টরিটি অনুলিপি করে এবং নতুন হোম ডিরেক্টরিতে পুরানো ব্যবহারকারীর নামের সমস্ত উদাহরণকে নতুন দিয়ে প্রতিস্থাপন করে ব্যবহারকারীর নাম

ইউজারডড লাইনটি সম্পর্কে আমার স্ক্রিপ্টের মূল পার্থক্যটি হ'ল chpasswd দ্বারা প্রতিস্থাপিত লিনাক্স মিন্ট 18 এ পাসডব্লুড ব্যর্থ হয়। কাজের পাসওয়ার্ড পেতে আমার একটি নতুন লাইন তৈরি হয়েছিল: প্রতিধ্বনি $ নতুন ব্যবহারকারী: $ নতুন পাসওয়ার্ড | chpasswd।

আর একটি পার্থক্য হ'ল আমি কাজ করতে - ক্রিয়েট-হোম পাব না তাই আমি পরিবর্তে একটি নতুন লাইনে এমকিডির ব্যবহার করেছি।

আপনার যদি কোনও বিশাল পুরানো ব্যবহারকারীর হোম ডিরেক্টরি থাকে তবে দেখুন।

আপনার যা প্রয়োজন তা নিন এবং বাকীটি রেখে দিন। আপনার অনুলিপি করা কোনও কোডের জন্য আপনি দায়বদ্ধ - ব্যাকআপ করুন!

#!/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 ছাড়াই চালানোর চেষ্টা করলাম, স্ক্রিপ্টটি বেশ দূরে পেয়ে গেল। Allos "/ home / $ olduser" এর জন্য গ্রেপ .bashrc / .zshrc ইত্যাদিতে সহায়ক এবং সতর্কতা বা যদি পাওয়া যায় তবে replace Home এর সাথে প্রতিস্থাপনের প্রস্তাব দেয় তবে পুরানো ব্যবহারকারীর হোম ডিরেক্টরিতে রেফারেন্স থাকা অবস্থায় খুব বিভ্রান্তিকর হয়
মাইক

এটি তৈরি করার জন্য ধন্যবাদ। আমি olduser_GROUPS পরিবর্তন করার পরামর্শ দিচ্ছি olduser_GROUPS=$(id -Gn ${olduser} | sed "s/ /,/g" | sed -r 's/\<'${olduser}'\>\b,?//g')যা আংশিক স্ট্রিং ম্যাচের বিপরীতে সঠিক ব্যবহারকারী গ্রুপের নামটি যথাযথভাবে সরিয়ে ফেলবে। যাত্রা। যদি কোনও ব্যবহারকারীর আইডি 'পাই' হয় এবং কোনও ব্যবহারকারীর মধ্যে 'পাই, জিপিও, স্পি, ইত্যাদি' সহ গোষ্ঠী থাকে তবে এটি কেবল 'পাই' সরিয়ে ফেলবে, অন্য আংশিক স্ট্রিংয়ের মিলগুলি নয়।
ফিল

1

যেমন আপনি জানেন, ইউআইডি হিসাবে ইউনিক্স ব্যবহারকারী নাম রাখেন না, উদাহরণের জন্য: মোহসেন ১০০১ নামে পরিচিত বা গ্রুপ মোহসেন ১০০১ নামে পরিচিত
You আপনাকে একটি স্ক্রিপ্ট লিখে ধাপে ধাপে নিম্নলিখিত পদক্ষেপগুলি করতে হবে:

  1. প্রদত্ত ব্যবহারকারীর uid এবং গিডটি সন্ধান করুন
  2. এর হোম ডিরেক্টরিটি সন্ধান করুন।
  3. এমন গ্রুপগুলি সন্ধান করুন যার ব্যবহারকারী তাদের সদস্য।
  4. /etc/suduersআপনার ব্যবহারকারীর পড়া এবং স্থিতি।
  5. লুকানো ফাইল, লিঙ্ক ফাইল, আবর্জনা ফাইল এবং আপনার নেটিভ মেশিন সম্পর্কিত ফাইলগুলির মধ্যে পার্থক্য করা আপনার পক্ষে অত্যন্ত গুরুত্বপূর্ণ।
  6. পূর্ববর্তী সংখ্যা অনুযায়ী তার বাড়ির সংকোচনের।
  7. কনফিগারেশন ইত্যাদির মতো অন্যান্য বৈশিষ্ট্য অনুসারে একটি মেটা দির ক্রেট করুন।
  8. scp আপনার টার্গেটে
  9. অবশ্যই, সঙ্কোচিত এবং বাড়ির দির ব্যবহার নিজেই একটি বড় ধারণা রয়েছে।

দ্রষ্টব্য: স্ক্রিপ্টটি ব্যবহার করবেন না এবং উপরে নোটগুলি ধাপে ধাপে ব্যবহার করবেন না। এমনকি আপনি উপরে সন্নিবেশ করতে পারেন।


-2

এই আদেশ ব্যবহার করে দেখুন

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

1
এটি উত্তর নয় os পোস্টার ব্যবহারকারীকে ক্লোন করতে চায়।
ফার্সিগাল্ফ

এই কোডটি লিঙ্ক এবং বিবরণ ছাড়াই চুরি হয়েছিল!
kyb
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.