새로운 시스템 사용자, 다른 그룹의 동일한 사본 (동일한 그룹, 권한, 권한 및 설정을 가짐)을 다른 사용자 이름, 비밀번호 및 홈 디렉토리로 작성하려면 어떻게해야합니까?
새로운 시스템 사용자, 다른 그룹의 동일한 사본 (동일한 그룹, 권한, 권한 및 설정을 가짐)을 다른 사용자 이름, 비밀번호 및 홈 디렉토리로 작성하려면 어떻게해야합니까?
답변:
이 스크립트는 다음을 수행합니다.
#!/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
오류 검사가 없으며 빠르고 더러운 클론 스크립트입니다.
john
그룹 중 하나입니다 johnny
. 결과는 다음과 같습니다. SRC=john ; echo "$SRC group1 johnny group3" | sed "s/ ${SRC}//g" | sed "s/ /,/g"
출력 :john,group1ny,group3
SRC_GROUPS=$(id -Gn ${SRC} | sed "s/ /,/g" | sed -r 's/\<'${SRC}'\>\b,?//g')
부분 문자열 일치가 아닌 정확한 사용자 그룹 이름을 올바르게 제거하는 것이 좋습니다 . 전의. 사용자의 ID가 'pi'이고 사용자에게 'pi, gpio, spi 등'을 포함하는 그룹이 있으면 'pi'만 제거하고 다른 부분 문자열 일치는 제거하지 않습니다.
passwd newuser
암호를 수정 하기 위해 실행 하십시오.시스템 측면에서는 두 사용자가 동일 (동일한 UID)하므로 다른 사용자의 홈 디렉토리로 들어가서 원하는대로 수정할 수 있습니다.
useradd
. 이제 생각해 보았으므로 다른 방법으로 할 수 있고 새 사용자를 useradd
만든 다음 UID와 GID를 수정하여 첫 번째 사용자 를 복제 할 수 있습니다.
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
이 스크립트를 도와 주신 모든 분들께 감사드립니다. 오리건의 요한
olduser_GROUPS=$(id -Gn ${olduser} | sed "s/ /,/g" | sed -r 's/\<'${olduser}'\>\b,?//g')
부분 문자열 일치가 아닌 정확한 사용자 그룹 이름을 올바르게 제거하는 것이 좋습니다 . 전의. 사용자의 ID가 'pi'이고 사용자에게 'pi, gpio, spi 등'을 포함하는 그룹이 있으면 'pi'만 제거하고 다른 부분 문자열 일치는 제거하지 않습니다.
아시다시피, Unix 사용자는 이름이 아닌 UID입니다. 예 : 1001로 알려진 mohsen 또는 1001으로 알려진 mohsen 그룹
. 스크립트를 작성하고 다음 단계를 단계별로 수행해야합니다.
/etc/suduers
사용자의 상태를 읽습니다 .scp
당신의 목표에.참고 : 스크립트를 사용하지 않고 위의 메모를 단계별로 사용하십시오. 심지어 당신은 위에 삽입 할 수 있습니다.