web-dev-qa-db-ja.com

UNIXサーバーのすべてのSSH authorized_keysを表示する方法

UNIXサーバーからすべての承認済みSSHクライアントを表示するにはどうすればよいですか?

そんなこと知ってる cat ~/.ssh/authorized_keysは、rootからログインした場合に承認済みのキーを表示します。他のユーザーも自分の承認済みキーを設定できますか?その場合、どのようにすればすべてのシステム認証済みキーを表示できますか?

15
user2761030

質問に順番に答えるには:

  1. Root権限で次のスクリプトを実行すると、許可されたすべてのキーを表示できます。

    #!/bin/bash
    for X in $(cut -f6 -d ':' /etc/passwd |sort |uniq); do
        if [ -s "${X}/.ssh/authorized_keys" ]; then
            echo "### ${X}: "
            cat "${X}/.ssh/authorized_keys"
            echo ""
        fi
    done
    
  2. 有効なユーザーであれば誰でも$HOME/.ssh/authorized_keysファイルを作成し、それに任意の数の公開鍵を追加できます。対応する秘密鍵を持つ誰かが、その特定のユーザーとしてログインできるようになります。 sshdのプロセスは次のようになります。新しい接続が確立されると、sshdはクライアントにユーザー名を要求します。ユーザー名が/etc/passwdに存在する場合、sshdは/etc/passwdの6番目のフィールドからユーザーのホームディレクトリの名前を読み取ります。次に、そのユーザーのホームディレクトリに.ssh/authorized_keysが存在するかどうか、および.sshディレクトリとauthorized_keysファイルの両方に権限が正しく設定されているかどうかを確認します。これらの条件が満たされると、sshdは$HOME/.ssh/authorized_keysに格納されている公開鍵に対してクライアントの秘密鍵を認証しようとします。クライアントが一致する秘密鍵を所有している場合、sshdはそれにアクセスを許可します。

  3. 上記のスクリプトを使用できます。

S.L. Barthはrootアクセスについて優れた点を示しています。 sshを介したrootアクセスを許可することはリスクと見なされます。一般的に受け入れられている方法は、ユーザーアカウントを作成し、Sudoまたは同様のツールを使用してrootアクセスを許可し、次の行を/etc/ssh/sshd_configに追加してsshdを再起動することにより、sshによるrootログインを無効にします。

PermitRootLogin no

マシンがインターネット上にある場合、 "Hail Mary Cloud" がドアをノックする可能性はほぼ100%です。 Linux、iptables、およびパスワードベースのログインを許可するsshdの場合、おそらく fail2ban のようなものをインストールして構成する必要があるため、攻撃者がマシンをブルートフォースで攻撃することは困難です。

また、すでにsshキーについて話しているため、これは本日投稿されたため、 UseRoaming noHost *セクションに/etc/ssh/ssh_configセクションを追加したい場合があります )= =

11
Liczyrzepa

cat ~/.ssh/authorized_keysコマンドは、現在ログインしているユーザーのauthorized_keysファイルを表示します。 rootとしてログインするか、Sudoを使用すると、rootユーザーのauthorized_keysファイルが提供されます。

少なくともUbuntuでは、authorized_keysファイルは通常ユーザーが所有しています。そのため、現在ログインしているユーザー(rootかどうかに関係なく)がそれを見ることができます。
.sshディレクトリはユーザーのホームディレクトリにあり、通常、読み取り、書き込み、実行の権限を持つユーザーが所有しています。したがって、通常、ユーザーは実際に自分のauthorized_keysファイルを追加できるはずです。

すべての承認済みキーを表示するには、すべてのホームディレクトリと/ rootを反復処理し、.ssh/authorized_keysファイルを出力するスクリプトを作成するだけです。明らかに、このスクリプトにはSudo権限が必要です。

余談ですが、Ubuntuでは、ルートアカウントは攻撃者のお気に入りのターゲットであるため、通常は無効になっています。このため、authorized_keysファイルが含まれていない場合があります。

IMO ~/.ssh/authorized_keys2ファイルも確認することをお勧めします。 https://marc.info/?l=openssh-unix-dev&m=100508718416162&w=2 から:

下位互換性のため、〜/ .ssh/authorized_keys2は引き続き認証に使用され、ホスト鍵はknown_hosts2から読み取られます。

Liczyrzepaからの改善されたコード:

#!/bin/bash
for X in $(cut -f6 -d ':' /etc/passwd |sort |uniq); do
  for suffix in "" "2"; do
    if [ -s "${X}/.ssh/authorized_keys$suffix" ]; then
      echo "### ${X}: "
      cat "${X}/.ssh/authorized_keys$suffix"
      echo ""
     fi;
   done;
done
1
coffeemakr