TORIPIYO DIARY

recent event, IoT, programming, infrastructure topics

複数の開発者が共有ユーザでログインして開発しているときに誰がログインしたのか確認する方法

AWSとか使って開発しているスタートアップ企業は、EC2サーバにログインして作業する時にec2-userなどの共有ユーザを使っていると思います。

よくある運用方法は、

  1. 開発者がそれぞれ秘密鍵と公開鍵をローカルマシン上に作成
  2. 全員の公開鍵をサーバのec2-userの~/.ssh/authorized_keysに登録
  3. 秘密鍵を使って各開発者はec2-userでsshログイン

といった感じだと思います。

この運用をしていると、

  • みんなec2-userでログインしているので、誰がいつログインしたかはわからない。
  • だから、それぞれのユーザごとにアカウント作成をしないといけない。

と思うかもしれませんが、一応、誰がいつログインしたのかは追うことが出来ます。(それぞれが自分の秘密鍵でログインしていれば。)

実は、sshログインした時に利用された公開鍵の情報は、以下のような感じで/var/log/secureに保存されています。

Nov  7 15:28:06 web sshd[27042]: Accepted publickey for centos from xx.xx.xx.xx port xxxxx ssh2: RSA SHA256:I893gtaiyg78yeg4aheGIEGIEAIEEUTPIOBKKFKGKAE
Nov  7 15:28:06 web sshd[27042]: pam_unix(sshd:session): session opened for user centos by (uid=0)
SHA256:I893gtaiyg78yeg4aheGIEGIEAIEEUTPIOBKKFKGKAE

の箇所が、SSHログインした時に利用された公開鍵のSHA256情報です。

この情報を控えて、あとは、

ssh-keygen -lf .ssh/authorized_keys

を実行すると、

4096 SHA256:I893gtaiyg78yeg4aheGIEGIEAIEEUTPIOBKKFKGKAE taro@toripiyo.net (RSA)
4096 SHA256:9uteiougsourgEU3GKSJJGSRb784ygnsihiaTEGgsoj tama@toripiyo.net (RSA)
4096 SHA256:63xiOP2ibaGAOPREB87398POiuIIOUOYOUgaeioiu74 pochi@toripiyo.net (RSA)

上記の形式で、各公開鍵のSHA256情報が一覧表示されます。これで、var/log/secureに出力されたものはどの公開鍵か確認すれば、その時間にログインした人が誰か大抵特定出来ます。