ふとローカール環境上のubuntuに自分以外の人がログインしていたらどうしようと思ったので、確認方法を残しておきます。
ログインされた場合の調査方法も、調べた分だけ載せておきます。
環境
メインOS Windows11 (192.168.19.1)
ゲストOS Ubuntu24.04.1 LTS
現在ログインしているユーザを表示する方法(wコマンド)
$ w
20:48:01 up 15 min, 4 users, load average: 0.02, 0.14, 0.24
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
①**** tty2 - 20:33 15:15 0.05s 0.04s /usr/libexec/gnome-session-binary --session=ubuntu
②**** 192.168.19.1 20:34 14:51 0.00s 0.05s sshd: ub-axis [priv]
③**** 192.168.19.1 20:36 14:51 0.00s 0.01s sshd: ub-axis [priv]
③**** 192.168.19.1 20:36 14:51 0.00s 0.01s sshd: ub-axis [priv]
現在ログインしているアカウントを4件確認することができました。
①GUIでログインしたユーザです。(自分自身)
VMWare上の端末
②メインOS側のPowerShellから”powershell”コマンドでリモート接続したユーザ
③④ WinSCPによるSSHログイン
WinSCPでログインすると2セッション追加されました。
コンソール用とファイル転送用で2セッション使っているのかもしれません(WinSAP上ではコンソールによる直接コマンド送信が行えます)
この”w”コマンドを使用すれば、
現在ログインしているユーザの一覧
ログイン元のIPアドレス
が表示されるので、いつから、どの端末でログインしているかを調べることができます。
これまでにログインしたユーザを知りたい(lastlog、last)
次のコマンドで、全ユーザのログイン履歴を表示することができます。
lastlogを使った確認方法(ユーザ毎に最終ログインを表示)
$ lastlog
Username Port From Latest
root **一度もログインしていません**
daemon **一度もログインしていません**
www-data **一度もログインしていません**
mysql **一度もログインしていません**
syslog **一度もログインしていません**
sa** **一度もログインしていません**
co** **一度もログインしていません**
ge** **一度もログインしていません**
:
***** pts/0 192.168.19.1 月 9月 16 21:19:36 +0900 2024
すべてのユーザ名一覧と、最終ログイン記録が出力されます。
こんなにユーザを登録した覚えはないと思って調べたところ、ほとんどはシステムユーザであり、手動でログインすることはできないとのこと。
lastを使った確認方法(すべてのログイン履歴を表示)
# 全てのログイン履歴
$ last
**** pts/0 Mon Sep 16 21:19 still logged in 192.168.19.1
**** pts/0 Mon Sep 16 20:56 - 21:18 (00:22) 192.168.19.1
**** pts/0 Mon Sep 16 20:36 - 20:53 (00:17) 192.168.19.1
:
# 最近5件のログイン履歴
$ last -5 -a
**** pts/0 Mon Sep 16 21:19 still logged in 192.168.19.1
**** pts/0 Mon Sep 16 20:56 - 21:18 (00:22) 192.168.19.1
**** pts/0 Mon Sep 16 20:36 - 20:53 (00:17) 192.168.19.1
**** tty2 Mon Sep 16 20:33 still logged in tty2
**** seat0 Mon Sep 16 20:33 still logged in login screen
全てのログイン履歴を表示すると精査するのが大変なので、直近の5~10件程度を確認するというやり方が現実的だと思います。
-aオプションを付けると、日付で対象のログインを探す際に便利です。
サーバに登録されている一般ユーザの見分け方
ゲストOS(ubuntu)の次のファイルに、ユーザの一覧が存在します。
$ cat /etc/passwd
各行のデータは、”:”で7つのフィールドに区切られており、左から順番に
ユーザー名
パスワード(通常はxと表示)
ユーザーID(0~65536の数字)
グループID(0~65536の数字)
コメント
ホームディレクトリ(/home/????)
ログインシェル
となっています。
このユーザID(UID)を使って
0~999 システムユーザ
1000~ 一般ユーザ
で分別することができます。
「/etc/passwd」ファイル – Linux技術者認定 LinuC | LPI-Japan 参照
不審なログインがあった場合はどうしたらいいのか
私は幸いにも不審なログインがありませんでしたが、もし公開環境で不審なログインを見つけた際は、次のコマンドで
いつ、どこから、何をされたのか
を確認することが重要だと思います。
●lastコマンド等を使ってログイン日時を特定する
●パスワードの入力に失敗していないか
/var/log/auth.logには、
ログイン認証系のログ
sudoの使用履歴ログ
が出力されます。
次のコマンドを使って、総当たり攻撃等の痕跡(パスワードの入力に失敗していないか)を確認することができます。
# パスワードの入力に失敗していないか
> sudo cat /var/log/auth.log | grep 'Failed password'
# sudo を使って不審なコマンドを実行していないか
> sudo cat /var/log/auth.log | grep 'sudo'
# ssh を使って不審なコマンドを実行していないか
> sudo cat /var/log/auth.log | grep 'ssh'
●ログインされたユーザが判明した場合
ユーザ毎にhomeディレクトリに、コマンドの実行履歴が保存されたhistoryが作成されるので、このファイルを確認することでコマンドの実行履歴を確認することができます。
# 対象アカウントがログアウト済
> cd /home/アクセスされたユーザ
> cat .bash_history
# 対象アカウントがログイン中
> HISTTIMEFORMAT="%F %T "
> history
823 2024-09-16 21:19:36 users
824 2024-09-16 21:19:36 lsb_release -a
825 2024-09-16 21:19:36 exit
826 2024-09-16 21:19:36 ps
※アカウントをログアウトする際に、history -> .bash_history に保存される仕様となっている為です
最後に
ローカル上のサーバに誰もアクセスしていないことがわかり、少し安心できたので休みたいと思います。