先週の土曜日、Habrirのコメントに「まあ、先日スクリプトを公開します」と書いて、先日来ました。 突然。
スクリプトへの
リンク 。
一般的なvpsのセットアップ
設定する前に、私は空軍がセキュリティの防波堤になると固く決心しました。 システム内の各ドメインに独自のユーザーが必要です。 これは非常にきちんとしていて、少しセキュリティが追加されます。 私はオプションを検討し始めました、それらの5がありました:
- ルートの下から起動される1つのfcgiデーモンへのngingxのプロキシ。 これは優れたソリューションですが、単一ドメインバージョンでのみ機能しますが、共有ファイルのようなものが必要でしたが、1つのプロセスでサーバー上の任意のドメインに到達できることがわかりました。 ふさわしくない。
- システム内の各ユーザーについて、cgiプロセスを開始し、常にメモリに保持し、nginxをプロキシします。 私はそのような決定を疑い、それを実装したくありませんでした(多分、客観的な考慮事項がありましたが、覚えていません)。 しかし、一方で、誰かが私にコメントでこの解決策が非常によく見える と言った。 私は彼を信じますが、次のページで確認します。
- freebsdで、彼らはすべての問題を解決する「刑務所」と呼ばれる魔法の事があると言います。 しかし、それはfreebsdです。 ふさわしくない。
- 各ドメインのchrooting。 空軍のかさばりと死のせいでやらないことにしました。
- 私はnginx + apacheを使用した従来の嫌なパフォーマンスソリューションを選択しましたが、Apacheではセキュリティのためにmpm-itkモジュールを使用します 。 それはうまく動作しますが、パフォーマンスはカボチャのレベルに近いです:サーバーのダイナミクスに対する20の同時リクエストで十分です:)。
ユーザーとドメインの整理について
Nginx:nginxの下からNginxを起動し、ドメイン用に作成された各ユーザーのグループにユーザーnginxを追加します。 / home /内のすべてのディレクトリに750のアクセス許可を設定して、nginxがファイルを読み取れるようにしますが、それ以上は必要ありません。
ドメインごとに個別のユーザーが作成されます。 作成されたドメインを見やすくするために、ユーザーを逆表記で呼び出します。たとえば、hshhhhh.hahrahabr.ruはru_habrahabr_hshhhhhになります。 これは、サーバー上でいくつかの第3レベルのドメインが開始されたときに非常に便利になります。 残念ながら、私はすぐにこれに来ず、すべての名前を変更するのは面倒でした。
Apacheは、ドメインを所有するユーザーの下からワーカーを起動します。つまり、ホームディレクトリとシステムファイルのみを表示できます。 いずれにせよ、私の空軍には見知らぬ人はいません。
スクリプトについて
今、実際には、すべてが開始されたために、すぐに予約します:
- 私はbyldoderとphpshnikであることを完全によく理解しています。
- 私は自分で台本を書きましたが、だれにも見せようとはしませんでした。
- 最初の2つのポイントに基づいて、私は苦労しないことを弱く決め、bashではなくphpで記述しました。 異常なプログラミングの最新のトピックに照らして、私は恥ずかしく思いますが、書き直しません。
- 私の英語の知識は非常に高いため、コメントの誤りは避けられません。
- 引用符と文字列で地獄にあることは知っていますが、繰り返しますが、書き直しません。
スクリプトは次のことを行います。
- 「mysite.ru」などのドメイン名を入力する必要があります。
- mysqlの将来のユーザー名、ホームディレクトリ、ユーザー名を表示します。
- ユーザーを作成し、システムに存在するかどうかを確認します。 はいの場合、彼は死に、そうでない場合、ホームディレクトリを作成し、その中にpublic_htmlを作成し、index.htmlを作成し、そこにドメイン名を書き込み、正しいホームディレクトリ全体に正しい所有者と権限を割り当てます。
- 彼はnginxのルールを作成するかどうかを尋ねます。 もしそうなら、彼はテンプレートを取り、その中の変数を正しいパスで置き換え、nginxのルールをsites-availibleに置きます。 次に、nginxでこのルールが有効になっているかどうかを確認し、有効になっている場合は、sites-enabledでシンボリックリンクを作成し、nginxに構成を再読み取りするように指示します。
- Apacheに対しても同じことを行い、nginxに対してルールを作成することを拒否した場合でも、Apacheに対してルールを作成できます。 一方で、欠陥であり、他方で、それは役に立つかもしれません(まだ)。
- 彼は、データベースを作成するかどうかを尋ね、ユーザー名を16文字に切り捨て、mysqlでこの存在を確認し、もしあれば、一意の名前を入力するまで拷問します。 ベースを作成し、アクセスを処方します。
- すべてのパスワード(sshおよびmysql用)をファイルに保存して、終了します。
同時に、パスワードはルートのホームディレクトリにクリアテキストで保存されます-そこに
既にアクセスがある場合、なぜパスワードを非表示にしますか?
また、このスクリプトでは、新しく作成されたユーザーがssh経由で接続することはできません。これは手動で行う必要があり、このプロセスを自動化する意味はありません。
スクリプトへの制御
リンク 。
UPD :nginxに2つの便利な設定を追加するのを忘れていました。
mpm -itkの興味深い機能に関する特定の
mike@danilenko.nameからのUPD2:
私は自分のサーバーで私たちの関連オフィスのいくつかのサイトをホストし、また、FreeBSDからUbuntuへの移行でmod_itkを試してみることにしました。 遅いものの、サイトへの負荷はまったく大きくないため、私には関係ありませんでした。このモジュールには大きな欠点が1つあります。これは外国のリソースに記載されています。
たとえば、Apacheでキープアライブを使用すると、Yandexからサイトのインデックスを作成するロボットが、一度に1つのIP上のすべてのサイトを通過します。 しかし、権利が異なるため、サイトxxx.ruにアクセスしてインデックスを作成すると、サイトyyy.ruにアクセスします... Apacheはすでに権利xxx.ruで作業しているため、彼に許可しませんでした:(
これは、Apacheでキープアライブをオフにすることによってのみ解決されます。おそらく、バックエンドとして作業しているときはそれほど怖くはありませんが、たとえば、別のフォークで静的を提供します。
UPD3 :しかし、
Kuzmich は次のように述べています。
ドキュメントに記載されているように、問題は6か月前に修正されました。これらの場合、接続は現在閉じられています。
シリーズのように! ショック! 陰謀! 調査!