Clonar usuário Linux (copiar usuário, baseado em outro)

7

Como posso criar um novo usuário do sistema, uma cópia exata de outro (com os mesmos grupos, permissões, privilégios e configurações), mas com nome de usuário, senha e diretório pessoal diferentes?

    
por Sfisioza 21.05.2015 / 14:30

5 respostas

5

Este script fará isso:

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

Ele obtém os grupos de usuários de origem (não incluindo o grupo que é o mesmo que o seu login) e shell, depois cria um novo usuário com o mesmo shell e grupos secundários.

Usage: clone-user src_user_name new_user_name

Não há verificação de erros, é apenas um script clone rápido e sujo.

    
por 08.03.2016 / 15:30
4
  • Edite o / etc / passwd e duplique a linha do usuário para o qual você quer uma cópia exata. Modifique o nome de logon, o nome real e o diretório inicial.
  • Edite / etc / shadow e novamente duplique a linha do usuário original. Modifique o nome de logon.
  • Finalmente, execute passwd newuser para modificar a senha.

Esteja ciente de que, do ponto de vista do sistema, ambos os usuários são os mesmos (mesmo UID), portanto, um deles poderá entrar no diretório pessoal do outro e modificar à vontade.

    
por 22.05.2015 / 11:44
1

Para o Linux Mint 18 Mate

Com base no script de Mike Anderson, fiz um que faz perguntas sobre o novo usuário, o antigo usuário, a nova senha e depois copia o diretório home do usuário antigo e substitui todas as instâncias do nome do usuário antigo no novo diretório inicial com o nome do novo usuário.

A principal diferença no meu script em relação à linha useradd é que o passwd falha no Linux Mint 18, substituído pelo chpasswd. Para colocar a senha em funcionamento, criei uma nova linha: echo $ newuser: $ newpassword | chpasswd.

Outra diferença é que eu não consegui --create-home trabalhar, então usei o mkdir em uma nova linha.

Cuidado se você tiver um diretório pessoal de um usuário antigo enorme.

Pegue o que você precisa e deixe o resto. Você é responsável por qualquer código copiado - faça backups!

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

Obrigado a todos no mundo que me ajudaram com este roteiro. John em Oregon

    
por 09.07.2016 / 22:45
0

Como você sabe, usuários Unix como UIDs não nomeiam, Por exemplo: mohsen conhecido como 1001 ou grupo mohsen conhecido como 1001.
Você tem que escrever um script e fazer passo a passo os seguintes passos:

  1. Encontrar uid e gid do usuário especificado
  2. Encontre seu diretório inicial.
  3. Encontre grupos dos quais o usuário é membro deles.
  4. Leia /etc/suduers e o estado do seu usuário.
  5. É muito importante distinguir entre arquivos ocultos, arquivos de link, arquivos de lixo e arquivos relacionados à sua máquina nativa.
  6. De acordo com o número anterior, compacte o diretório inicial
  7. Crate uma meta dir de acordo com outras especificações, como configurações e assim por diante.
  8. scp no seu alvo.
  9. É claro que descompactar e usar o diretório home é um conceito grande.

NOTA: Não use o script e use as notas acima passo a passo. Até você pode inserir acima.

    
por 22.05.2015 / 11:30
-1

Tente este comando

useradd -N -g gid -G gid2,gid3 -m
    
por 21.05.2015 / 15:56

Tags