1.はじめに
Linuxサーバの移行を行う際、ユーザ情報をそのまま移行したい場合があります。
つまり、以下のような場合です。
- LinuxサーバAにtestユーザがいる。
- testユーザはパスワード認証でログインする。
- 新たにLinuxサーバBを作る。
- testユーザがLinuxサーバAと同じパスワードでLinuxサーバBにログインできるようにしたい。
これは、管理者が利用者のパスワードがわからないが、新しいサーバでもそのままユーザが利用できるようにしたいというものです。
このような場合はサーバBでユーザを作成し、shadowをそのままコピペするだけで実現できます。
2.やってみる
サーバAでshadowの抜き出し
まずはサーバAで該当ユーザのshadowを抜き出します。
cat /etc/shadow|grep test
test:$y$j9T$JlC4wyDBXso0fO/FZQiKk1$Eqo4as6xvpStN/JSl8SdAF40sWLrtIUwkINOeUB029D:20573:0:99999:7:::
サーバBでユーザ作成
次に、サーバBで同じ名前のユーザを作成します。
useradd -m -s /bin/bash test
ユーザができたか確認してみます。
cat /etc/passwd |grep test
test:x:1003:1003::/home/test:/bin/bash
きちんと作成されました。
サーバBのshadowを編集
次はサーバBでshadowを編集します。
vipw -s /etc/shadow
作成しただけで何もしていない状況なので以下の様に表示されています。
test:!!:20573:0:99999:7:::
これを、サーバAのものに書き換えます。
test:$y$j9T$JlC4wyDBXso0fO/FZQiKk1$Eqo4as6xvpStN/JSl8SdAF40sWLrtIUwkINOeUB029D:20573:0:99999:7:::
-
vi /etc/shadowで編集することも可能ですが、現在は推奨されていません。 - しかし、
vi /etc/shadowで開くとreadonlyで開きますが、:wq!で保存して問題ありません。
ログイン確認
サーバAで使っていたパスワードでtestユーザにログインできるか試します。
[yoyo@dev2 ~]$ su test
Password:
[test@dev2 yoyo]$
ログインできました!おめでとう!
ユーザー名は関係ない?
ちなみに、このshadowは、:(コロン)で各カラムが区切られています。このうちの2つめがパスワードにあたる部分なのですが、この部分はさらに、$ID$Salt$Hashed_Passwordという部分に分けられます。これらは
-
ID:使用されているアルゴリズム-
1:MD5 -
5:SHA-256 -
6:SHA-512 -
y:yescrypt
-
-
Salt:ハッシュ化される際のランダムな値 -
Hashed_Password:元のパスワードとソルトをアルゴリズムでハッシュ化したもの
を$区切りで表示しています。
この部分をそのままコピーすればユーザ名などは関係なく、同じパスワードで入れるようになります。つまり、
第二カラムにサーバAの$y$j9T$JlC4wyDBXso0fO/FZQiKk1$Eqo4as6xvpStN/JSl8SdAF40sWLrtIUwkINOeUB029Dを以下の様にそのまま記述すると、ほかのユーザもサーバAのtestユーザと同じパスワードでログインできるようになります。
yoyo:$y$j9T$JlC4wyDBXso0fO/FZQiKk1$Eqo4as6xvpStN/JSl8SdAF40sWLrtIUwkINOeUB029D:20573:0:99999:7:::
さいごに
今回はユーザ情報(パスワード)の移行に焦点を当てましたが、実際にユーザを移行する場合は、ほかにもユーザがホームディレクトリに作成したデータや、設定している変数などなども考慮する必要があるので、その辺はご注意ください。