Linuxユーザーのクローン作成(別のユーザーに基づいてユーザーをコピー)


13

新しいシステムユーザー、別のユーザーの正確なコピー(同じグループ、アクセス許可、特権、設定を持つ)を、異なるユーザー名、パスワード、ホームディレクトリで作成するにはどうすればよいですか?


Linuxには標準的な方法はありません。スクリプトを作成する必要があります
。...-PersianGulf

2
一度のコマンド、スクリプト、またはハウツーに違いはありません:)問題はそれを行う方法です:)
Sfisioza

私はあなたに答えるよう...
ペルシア湾

回答:


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、グループの1つですjohnny。ここでは何が起こるかです:SRC=john ; echo "$SRC group1 johnny group3" | sed "s/ ${SRC}//g" | sed "s/ /,/g"アウトプット:john,group1ny,group3
ステフェイン・グーリッホン

このスクリプトを作成してくれてありがとう。SRC_GROUPSを変更することをお勧めしSRC_GROUPS=$(id -Gn ${SRC} | sed "s/ /,/g" | sed -r 's/\<'${SRC}'\>\b,?//g') ます。これにより、部分的な文字列の一致ではなく、正確なユーザーグループ名が適切に削除されます。例 ユーザーのIDが「pi」で、ユーザーが「pi、gpio、spiなど」を含むグループを持っている場合、「pi」のみが削除され、他の部分的な文字列は一致しません。
フィル

5
  • / etc / passwdを編集し、正確なコピーが必要なユーザーの行を複製します。ログオン名、実名、およびホームディレクトリを変更します。
  • / etc / shadowを編集して、元のユーザーの行を再度複製します。ログオン名を変更します。
  • 最後に実行passwd newuserして、パスワードを変更します。

システム的には両方のユーザーが同じ(同じUID)であることに注意してください。そのため、一方が他方のホームディレクトリに入り、自由に変更できます。


これはほぼ確実に最も簡単な方法です。ただし、UIDを実際に同じユーザーにするつもりがない場合は、UIDも変更することをお勧めします
。...-ワイルドカード

1
@Wildcard、しかしそれはクローンではなく、新しいユーザーであり、そのタスクはsimpleで達成できますuseradd。考えてみると、別の方法でそれを実行し、新しいユーザーを作成し、useraddUIDとGIDを変更して最初のユーザーを複製できます。
ヨミスモ

3

Linux Mint 18 Mateの場合

Mike Andersonのスクリプトに基づいて、新しいユーザー、古いユーザー、新しいパスワードについて質問し、古いユーザーのホームディレクトリをコピーし、新しいホームディレクトリにある古いユーザーの名前のすべてのインスタンスを新しいものに置き換えます。ユーザーの名前。

useradd行に関する私のスクリプトの主な違いは、Linux Mint 18でpasswdが失敗し、chpasswdに置き換えられることです。パスワードを機能させるために、新しい行を作成しました:echo $ newuser:$ newpassword | chpasswd。

もう1つの違いは、--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を使用せずに最初に実行してみましたが、スクリプトはかなり遠くなります。Allsoは、 "/ home / $ olduser"に対してgrep .bashrc / .zshrcなどに役立ち、見つかった場合は$ HOMEに置き換えるよう警告または提案します。古いユーザーのホームディレクトリへの参照が残っていると非常に混乱します
Mike

これを作成してくれてありがとう。olduser_GROUPSなどを変更することをお勧めしolduser_GROUPS=$(id -Gn ${olduser} | sed "s/ /,/g" | sed -r 's/\<'${olduser}'\>\b,?//g')ます。これにより、部分的な文字列の一致ではなく、正確なユーザーグループ名が適切に削除されます。例 ユーザーのIDが「pi」で、ユーザーが「pi、gpio、spiなど」を含むグループを持っている場合、「pi」のみが削除され、他の部分的な文字列は一致しません。
フィル

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
答えではありません。Posterはユーザーを複製したいと考えています。
ペルシャ湾

このコードは、リンクと説明なしで盗まれました!
kyb
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.