正しいインストールのためのいくつかのスクリプト

正しいインストールのためのいくつかのスクリプト

アカウントにアクセスするために使用されたSSHキーを見つけることはできますか?私はSSHを通じて何人かの(信頼できる!)人々にアクセスを許可するサーバーアカウントを持っています。誰がいつログインしたのかを知ることができて便利だと思います。 rootアクセス権があり、ログを見ることができますが、そこには何もないようです。ログ内のキーを識別する方法を追加する設定スイッチはありますか?

答え1

sshd設定ファイル(通常は/etc/ssh/sshd_config)に移動してLogLevelディレクティブをVERBOSEに変更する場合:

LogLevel VERBOSE

...ログには次の内容が表示されます。

6月24日 22:43:42 localhost sshd[29779]: 一致するRSAキーが見つかりました: d8:d5:f3:5a:7e:27:42:91:e6:a5:e6:9e:f9:fd : d3:
ce 24 22:43:42 localhost sshd[29779]: 127.0.0.1 ポート 59630 ssh2 で caleb の公開鍵を受け入れます。

からman sshd_config

   LogLevel
          Gives  the  verbosity  level that is used when logging messages from
          sshd(8).  The possible values are: QUIET, FATAL, ERROR,  INFO,  VER-
          BOSE,  DEBUG,  DEBUG1,  DEBUG2,  and  DEBUG3.   The default is INFO.
          DEBUG and DEBUG1 are equivalent.  DEBUG2  and  DEBUG3  each  specify
          higher  levels of debugging output.  Logging with a DEBUG level vio-
          lates the privacy of users and is not recommended.

答え2

やや似ている@user37161からの返信。共有アカウントがカスタムシェルを実行していて、そのシェルにどのユーザーがいるかを知る必要がある場合は、「ラッパー」スクリプトを実行するだけでは不十分です。競争条件。

代わりに、environment=authorized_keysファイルのオプションを使用して、カスタムシェルから読み取ることができる環境変数を設定できます。

.ssh/authorized_keysファイルで、次のように各行の前に環境変数セットを追加します。

environment="REMOTEUSER=jrhacker" ssh-rsa ....
environment="REMOTEUSER=jbloggs" ssh-rsa ....

これにより、カスタムシェルまたはさまざまなrcスクリプトが$REMOTEUSER変数を読み取り、適切なアクションを実行できます。

ただし、標準シェルを使用している場合は、ログインしたユーザーがファイルを変更してさまざまな操作を防ぐことができることに注意してください。また、ユーザーは環境変数を設定できます(例:これについてのマニュアルLDPRELOADを参照)。sshd_configPermitUserEnvironment

答え3

正しいインストールのためのいくつかのスクリプト

キーを介してSSH接続を追跡/記録し、ユーザー名を拡張する完全に機能する方法があります。

紹介する

@Calebの答えに加えて、いくつかのヒントを共有したいと思います。

メモ:私はDebian 6.0で作業しています。

サーバーのインストール

SSHDログレベル

まず、サーバー構成に適切なロギング・レベルがあることを確認します。

ルートとして、これは詳細なロギングを設定して有効にします。

sed '/^[^#]*LogLevel.*\(QUIET\|FATAL\|ERROR\|INFO\)/{s/^/# /;h;s/$/\nLogLevel VERBOSE/};${p;g;/./!{iLogLevel VERBOSE'$'\n;};D}'  -i /etc/ssh/sshd_config

次のように書くことができます:

sed '
     /^[^#]*LogLevel.*\(QUIET\|FATAL\|ERROR\|INFO\)/{
        s/^/# /;
        h;
        s/$/\nLogLevel VERBOSE/
    };
    ${
        p;
        g;
        /./!{
            iLogLevel VERBOSE
        };
        D
    }'  -i /etc/ssh/sshd_config

またはsedスクリプト:

#!/bin/sed -f
/^[^#]*LogLevel.*\(QUIET\|FATAL\|ERROR\|INFO\)/{
    s/^/# /;
    h;
    s/$/\nLogLevel VERBOSE/
};
${
    p;
    g;
    /./!{
        iLogLevel VERBOSE
    };
    D
}

