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


13

새로운 시스템 사용자, 다른 그룹의 동일한 사본 (동일한 그룹, 권한, 권한 및 설정을 가짐)을 다른 사용자 이름, 비밀번호 및 홈 디렉토리로 작성하려면 어떻게해야합니까?


리눅스는 정식적인 방법이 없다. 스크립트를 작성해야한다 ....
PersianGulf

2
한 번 차이가 없습니다 명령, 스크립트 또는 howto :) 질문은 그것을 수행하는 방법입니다 :)
Sfisioza

그래서 당신에게 대답합니다 ...
PersianGulf

답변:


9

이 스크립트는 다음을 수행합니다.

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

소스 사용자의 그룹 (로그인과 동일한 그룹은 포함하지 않음) 및 셸을 가져온 다음 동일한 셸 및 보조 그룹을 가진 새 사용자를 만듭니다.

Usage: clone-user src_user_name new_user_name

오류 검사가 없으며 빠르고 더러운 클론 스크립트입니다.


1
예, 흥미롭지 만 빠르고 더럽습니다 : 로그인 이름이 그룹 이름의 접두사 또는 접미사 인 경우 실패합니다. 예를 들어, 로그인은 john그룹 중 하나입니다 johnny. 결과는 다음과 같습니다. SRC=john ; echo "$SRC group1 johnny group3" | sed "s/ ${SRC}//g" | sed "s/ /,/g"출력 :john,group1ny,group3
Stéphane Gourichon

이 스크립트를 작성해 주셔서 감사합니다. SRC_GROUPS를 변경하여 SRC_GROUPS=$(id -Gn ${SRC} | sed "s/ /,/g" | sed -r 's/\<'${SRC}'\>\b,?//g') 부분 문자열 일치가 아닌 정확한 사용자 그룹 이름을 올바르게 제거하는 것이 좋습니다 . 전의. 사용자의 ID가 'pi'이고 사용자에게 'pi, gpio, spi 등'을 포함하는 그룹이 있으면 'pi'만 제거하고 다른 부분 문자열 일치는 제거하지 않습니다.
Phil

5
  • / etc / passwd를 편집하고 정확한 사본을 원하는 사용자의 행을 복제하십시오. 로그온 이름, 실제 이름 및 홈 디렉토리를 수정하십시오.
  • / etc / shadow를 편집하고 원래 사용자의 행을 다시 복제하십시오. 로그온 이름을 수정하십시오.
  • 마지막으로 passwd newuser암호를 수정 하기 위해 실행 하십시오.

시스템 측면에서는 두 사용자가 동일 (동일한 UID)하므로 다른 사용자의 홈 디렉토리로 들어가서 원하는대로 수정할 수 있습니다.


이것은 가장 확실한 방법입니다. 그러나 UID를 실제로 동일한 사용자로 사용 하지 않으려면 UID를 수정하는 것이 좋습니다 ....
Wildcard

1
@Wildcard, 그러나 그것은 복제본이 아니며, 새로운 사용자가 될 것이며 그 작업은 간단한로 수행 될 수 있습니다 useradd. 이제 생각해 보았으므로 다른 방법으로 할 수 있고 새 사용자를 useradd만든 다음 UID와 GID를 수정하여 첫 번째 사용자 를 복제 할 수 있습니다.
YoMismo

3

Linux Mint 18 Mate의 경우

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 

이 스크립트를 도와 주신 모든 분들께 감사드립니다. 오리건의 요한


제안 : 올바른 권한을 확인하고 처음으로 sudo없이 실행하려고하면 스크립트가 꽤 멀어집니다. "/ home / $ olduser"에 대해 .bashrc / .zshrc etc를 grep하고 경고를 찾거나 $ HOME으로 대체 할 것을 제안하면 이전 사용자의 홈 디렉토리에 대한 참조가 남아있을 때 매우 혼란 스러울 것입니다.
Mike

이것을 만들어 주셔서 감사합니다. olduser_GROUPS를 변경하여 olduser_GROUPS=$(id -Gn ${olduser} | sed "s/ /,/g" | sed -r 's/\<'${olduser}'\>\b,?//g')부분 문자열 일치가 아닌 정확한 사용자 그룹 이름을 올바르게 제거하는 것이 좋습니다 . 전의. 사용자의 ID가 'pi'이고 사용자에게 'pi, gpio, spi 등'을 포함하는 그룹이 있으면 'pi'만 제거하고 다른 부분 문자열 일치는 제거하지 않습니다.
Phil

1

아시다시피, Unix 사용자는 이름이 아닌 UID입니다. 예 : 1001로 알려진 mohsen 또는 1001으로 알려진 mohsen 그룹
. 스크립트를 작성하고 다음 단계를 단계별로 수행해야합니다.

  1. 주어진 사용자의 UID 및 GID 찾기
  2. 홈 디렉토리를 찾으십시오.
  3. 사용자가 속한 그룹을 찾으십시오.
  4. /etc/suduers사용자의 상태를 읽습니다 .
  5. 숨겨진 파일, 링크 파일, 가비지 파일 및 기본 시스템과 관련된 파일을 구별하는 것이 매우 중요합니다.
  6. 이전 번호에 따르면 홈 디렉토리를 압축하십시오.
  7. 구성 등과 같은 다른 사양에 따라 메타 디렉토리를 크레이트하십시오.
  8. scp 당신의 목표에.
  9. 물론, 홈 디렉토리의 압축 해제 및 사용 자체는 큰 개념을 가지고 있습니다.

참고 : 스크립트를 사용하지 않고 위의 메모를 단계별로 사용하십시오. 심지어 당신은 위에 삽입 할 수 있습니다.


-2

이 명령을 사용해보십시오

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

1
대답이 아닙니다. 포스터는 사용자를 복제하려고합니다.
페르시아 걸프

이 코드는 링크와 설명없이 도난당했습니다!
kyb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.