1

すべての開発者は、ssh 経由でステージング サーバーにログインできます。

ステージング サーバーでコマンドを実行するhgと、更新されたファイルや新しいファイルの所有者になります。これらのファイルは、ユーザー/グループ www-data が所有する必要があります。

これにsudoersファイルを編集してみました

Cmnd_Alias WWW_DATA_CMDS = /usr/bin/svn, /usr/bin/hg

%developers  ALL=(www-data) NOPASSWD: WWW_DATA_CMDS

ご覧のとおり、サーバーにも SVN があり (SVN から HG に移行しています)、このセットアップは SVN に対して正常に機能します。SVN コマンドを実行すると、www-data としてファイルが作成されます。

同じものを Mercurial で動作させるにはどうすればよいですか?

4

1 に答える 1

2

ここには魔法がないことをまず理解してください。Mercurial は常に、それを実行するユーザーとしてファイルを作成します。話の終わりです。それ以外のことをしようとはしません (そして許可さえもありません)。

つまり、sudo 経由でのみ hg を実行し、既存のファイルのアクセス許可が正しい場合、ここで必要なことが行われます。

しかし、それはまた、ユーザーが sudo なしで hg を実行し、適切な権限を持っている場合、混乱を招くことも意味します。Mercurial は、Unix パーミッション モデルで許可されていることは何でもできるようにすることで満足しています。

これに対処するには、次の 3 つの方法があります。

  • 人々が一貫してsudoを使用するまで、定規でナックルを叩きます
  • すべてのユーザーを 1 つのアカウントに集める mercurial-server のようなラッパーを使用する
  • グループ、umask、所有権、および権限を適切に構成して、実際に共有できるようにする

この最後の動作は次のとおりです。

  • すべてのユーザー X が一致する既定のグループ X を持っていることを確認します (ほとんどの最新のシステムは既にこれを行っています)。
  • 全員 (および wwwdata) を二次グループ project-foo に追加します
  • ログイン時に全員の umask が設定されていることを確認して、グループの読み取り/書き込みをマスクしないようにします (077 ではなく umask 007)。
  • プロジェクト内のすべてのファイルをグループ project foo に設定します (chgrp -R project-foo foo/)
  • そのグループがすべてのファイルを読み書きできるようにする (chmod -R g+rw foo/)
  • すべてのディレクトリをトラバース可能にしてsetgidにする(find foo/ -type d | xargs chmod g+sx)

これにより、ユーザーがプロジェクトでファイルを作成するたびに、グループ内の他の全員が読み取り/書き込みできるようになります。

于 2011-10-07T17:07:24.027 に答える