web-dev-qa-db-ja.com

Git:sshを介して、sshrootログインが無効になっているroot所有のリポジ​​トリにプッシュします

それも可能ですか?

要約すると、私はサーバー上でpuppet masterを実行しており、理想的にはssh経由のrootログインを無効にし、rootアクセスが必要な場合はSudo経由のすべてのアクセスを強制したい

ただし、マニフェストを管理するためにgitリポジトリを使用してpuppetをインストールしていますが、このリポジトリは現在rootが所有しており、現在2つのソリューションしか知りません。

  1. (あまり理想的ではありません)キー認証のみを介してルートアクセスを許可します-もしそうなら、git Pushコマンドのみを許可するために何にロックダウンできますか?
  2. / etc/puppetのリポジトリを別の所有者として所有します-puppetはこれで確実に機能しますか?
  3. 関連するSudoの設定とコマンドでこれを回避できますか?
1
anthonysomerset

私自身の質問に答えるために、私はダニエルが提供した情報を見ましたが、それは集計されませんでした、私はgit group writeを調査し、出くわしました http://andyregan.net/blog/archives/504

リポジトリグループに共通グループ(puppet)の所有権を与え、関連するユーザーをそのグループに追加してから、次のコマンドを実行します。

chmod -R g+swX /etc/puppet/
cd /etc/puppet
git repo-config core.sharedRepository true

私にとっては完璧に機能しました。ルートが所有するリポジトリにプッシュできますが、puppetは引き続き機能し、ルートsshログインを使用しません。

勝つ、勝つ

更新

Puppetでもこの問題が発生しましたが、より適切な方法で処理することを検討し、env_reset行の後に次を追加することでsudoersconfigの適切なビットでこれを解決しました。

Defaults    env_keep += SSH_AUTH_SOCK

これにより、次のようなコマンドを実行できます。

cd /etc/puppet && Sudo git pull && Sudo git submodule sync && Sudo git submodule update --init --recursive

たとえば、Rakefile(私のユーザーはすでにSudo経由のパスワードなしのアクセス許可を持っています)とすべてがそれに応じて機能します。私が達成したことは、基本的に、sshエージェントが転送したsshキーをrootユーザーに渡し、rootユーザー(または非rootユーザー)の下にsshキーを保存せずに、非rootユーザーとして接続されているかのようにgitpullを実行することでした。 -サーバー上の特権アカウント)Win Win

1
anthonysomerset

Gitリポジトリは、グループの書き込み権限を維持するように構成できます(オプション--sharedリポジトリを作成するとき)。これを使用して、リポジトリへのアクセスが必要なアカウントを特定のグループに追加して、リポジトリにアクセスできるようにすることができます。

私は私たちのgitサーバーのためにそれをします。また、各ユーザーのホームディレクトリに、ユーザーがアクセスできる各リポジトリへのシンボリックリンクを配置して、誰もが相対URLでアクセスできるようにします。

2

私がやりたいのは、さまざまなコミット前フックとコミット後フックを実行する、プッシュ先のパペットマスターに「ステージング」ベアgitリポジトリを用意することです。コミット前のフックはパペットの構文をチェックし(構文が正しくないコードをコミットできないようにするため)、コミット後のフックは実際にコードを/ etc/puppetにドロップし、Apacheを再起動します(パペット2.6の古いキャッシュバグを修正するため)

プッシュ先のステージング領域があると、パペットコードをデプロイするプロセスがよりアトミックになります。そうしないと、puppetmasterが半分コミットされたコードをクライアントに提供する可能性があります。

1
robbyt