Pengguna Clone Linux (salin pengguna, berdasarkan yang lain)

13

Bagaimana saya bisa membuat pengguna sistem baru, salinan persis dari yang lain (memiliki grup, izin, hak istimewa, dan pengaturan yang sama), tetapi dengan nama pengguna, kata sandi, dan direktori home yang berbeda?

Sfisioza
sumber
Linux tidak memiliki cara kanonik, Anda harus menulis skrip ....
PersianGulf
2
Tidak ada perbedaan setelah perintah, skrip atau howto :) Pertanyaannya adalah bagaimana melakukannya :)
Sfisioza
Jadi saya jawab Anda ...
PersianGulf

Jawaban:

9

Script ini akan melakukannya:

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

Ia mendapat grup pengguna sumber (tidak termasuk grup yang sama dengan login mereka) dan shell, kemudian membuat pengguna baru dengan shell yang sama dan grup sekunder.

Usage: clone-user src_user_name new_user_name

Tidak ada pengecekan error, itu hanya skrip klon yang cepat dan kotor.

Mike Anderson
sumber
1
Ya, menarik namun cepat dan kotor: akan gagal jika nama login adalah awalan atau akhiran dari nama grup apa pun. Misalnya login john, salah satu grup adalah johnny. Inilah yang terjadi: SRC=john ; echo "$SRC group1 johnny group3" | sed "s/ ${SRC}//g" | sed "s/ /,/g"Keluaran:john,group1ny,group3
Stéphane Gourichon
Terima kasih telah membuat skrip ini. Saya menyarankan untuk mengubah SRC_GROUPS seperti itu. SRC_GROUPS=$(id -Gn ${SRC} | sed "s/ /,/g" | sed -r 's/\<'${SRC}'\>\b,?//g') Itu akan menghapus nama grup pengguna dengan tepat sebagai lawan pencocokan string parsial. Ex. Jika Id pengguna adalah 'pi' dan pengguna memiliki grup termasuk 'pi, gpio, spi, dll' itu hanya akan menghapus 'pi' dan bukan pencocokan string parsial lainnya.
Phil
5
  • Edit / etc / passwd dan duplikat baris pengguna yang Anda inginkan salinannya. Ubah nama masuk, nama asli dan direktori home.
  • Edit / etc / shadow dan duplikat lagi garis pengguna asli. Ubah nama masuk.
  • Akhirnya jalankan passwd newuseruntuk memodifikasi kata sandi.

Sadarilah bahwa sistem bijaksana kedua pengguna adalah sama (UID yang sama), sehingga seseorang akan dapat masuk ke direktori home yang lain dan memodifikasi sesuka hati.

YoMismo
sumber
Ini hampir pasti cara paling sederhana. Namun mungkin ide yang baik untuk memodifikasi UID juga jika Anda tidak bermaksud agar mereka menjadi pengguna yang sama ....
Wildcard
1
@Wildcard, tapi kemudian itu tidak akan menjadi tiruan, itu akan menjadi pengguna baru dan tugas itu dapat diselesaikan dengan sederhana useradd. Sekarang saya berpikir tentang hal itu, Anda dapat melakukannya sebaliknya, membuat pengguna baru dengan useradddan kemudian memodifikasi UID dan GID untuk mengkloning yang pertama.
YoMismo
3

Untuk Linux Mint 18 Mate

Berdasarkan skrip Mike Anderson, saya membuat satu yang menanyakan pertanyaan tentang pengguna baru, pengguna lama, kata sandi baru, dan kemudian menyalin direktori home pengguna lama dan menggantikan semua contoh nama pengguna lama di direktori home baru dengan yang baru nama pengguna.

Perbedaan utama dalam skrip saya mengenai baris useradd adalah passwd gagal di Linux Mint 18, digantikan oleh chpasswd. Agar kata sandi berfungsi, saya membuat baris baru: echo $ newuser: $ newpassword | chpasswd.

Perbedaan lainnya adalah saya tidak bisa mendapatkan --create-home untuk bekerja jadi saya hanya menggunakan mkdir di baris baru.

Hati-hati jika Anda memiliki direktori home pengguna lama yang besar.

Ambil apa yang kamu butuhkan dan tinggalkan sisanya. Anda bertanggung jawab atas kode apa pun yang Anda salin - buat cadangan!

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

Terima kasih kepada semua orang di dunia yang membantu saya dengan skrip ini. John di Oregon

OregonJohn
sumber
Saran: periksa untuk izin yang benar, saya mencoba menjalankan tanpa sudo pertama kali, skrip menjadi cukup jauh. Allso akan sangat membantu untuk grep .bashrc / .zshrc dll untuk "/ home / $ olduser" dan memperingatkan atau menawarkan untuk mengganti dengan $ HOME jika ditemukan, itu sangat membingungkan ketika referensi ke direktori home pengguna lama tetap ada
Mike
Terima kasih telah membuat ini. Saya menyarankan untuk mengubah olduser_GROUPS seperti itu. olduser_GROUPS=$(id -Gn ${olduser} | sed "s/ /,/g" | sed -r 's/\<'${olduser}'\>\b,?//g')Itu akan menghapus nama grup pengguna dengan tepat sebagai lawan pencocokan string parsial. Ex. Jika Id pengguna adalah 'pi' dan pengguna memiliki grup termasuk 'pi, gpio, spi, dll' itu hanya akan menghapus 'pi' dan bukan pencocokan string parsial lainnya.
Phil
1

Seperti yang Anda ketahui, pengguna Unix sebagai UID bukan nama, Sebagai contoh: mohsen dikenal sebagai 1001 atau grup mohsen yang dikenal sebagai 1001.
Anda harus menulis skrip dan melakukan langkah demi langkah langkah-langkah berikut:

  1. Temukan uid dan gid dari pengguna yang diberikan
  2. Temukan direktori asalnya.
  3. Temukan grup yang menjadi anggota pengguna mereka.
  4. Baca /etc/suduersdan nyatakan pengguna Anda.
  5. Sangat penting bagi Anda untuk membedakan antara file tersembunyi, file tautan, file sampah, dan file yang terkait dengan mesin asli Anda.
  6. Menurut nomor sebelumnya kompres dir home-nya.
  7. Buat sebuah direktori meta sesuai dengan spesifikasi lain seperti konfigurasi dan sebagainya.
  8. scp pada target Anda.
  9. Tentu saja, uncompress dan penggunaan home dir sendiri memiliki konsep besar.

CATATAN: Jangan gunakan skrip dan gunakan catatan di atas langkah demi langkah. Bahkan Anda bisa menyisipkan ke atas.

Teluk Persia
sumber
-2

Coba perintah ini

useradd -N -g gid -G gid2,gid3 -m
Stan
sumber
1
Itu tidak menjawab .oster ingin mengkloning pengguna.
PersianGulf
Kode ini dicuri tanpa tautan dan deskripsi!
kyb