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?
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.
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.
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
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:
Temukan uid dan gid dari pengguna yang diberikan
Temukan direktori asalnya.
Temukan grup yang menjadi anggota pengguna mereka.
Baca /etc/suduersdan nyatakan pengguna Anda.
Sangat penting bagi Anda untuk membedakan antara file tersembunyi, file tautan, file sampah, dan file yang terkait dengan mesin asli Anda.
Menurut nomor sebelumnya kompres dir home-nya.
Buat sebuah direktori meta sesuai dengan spesifikasi lain seperti konfigurasi dan sebagainya.
scp pada target Anda.
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.
Jawaban:
Script ini akan melakukannya:
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.
Tidak ada pengecekan error, itu hanya skrip klon yang cepat dan kotor.
sumber
john
, salah satu grup adalahjohnny
. Inilah yang terjadi:SRC=john ; echo "$SRC group1 johnny group3" | sed "s/ ${SRC}//g" | sed "s/ /,/g"
Keluaran:john,group1ny,group3
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.passwd newuser
untuk 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.
sumber
useradd
. Sekarang saya berpikir tentang hal itu, Anda dapat melakukannya sebaliknya, membuat pengguna baru denganuseradd
dan kemudian memodifikasi UID dan GID untuk mengkloning yang pertama.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!
Terima kasih kepada semua orang di dunia yang membantu saya dengan skrip ini. John di Oregon
sumber
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.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:
/etc/suduers
dan nyatakan pengguna Anda.scp
pada target Anda.CATATAN: Jangan gunakan skrip dan gunakan catatan di atas langkah demi langkah. Bahkan Anda bisa menyisipkan ke atas.
sumber
Coba perintah ini
sumber