プライベートDebianリポジトリへのアクセスを安全に制限する


9

非公開のDebianリポジトリへのアクセスを制限し、非対話的に(つまり、スクリプトを使用して)リポジトリに認証できる方法を探していました

私が見つけた最も有用な記事は、実際にはDebian管理サイトからのものであるが、安全な方法はsshおよび公開/秘密鍵を使用する場合です。正常に動作しますが、認証を成功させるには、各ホストの公開鍵がリモートのauthorized_keysファイル内にある必要があります。ssh://にパスワードを提供することについては何も述べられていませんが、それは可能であるはずです。

他の代替手段(ftpなど)を試しましたか?

前もって感謝します


上記の記事で私が抱えている問題は、APTリポジトリへのアクセスを提供するだけではなく、APTリポジトリマシンへのシェルアクセスを提供することです。それは許容できないリスクです。
BobDoolittle 2014年

回答:


5

apt-getサーバーで常に手動で実行している場合(apt-getcronによって起動される自動コマンドはありません)、sshエージェントフォワーディングの使用を検討してください。これにより、管理するサーバーごとに1つの公開/秘密キーペアを管理する必要がなくなり、すべてのサーバーに秘密キーを残しておくよりも安全です。

初期構成 -管理するサーバーに接続し、次のようなものを追加/etc/apt/sources.listします(この例では、サーバーをmanagerアカウントに接続することを想定しています):

    deb ssh://manager@my.repository.org/path other stuff
  • johndoeたとえば、ログインを使用して、自分のコンピューターに秘密鍵と公開鍵のペアを作成します(コンピューターがdebianで実行されている場合、そうでない場合は、管理専用のdebianサーバーからこれを実行できます)。

    ssh-keygen
    
  • 強力なキーフレーズで保護されていることを確認してください
  • 公開鍵をリポジトリサーバーにコピーします/home/manager/.ssh/authorized_keys

    ssh-copy-id manager@my.repository.org
    

管理セッションごとに1回

  • 次のように入力して、マシンでsshエージェントを起動します。

    eval `ssh-agent`
    
  • キーをエージェントに追加します(これにはパスフレーズが必要になります):

    ssh-add
    

サーバーの管理

  • を使用して管理するサーバーに接続しますssh -A-Aエージェント転送をアクティブにします):

    ssh -A some.server.org
    
  • rootに切り替えます(使用sudoする場合は構成する必要があります。/etc/sudoersそうしないsudoと、エージェント転送が中断されます。これをお読みください):

    su
    
  • これで、エージェント転送により、sshを使用してリポジトリのマネージャーアカウントに接続できます。パスワードを再度入力する必要はありません。したがって、apt-getうまく機能するはずです:

    apt-get udate
    

管理セッションを終了する

  • サーバーの管理が完了したら、エージェントからキーを削除します。

    ssh-add -D
    

メリット

  • 初期構成はそれほど必要ありません
  • 必要な秘密鍵は1つだけです
  • 秘密鍵は強力なパスフレーズで保護されています
  • 誰かがサーバーの1つにrootアクセス権を取得しても、リポジトリサーバーにすぐにアクセスすることはできません。
    • ハッカーが忍耐強く、資格がある場合、エージェント転送を使用してサーバーに接続するまで待機でき、フォワーディングメカニズムをハイジャックしてリポジトリサーバーにアクセスできることに注意してください。
    • それを防ぐのを助けるために、あなたはssh-askあなたの鍵を使うすべての試みを受け入れ/拒否するために使うことができます。
    • いずれの場合でも、ハッカーは秘密鍵自体にアクセスできなくなります。キーを使用するために転送メカニズムをハイジャックできるのは、サーバーに接続している間だけです。

MiniQuarkに再度感謝します。実際、更新は無人ですが、これはテスト目的で適用できる優れた方法です。
ハンバー、

どういたしまして!:)それが役に立てば嬉しい。
MiniQuark、2010

4

これを行う1つの方法は、特定のIPのセットにリポジトリへのアクセスを許可することです。これは、LANとVPNで非常にうまく機能します。

シンプルで効率的。


1
アントワーヌありがとう:) 実際、私が今持っているリポジトリには、その方法(OpenVPN接続を介したhttp)を使用してアクセスできます。VPNに属するIPを制限します。ここでの欠点は、リポジトリにアクセスするためにすべてのホストをVPNに接続する必要があることです。質問でそれを指定していないのは残念です。
ハンバー、

確かに、OpenVPNの管理は面倒ですが、リポジトリのセキュリティ管理が非常に簡単になります。また、ユーザーはVPN内で資格情報を気にする必要はありません。
Antoine Benkemoun、2010

2

SSH +公開鍵/秘密鍵のソリューションではありませんという悪いです。

  • クライアントマシンにrootとしてログインします。
  • 入力しssh-keygenた後、ssh-copy-id your_login@your.repository.org
  • /etc/apt/sources.list次のようなものを編集して追加します。

    deb ssh://your_login@your.repository.org/path other stuff
    

確かに、各サーバーの公開鍵を~/.ssh/authorized_keysサーバー上のファイルに配置する必要がありますが、それほど複雑ではなく(上記を参照)、許可または拒否するサーバーをいつでも制御できます(キーは次の場所で削除できます)いつでもauthorized_keys)。


MiniQuarkに感謝します。はい、このソリューションはそれほど悪くありませんが、opensshサーバーでパスワード認証が無効になっている場合、ssh-copy-idは機能しません。リポジトリを使用して各クライアントで同じキーファイルを使用できるようにすることを考えました。セキュリティを強化するために、最小限の権限を持つユーザーが使用されます。資格情報の共有とほぼ同じです。私は現在、このメソッドをテストして、動作/動作を確認しています。
ハンバー、

1

ログイン/パスワード(基本認証)で保護された、リポジトリへのhttpsアクセスを設定できます。問題は、クリアテキストのログイン/パスワードを入力する必要があることです/etc/apt/sources.list(注:代わりにログイン/パスワードを入力できるようにするパッチがあります/root/.netrc)。


これはおそらく最良の解決策であり、netrcではなく/etc/apt/auth.confでもあります。ここにドキュメント:manpages.debian.org/testing/apt/apt_auth.conf.5.en.html
Nicholi

0

質問のリンクは複数の方法を示しています。2番のhttps +基本認証が必要です。


ジャスティンに感謝します。apt-transport-httpsがインストールされている場合にのみ、aptを使用したhttpsトランスポートが機能すると思います。これは興味深い代替手段です。唯一の欠点は、sources.listの中に資格証明書である
ハンバー

chmod 600 /etc/apt/sources.list
Justin
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.