web-dev-qa-db-ja.com

sshdはrootアクセスを要求するようにハードコーディングされていますか?

Rootアクセス権を持たないサーバー上のGitリポジトリへのSSHアクセスを提供したいので、root以外のユーザーとしてSSHデーモンを実行しようとしています。カスタム構成とローカル証明書を使用して実行するようにしましたが、ログインは現在機能していません。

次のバージョンのsshdを使用しています。

OpenSSH_7.4p1、OpenSSL 1.0.2k-fips 2017年1月26日

この段階では、構成などのサポートは求めていません(必要に応じて、個別の質問を投稿します)。これに時間を費やす前に、これが不可能であることを意味するハードコードされた制限があるかどうかを知りたいだけです。

SSHデーモンにroot以外のユーザーとして正常に使用することを妨げる厳しい制限はありますか?

2
HappyDog

かなりの量の調査に基づいて、私が発見したものは次のとおりです。

  • OpenSSH v7.5以降を使用している場合はrootが必要です。
    このバージョン以降、UsePrivilegeSeparationオプションは削除され、この機能は 現在は常に有効 です。これは、SSHデーモンが別のユーザーとしてサブプロセスを実行できる必要があることを意味します。これにはrootが必要です。
  • AuthorizedKeyCommandsオプションを使用する場合はrootが必要です。
    指定されたスクリプトが実行されるsafe_modeチェックは常にrootユーザーを使用するように構成されている (uid = 0)の場合 失敗 スクリプトがroot以外の誰かによって所有されている場合。これは 設計による です。 (StrictModesフラグは、これらのモードチェックを無効にするように聞こえますが、そうではないことにも注意してください。)
  • 標準のパスワード認証を使用する場合はrootが必要です。
    通常のパスワードがチェックされます getpwname()システムコールを使用 ルートでのみ読み取り可能な/etc/shadowを検索するようにハードコードされています。
  • 1024未満のポートで実行する場合はrootが必要です
    ポート0-1023は privileged であり、rootユーザーのみが使用できます。これは、標準のSSHポート22で実行できないことを意味します。したがって、デーモンへの接続では、ポートを明示的に指定する必要があります。

したがって、次の場合はmayルートとして実行できます。

  1. OpenSSH <7.5を使用しています
  2. UsePrivilegeSeparationを無効にします
  3. 認証方法は公開鍵によるものです
  4. ポート1024以上でデーモンを実行できます。

私のユースケースではAuthorizedKeyCommandsが必要であるため、これ以上調査していません。そのため、行き止まりになりました。上記の条件が満たされている場合でも、root以外のユーザーにはさらに制限がある場合がありますが、私は 状況によっては、root以外のユーザーとして実行できたという証拠をいくつか見つけました =。

いくつかのエッジケース

完全を期すために、上記のルールにはいくつかのエッジケースがあります。私はこれらをテストしていません。これらは、上記の調査中に遭遇したコードからの推論に基づいています。

  • システムがユーザーパスワードを/etc/passwdではなく/etc/shadowに保存している場合、そのファイルは誰でも読み取り可能で表示されないため、パスワードベースの認証を使用できますmay明示的なモードであるために、OpenSSHコードでこれをチェックします。ただし、この方法でシステムを構成することは本当に危険なので、絶対に行わないでください。
  • AuthorizedKeyCommandsを使用して、rootが所有しているが、ユーザーアカウントが実行可能なスクリプトを指す場合、この形式の認証を使用することができますmay。ただし、スクリプトではグループ/その他の書き込みアクセスを無効にする必要があるため、ルート以外でファイルを作成または編集することはできません。これにより、ルートアクセスがまったくない場合、これは解決策になりません。 。
4
HappyDog