Linux 사용자 복제(다른 사용자를 기반으로 사용자 복사)

Linux 사용자 복제(다른 사용자를 기반으로 사용자 복사)

다른 시스템 사용자(그룹, 권한, 특권 및 설정이 동일함)의 정확한 사본이지만 사용자 이름, 비밀번호 및 홈 디렉토리가 다른 새 시스템 사용자를 생성하는 방법은 무엇입니까?

답변1

이 스크립트는 다음을 수행합니다(설명에 따라 업데이트됨).

#!/bin/bash
SRC=$1
DEST=$2

SRC_GROUPS=$(id -Gn ${SRC} | sed "s/ /,/g" | sed -r 's/\<'${SRC}'\>\b,?//g')
SRC_SHELL=$(awk -F : -v name=${SRC} '(name == $1) { print $7 }' /etc/passwd)

sudo useradd --groups ${SRC_GROUPS} --shell ${SRC_SHELL} --create-home ${DEST}
sudo passwd ${DEST}

소스 사용자의 그룹(로그인 이름과 동일한 그룹 제외) 및 셸을 가져온 다음 동일한 셸 및 보조 그룹을 사용하여 새 사용자를 생성합니다.

Usage: clone-user src_user_name new_user_name

오류 검사는 없으며 단지 빠르고 지저분한 복제 스크립트일 뿐입니다.

답변2

  • /etc/passwd를 편집하고 정확한 복사본을 원하는 사용자 행을 복사하십시오. 로그인 이름, 실제 이름 및 홈 디렉터리를 수정합니다.
  • /etc/shadow를 편집하고 원래 사용자의 행을 다시 복사하십시오. 로그인 이름을 수정하세요.
  • 마지막으로 passwd newuser비밀번호를 변경해 보세요.

시스템 측면에서 두 사용자는 모두 동일하므로(동일한 UID) 한 사용자가 다른 사용자의 홈 디렉터리로 이동하여 마음대로 수정할 수 있습니다.

답변3

리눅스 민트 18 메이트의 경우

Mike Anderson의 스크립트에 따라 새 사용자, 이전 사용자, 새 비밀번호에 대해 묻는 질문을 만든 다음 이전 사용자의 홈 디렉토리를 복사하고 새 홈 디렉토리에 있는 이전 사용자 이름의 모든 인스턴스를 새 사용자 이름의 인스턴스로 교체했습니다. 사용자 이름.

useradd 행과 관련된 내 스크립트의 주요 차이점은 Linux Mint 18에서 passwd가 실패하고 chpasswd로 대체된다는 것입니다. 비밀번호가 작동하도록 하기 위해 echo $newuser:$newpassword | chpasswd라는 새 줄을 만들었습니다.

또 다른 차이점은 --create-home을 작동시킬 수 없어서 새로운 라인에서 mkdir을 사용했다는 것입니다.

거대한 오래된 사용자 홈 디렉토리가 있는 경우 주의하십시오.

필요한 것만 취하고 나머지는 남겨 두십시오. 복사한 모든 코드에 대한 책임은 귀하에게 있습니다. 백업 사본을 만드세요!

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

이 스크립트를 완성하는 데 도움을 주신 전 세계 모든 분들께 감사드립니다. 오레곤의 존

답변4

/usr/local/bin/clone-usermod

#!/bin/bash
SRC=$1
DEST=$2

SRC_GROUPS=$(id -Gn ${SRC} | sed "s/ /,/g" | sed -r 's/\<'${SRC}'\>\b,?//g')
#SRC_SHELL=$(awk -F : -v name=${SRC} '(name == $1) { print $7 }' /etc/passwd)

usermod --groups ${SRC_GROUPS}  $2

추신 /user/local/bin/clone-usermod를 입력한 사람은 "코드"로 나열되므로 사람들이 이를 생성하는 데 필요한 파일이 무엇인지 알 수 있습니다. 또한 파일을 실행 가능하게 만들어야 함을 나타내지 않았습니다. 오타가 아닌 특정 경로를 읽지 않은 것이 분명합니다. 그러므로 당신은 리눅스에 정통한 사용자가 아니므로 나는 당신의 무례함을 무시할 것입니다. 구체적인 질문이 있는 경우 문의하시기 바랍니다. 판단하고 싶다면 계속하세요... 이것은 당신이 찾고 있는 로봇이 아닙니다. 여기서는 볼 것이 많지 않습니다. 저는 정말 관심이 없습니다. 좋은 하루 보내세요.

관련 정보