次のように実行できます。

patchSshdConfigLogLevel.sed -i /etc/ssh/sshd_config

だから活性化これ:

service ssh restart

Syslog:指紋ユーザーを読むことができるように設定

これで、ユーザーが読めるファイルに指紋をインポートします。

echo ':msg, regex, "Found matching .* key:" -/var/log/sshdusers.log' \
    > /etc/rsyslog.d/ssh_key_user.conf 
echo ':msg, regex, "Accepted publickey for" -/var/log/sshdusers.log' \
    >> /etc/rsyslog.d/ssh_key_user.conf 

service rsyslog restart

sshdusers.logSSHで(再)ログインして新しいファイルが作成されたこと(そして一部のコンテンツが含まれているかどうか)を確認し、

chmod 644 /var/log/sshdusers.log

最後のステップ:回転させてください。

参加する/etc/logrotate.d/

cat >/etc/logrotate.d/sshdusers <<eosshdusers
/var/log/sshdusers.log {
  rotate 3
  daily
  compress
  missingok
  postrotate
        touch /var/log/sshdusers.log
        chmod 644 /var/log/sshdusers.log
        /usr/lib/rsyslog/rsyslog-rotate
  endscript
  notifempty
}
eosshdusers

使用法

これにより、現在のセッションの指紋が印刷されます。

sed -ne "/sshd.$PPID.:.*matching .SA key/{s/^.* //g;h};\${x;p}" /var/log/sshdusers.log
sed -ne "/sshd.\($(($(ps ho ppid $PPID)))\|$PPID\).:.*\(Accepted publickey\|matching .SA key\)/{s/^.* //g;h};\${x;p}" /var/log/sshdusers.log

プラグイン.bashrc

最後にもう一つ追加/etc/bash.bashrcあなたまたはユーザーの最後に.bashrc

ssh_oPwd=$OLDPWD
ssh_oUmask=$(umask)
umask 077
ssh_tempdir=$(mktemp -d /tmp/ssh-id-XXXXXXX)
cd $ssh_tempdir || exit 1

ssh_crtFp=$(
    sed -ne "/sshd.\($(($(ps ho ppid $PPID)))\|$PPID\).:.*\(Accepted publickey\|matching .SA key\)/{s/^.* //g;h};\${x;p}" /var/log/sshdusers.log
)
for ((ssh_i=1;ssh_i<=$(wc -l <$HOME/.ssh/authorized_keys);ssh_i++));do
    export ssh_line="$(sed -ne ${ssh_i}p <$HOME/.ssh/authorized_keys)"
    echo "$ssh_line" >tempKey
    export ssh_lFp=($(ssh-keygen -l -f tempKey))
    if [ "${ssh_lFp[1]}" == "$ssh_crtFp" ] ;then
        export SSH_KEY_USER=${ssh_line##* }
        break
      fi
  done

cd $OLDPWD
OLDPWD=$ssh_oPwd
rm -fR $ssh_tempdir
umask $ssh_oUmask
unset ssh_lFp ssh_line ssh_i ssh_crtFp ssh_tempdir ssh_oUmask ssh_oPwd

したがって、SSHから再度ログインすると、次のようになります。

set | grep ^SSH
SSH_CLIENT='192.168.1.31 43734 22'
SSH_CONNECTION='192.168.1.31 43734 192.168.1.2 22'
SSH_KEY_USER=user@mydesk
SSH_TTY=/dev/pts/2

ノート一部のインストールでは、認証キーファイルの名前が次のように異なる場合があります$HOME/.ssh/authorized_keys2

答え4

Fedora 20+では、ログイン試行と成功情報が/var/log/audit/audit.logに保存されます。ログはログイン試行(失敗と成功)を保存し、ログイン試行に使用されたキーフィンガープリントはfpというフィールドに保存されます。

ssh-keygen -l を 1 行ずつ実行して、ログインのキーフィンガープリントを Authorized_keys のフィンガープリントと比較できます。

SSH ログイン、セキュリティ、侵入検知の詳細な説明は次のとおりです。http://vpathak.tumblr.com/post/121343814158/fedora-audit-log-with-love-from-Russia

関連情報