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 inicial diferentes?
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 inicial diferentes?
Respostas:
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 (sem incluir o grupo igual ao logon) e o shell e 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 erro, é apenas um script de clone rápido e sujo.
john
um dos grupos johnny
. Aqui está o que acontece: SRC=john ; echo "$SRC group1 johnny group3" | sed "s/ ${SRC}//g" | sed "s/ /,/g"
Saída:john,group1ny,group3
SRC_GROUPS=$(id -Gn ${SRC} | sed "s/ /,/g" | sed -r 's/\<'${SRC}'\>\b,?//g')
Isso removerá corretamente o nome exato do grupo de usuários, em oposição a uma correspondência parcial de cadeias. Ex. Se o ID de um usuário for 'pi' e um usuário tiver grupos incluindo 'pi, gpio, spi, etc', ele removerá apenas 'pi' e não as outras correspondências parciais de string.
passwd newuser
para modificar a senha.Esteja ciente de que, em termos de sistema, os dois usuários são os mesmos (o mesmo UID); portanto, um poderá entrar no diretório inicial do outro e modificar à vontade.
useradd
. Agora que penso nisso, você pode fazer o contrário, criar um novo usuário useradd
e modificar o UID e o GID para clonar o primeiro.
Para Linux Mint 18 Mate
Baseado no script de Mike Anderson, criei um que faz perguntas sobre o novo usuário, o usuário antigo, a nova senha e, em seguida, copia o diretório inicial do usuário antigo e substitui todas as instâncias do nome do usuário antigo no novo diretório inicial pelo novo nome do 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 que a senha funcionasse, criei uma nova linha: echo $ newuser: $ newpassword | chpasswd.
Outra diferença é que eu não conseguia fazer o --create-home trabalhar, então apenas usei o mkdir em uma nova linha.
Cuidado se você tiver um diretório home enorme de usuário antigo.
Pegue o que você precisa e deixe o resto. Você é responsável por qualquer código que copiar - 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 script. John em Oregon
olduser_GROUPS=$(id -Gn ${olduser} | sed "s/ /,/g" | sed -r 's/\<'${olduser}'\>\b,?//g')
Isso removerá corretamente o nome exato do grupo de usuários, em oposição a uma correspondência parcial de cadeias. Ex. Se o ID de um usuário for 'pi' e um usuário tiver grupos incluindo 'pi, gpio, spi, etc', ele removerá apenas 'pi' e não as outras correspondências parciais de string.
Como você sabe, usuários do Unix como UIDs não nomeiam, por exemplo: mohsen conhecido como 1001 ou grupo mohsen conhecido como 1001.
Você precisa escrever um script e seguir as etapas a seguir:
/etc/suduers
e estado do seu usuário.scp
no seu alvo.NOTA: Não use script e use as notas acima passo a passo. Mesmo você pode inserir acima.
Tente este comando
useradd -N -g gid -G gid2,gid3 -m