Linux kullanıcısını klonla (başka birine dayalı kullanıcı kopyala)


14

Yeni bir sistem kullanıcısı, başka bir kullanıcının tam kopyası (aynı gruplara, izinlere, ayrıcalıklara ve ayarlara sahip), ancak farklı kullanıcı adı, şifre ve giriş diziniyle nasıl oluşturabilirim?


Linux herhangi bir kanonik yolu yoktur, bir senaryo yazmak zorunda ....
PersianGulf

2
Komut, komut dosyası veya howto bir kez fark yok :) Soru nasıl yapılacağı :)
Sfisioza

Bu yüzden size cevap veriyorum ...
PersianGulf

Yanıtlar:


9

Bu script bunu yapacak:

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

Kaynak kullanıcı gruplarını (oturum açma işlemleriyle aynı olan grubu içermez) ve kabuğunu alır, ardından aynı kabuk ve ikincil gruplarla yeni bir kullanıcı oluşturur.

Usage: clone-user src_user_name new_user_name

Hata kontrolü yok, sadece hızlı ve kirli bir klon betiği.


1
Evet, ilginç ancak hızlı ve kirli: bir giriş adı herhangi bir grup adının öneki veya son eki ise başarısız olur. Örneğin, giriş johngruplardan biridir johnny. İşte olanlar: SRC=john ; echo "$SRC group1 johnny group3" | sed "s/ ${SRC}//g" | sed "s/ /,/g"Çıktı:john,group1ny,group3
Stéphane Gourichon

Bu komut dosyasını oluşturduğunuz için teşekkürler. SRC_GROUPS bu SRC_GROUPS=$(id -Gn ${SRC} | sed "s/ /,/g" | sed -r 's/\<'${SRC}'\>\b,?//g') şekilde değiştirmenizi öneririm Bu, kısmi bir dize eşleşmesinin aksine tam kullanıcı grubu adını düzgün bir şekilde kaldıracaktır. Ör. Bir kullanıcının kimliği 'pi' ise ve kullanıcının 'pi, gpio, spi vb.' İçeren grupları varsa, diğer kısmi dize eşleşmelerini değil, yalnızca 'pi'yi kaldırır.
Phil

5
  • / Etc / passwd dosyasını düzenleyin ve tam kopyasını almak istediğiniz kullanıcının satırını çoğaltın. Oturum açma adını, gerçek adı ve giriş dizinini değiştirin.
  • / Etc / shadow öğesini düzenleyin ve orijinal kullanıcının satırını tekrarlayın. Oturum açma adını değiştirin.
  • Son olarak passwd newuserparolayı değiştirmek için çalıştırın .

Sistem bilgisinin her iki kullanıcının da aynı (aynı UID) olduğunu unutmayın, böylece biri diğerinin ana dizinine girebilir ve istediği zaman değiştirebilir.


Bu neredeyse kesinlikle en basit yoldur. Ancak, aynı kullanıcı olmalarını istemiyorsanız UID'yi değiştirmek de iyi bir fikir olabilir ....
Wildcard

1
@Wildcard, ancak daha sonra bir klon olmaz, yeni bir kullanıcı olur ve bu görev basit bir şekilde gerçekleştirilebilir useradd. Şimdi düşündüğüme göre, bunu başka bir şekilde yapabilir, yeni bir kullanıcı oluşturabilir useraddve daha sonra ilkini klonlamak için UID ve GID'yi değiştirebilirsiniz.
YoMismo

3

Linux Mint 18 Mate için

Mike Anderson'ın senaryosuna dayanarak, yeni kullanıcı, eski kullanıcı, yeni şifre hakkında sorular soran ve daha sonra eski kullanıcının ana dizinini kopyalayan ve yeni ana dizindeki eski kullanıcının adının tüm örneklerini yeni kullanıcının adı.

Komut dosyamda useradd satırı ile ilgili temel fark, parolaların Linux Mint 18'de başarısız olması ve bunun yerine chpasswd kullanılması. Şifre çalışmak için yeni bir satır oluşturmak vardı: echo $ newuser: $ newpassword | chpasswd.

Başka bir fark, --create-home'u çalıştıramadım, bu yüzden mkdir'i yeni bir satırda kullandım.

Eski bir kullanıcının ana dizininiz olup olmadığına dikkat edin.

İhtiyacınız olanı alın ve gerisini bırakın. Kopyaladığınız kodlardan siz sorumlusunuz - yedekleyin!

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

Dünyadaki bu senaryoda bana yardımcı olan herkese teşekkürler. John Oregon


Öneriler: doğru izinleri kontrol edin, ilk kez sudo olmadan çalışmayı denedim, komut dosyası oldukça uzağa gitti. Ayrıca, "/ home / $ olduser" için .bashrc / .zshrc vb. Grep yardımcı olur ve bulursanız uyarır veya $ HOME ile değiştirmeyi teklif eder, eski kullanıcının ana dizinine referanslar kaldığında çok kafa karıştırıcı
Mike

Bunu yarattığın için teşekkürler. Olduser_GROUPS bu olduser_GROUPS=$(id -Gn ${olduser} | sed "s/ /,/g" | sed -r 's/\<'${olduser}'\>\b,?//g')şekilde değiştirmenizi öneririm Bu, kısmi bir dize eşleşmesinin aksine tam kullanıcı grubu adını düzgün bir şekilde kaldıracaktır. Ör. Bir kullanıcının kimliği 'pi' ise ve kullanıcının 'pi, gpio, spi vb.' İçeren grupları varsa, diğer kısmi dize eşleşmelerini değil, yalnızca 'pi'yi kaldırır.
Phil

1

Bildiğiniz gibi, Unix kullanıcıları UID olarak adlandırılmıyor, Örnek için: 1001 olarak bilinen mohsen veya 1001 olarak bilinen mohsen grubu.
Bir komut dosyası yazmanız ve aşağıdaki adımları adım adım yapmanız gerekir:

  1. Verilen kullanıcının uid ve gid kodlarını bulun
  2. Ana dizinini bulun.
  3. Kullanıcının üyesi olduğu grupları bulun.
  4. Kullanıcınızı okuyun /etc/suduersve durumu.
  5. Gizli dosyaları, bağlantı dosyalarını, çöp dosyalarını ve yerel makinenizle ilgili dosyaları ayırt etmeniz çok önemlidir.
  6. Önceki sayıya göre ev dizinini sıkıştırın.
  7. Bir meta dizini, konfigürasyonlar vb. Gibi diğer özelliklere göre sandıklayın.
  8. scp hedefinize.
  9. Tabii ki, ev dizisinin sıkıştırılmaması ve kullanılması büyük bir kavramdır.

NOT: Komut dosyası kullanmayın ve yukarıdaki notları adım adım kullanın. Yukarıdakilere bile ekleyebilirsiniz.


-2

Bu komutu deneyin

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

1
Cevap değil.Poster kullanıcıyı klonlamak istiyor.
PersianGulf

Bu kod, bağlantı ve açıklama olmadan çalındı!
kyb
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.