この質問をするのに最適な方法がわかりません。数年にわたって私は自分の道を隅に追いやったので、いくつかのことを理解する必要があります。私はほぼ間違いなくこれまでベストプラクティスに従っていませんでしたが、そこに行きます。
私は自分のLinux(Ubuntu)サーバーでDjango Webサイトを作成してホストします。Bazaarでバージョン管理を管理し、SSH + BZR経由でアップロードします。これらはすべて/websites/
という想像上の親ディレクトリに移動します。プロダクションコピーは単なるマスターBZRブランチです(エクスポートではありません)。私はFTPサーバーを実行せず、SSHのみを実行します。
私のワークフローは、Webサイトのローカルコピーを編集し、変更をコミットすることです。それらはすべてバインドされたブランチであるため、コミットはサーバーに自動的にプッシュされ、フックがあり、更新が実行されます。フックは、Djangoサイトをリロードする必要があるかどうかを決定します。 。スクリプトを作成したので、うまくいきます。
すべてのウェブサイトのファイルは私のユーザーアカウントoli
によって所有されています。現在、すべてのWebサイトはそのアカウントで実行されています。
時折、クライアントは十分に公平なサイトへのアクセスを望んでいますが、現在の構造でそれができるかどうかはわかりません。次のことを達成するには、状況を変える必要があると思います。
クライアントの新しいユーザーアカウントを作成して、クライアントがログインして彼らのサイト(および彼らだけの)サイトで遊ぶことができるようにすることができます。私は自分のクライアントを信頼していますが、他のクライアントを私がお互いを信頼するように強制するような立場に置かれるべきではありません。
自分のアカウントの場合と同じように、理想的には1つの場所ですべてのサイトで作業できますが、サーバー上でユーザーに基づいて分割されていれば生き残ります。
可能であれば、ユーザーにBZRを実行させて、簡単にロールバックできないばかげたファフで本番ブランチを台無しにしないようにします。これがどのように機能するかはご存知でしょう。クライアントにアクセスを許可し、「不思議なことに」何かが機能しなくなった場合、何が起こったかに関係なく、それは私のせいです。何が起こっているかを追跡できる必要がありますが、同様にクライアントは私の対話なしで変更を加えることができる必要があります(ゲートキーパーVCSモデルは私には機能しません)。
したがって、現在の設定を変更するために何でもできると仮定すると、これを行うための最良の方法は何ですか?
私の現在の考えは次のとおりです。
oli
として実行される単純なFTP(et al)サーバーをインストールして、アクセス許可を保持し、BZRを使用するように強制しようとしますが、それ以外の場合は更新を同期する必要があります。
これが実行可能であると思われる場合、システムが1人のユーザーと見なすFTPと同等の安全なものがありますが、同様に、特定のディレクトリに任意に制限できるものがあります(たとえば、ユーザークライアント-aはWebサイトディレクトリのサブセットしか表示できません)。
それを完全に揺さぶり、別個のSSHログインを使用し、Webサイトをクライアントの$HOME
ディレクトリに保持します。それがあなたの投票を得た場合、彼らが彼らのファイルにアクセスする以外のことをするのを止めるための私の最善の戦術は何ですか? chrootメカニズムでForceCommand internal-sftp
を制限するための素晴らしい組み合わせはありますか?
しかし、私は周りのものをハッキングすることから悪い習慣を学びました。 あなたはこれをどのように行いますか?
各ディレクトリのグループ所有者をそれぞれのクライアントのグループに変更し(そして、新しいファイルがそのgidを継承するようにdirにスティッキービットを設定し)、bzr + sshアクセスのみのアカウントを与えてから、bzrを使用させます。彼らのサイトをチェックして、あなたと同じように作業します。明らかに、すべてのクライアントグループに自分を追加します。