目的:複数の開発チームとテスター向けにLinux作業環境を編成する。 仮想マシンの総数は3〜4ダースです。
この記事は、「現状のまま」の詳細なステップバイステップガイドではなく、実際の経験の説明と使用するツールの簡単な概要にすぎないことをすぐに言います。 読者は、たとえば必要な依存関係、パッケージのインストール、ネットワークの設定など、問題を自分で解決できることが理解されています。 意図的にスクリーンショットと詳細な構成ファイルを添付せず、読者がリストされたツールを個別に調査する機会を残します。
必要です:
- 特定のパターンに従って仮想マシンの展開を自動化し、展開時間を短縮し、
- ユーザー認証を簡素化する
- 各仮想マシンで迅速なサービス構成を提供する
- 管理者に経済全体の単一のコントロールセンターを提供し、同じタイプの構成ファイルの多くの日常的な編集から管理者を救います。
- システム全体、および各仮想マシンの状態のリアルタイム監視を提供します。
ツールの要件:オープンソース、セットアップと使用の容易さ、Webインターフェイス、または構成用の強力なユーティリティパッケージ。
使用したソリューション: ubuntu 10.04およびその他のバージョン、proxmox openvz、chef、openldap、GIT、zabbix
1.認証。
openldapをデプロイします。 最近、openldapパッケージは動的構成スキームに切り替えられたため、すべての構成は特別なldifファイルを使用して実行されます。 私はそれが良いか悪いかを知りません。それは珍しいことであり、少なくとも些細なことではありません。 たとえば、 この記事を使用できます。 同じ記事を使用して、必要に応じてLDAPレプリケーションを構成できます。
LDAPフロントエンドを構成しなかったため、 LAM Webコントロールパネル (v3.4.0)がこれを行いました。 LDAP用のより便利なダッシュボードは見つかりませんでした。 GOSAの機能はもう少し多くありますが、構成がはるかに複雑であり、残りの製品の外観と機能は率直に言えば十分ではありません。
開発者とテスターの認証手順をできる限り簡素化するために、パスワードに加えて公開鍵を収集し、LDAPに配置することが決定されました。
このスキームにより、SSHキーを使用してパスワードなしで認証できます。 キーと一般的なSSH構成に関する記事はここにあります。authorized_keysファイルの代わりに、LDAPからの情報を使用します。
これを行うには、LPKパッチ(以下について)でopensshを収集し、LDAPでopenssh-lpk_openldap.schemaスキームを接続する必要があります
root:/#cat lpk.ldif
dn: cn=openssh-lpk,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: openssh-lpk
olcAttributeTypes: {0}( 1.3.6.1.4.1.24552.500.1.1.1.13 NAME 'sshPublicKey' DES
C 'MANDATORY: OpenSSH Public key' EQUALITY octetStringMatch SYNTAX 1.3.6.1.4.
1.1466.115.121.1.40 )
olcObjectClasses: {0}( 1.3.6.1.4.1.24552.500.1.1.2.0 NAME 'ldapPublicKey' DESC
'MANDATORY: OpenSSH LPK objectclass' SUP top AUXILIARY MAY ( sshPublicKey $
uid ) )
root:/#ldapadd -Y EXTERNAL -H ldapi:/// -f lpk.ldif
LAM Webインターフェイスの設定は簡単であり、あまり注意する必要はありません。 インストール後、パネルはLDAPフロントエンド自体を構成できます。 設定パネルで、SSH公開鍵モジュール(ldapPublicKey)も接続する必要があります。
2. SSH
リポジトリから、彼はLDAPから公開鍵を取得する方法を知りません、彼に教えます。
LPKテクノロジーについて読んで、 ここからパッチを入手してください。
root:/#apt-get source ssh
root:/#cd openssh-5.3p1
root:/#patch -p1 < contrib-openssh-lpk-5.4p1-0.3.13.patch
リダイレクトされたすべてのものに、2つのファイルと2つの行があり、手動でパッチを当てました。
debian /ルールでは、.. / configureに2つの場所を追加する必要があります
--with-libs="-lldap" --with-ldflags="-L/usr/lib" --with-cppflags="-I/usr/include -DWITH_LDAP_PUBKEY"
このパッケージが正常に動作しているシステムにアクセスし、リポジトリの動作バージョンと競合しないようにするには、いくつかの方法があります。たとえば:
- パッケージバージョンのアップグレード
- debian / controlおよびdebian / rulesを修正し、他の名前でパッケージに名前を付けて、すべてを収集しようとします。
最も簡単な方法はアップグレードすることです。 パッケージは問題なく立ち上がりますが、将来的には更新に問題が生じるでしょう。 インフラストラクチャは外部から閉じられているため、仮想マシンの寿命は比較的短く、この環境のセキュリティ問題は特に重要ではないため、この方法を選択しました。 実稼働環境では、この方法はもちろん適切ではありません。
変更ログを変更し、パッケージを収集します
root:/#dch -i
root:/#dpkg-buildpackage -b
出力では、特定の「openssh.deb」を取得します。これは、特定の条件下でLDAP「sshPublicKey」を照会できます。
LDAPのユーザーエントリ
- オブジェクトクラス「ldapPublicKey」
- cオブジェクトクラス「posixAccount」
- 属性「sshPublicKey」が入力された状態
LDAPのグループエントリ
- cオブジェクトクラス「posixGroup」
- 属性「cn」とその中のグループの名前
- 属性 'memberUid'を使用して、このグループのuidメンバーをリストします。
/ etc / ssh / sshd_configの必須設定
UseLPK yes
LpkServers ldap://10.10.10.10/ # LDAP
LpkUserDN ou=People,dc=office #
LpkGroupDN ou=group,dc=office #
LpkBindDN cn=admin,dc=office # ,
LpkBindPw secret #
LpkServerGroup developers #
LpkForceTLS no # TLS, .
LpkSearchTimelimit 3 #
LpkBindTimelimit 3 #
LpkPubKeyAttr sshPublicKey # LDAP
LDAP設定に応じて、不要なパラメーターを簡単にコメントアウトできます。
3.構成を展開します。
仮想マシンのフリート全体が実質的に同じであるため、opscodeリポジトリーからchef構成にデプロイメントシステムを使用しました。
このシステムは非常に強力で柔軟性があり、考えられるほとんどすべてのインストールを自動化できます。
Postgres + Postgisを構成するための簡単なレシピの例
# Cookbook Name:: postgres
# Recipe:: default
package "postgresql" do
action:install
options "--force-yes"
end
package "postgresql-contrib" do
action:install
options "--force-yes"
end
package "postgis" do
action:install
options "--force-yes"
end
package "postgresql-9.0-postgis" do
action:install
options "--force-yes"
end
script "install_postgis" do
interpreter "bash"
user "postgres"
cwd "/tmp"
code <<-EOH
createdb template_postgis
createlang plpgsql template_postgis
psql -d template_postgis -f /usr/share/postgresql/9.0/contrib/_int.sql
psql -d template_postgis -f /usr/share/postgresql/9.0/contrib/postgis-1.5/postgis.sql
psql -d template_postgis -f /usr/share/postgresql/9.0/contrib/postgis-1.5/spatial_ref_sys.sql
createuser -s pgsql
EOH
end
クライアントでLDAPを構成します。 ここでは、クライアントがLDAPにログインできるように、設定済みのファイルをクライアントマシンの設定で単純にレイアウトします。
# Cookbook Name:: openldap
# Recipe:: auth
package "nscd" do
action :upgrade
end
package "libnss-ldap" do
action :upgrade
end
package "libpam-ldap" do
action :upgrade
end
service "nscd" do
supports :status => true, :restart => true, :reload => true
action [ :restart ]
end
service "ssh" do
supports :status => true, :restart => true, :reload => true
action [ :restart ]
end
script "prepare dirs" do
interpreter "bash"
user "root"
cwd "/tmp"
code <<-EOH
mkdir -p /etc/ldap
EOH
end
cookbook_file "/etc/libnss-ldap.conf" do
source "libnss-ldap.conf"
mode 0644
owner "root"
group "root"
end
cookbook_file "/etc/pam_ldap.conf" do
source "pam_ldap.conf"
mode 0644
owner "root"
group "root"
end
cookbook_file "/etc/nsswitch.conf" do
source "nsswitch.conf"
mode 0644
owner "root"
group "root"
notifies :restart, resources(:service => "nscd"), :immediately
end
%w{ account auth password session }.each do |pam|
cookbook_file "/etc/pam.d/common-#{pam}" do
source "common-#{pam}"
mode 0644
owner "root"
group "root"
notifies :restart, resources(:service => "ssh"), :delayed
end
end
chefを使用して、すでに構成されているzabbix-agentdとそれに設定されたZTCスクリプトのセットも各仮想マシンにインストールします。 自動検出によってzabbix仮想マシンを起動した後、それをプールに追加し、必要なテンプレートをすぐに添付します。 zabbixコントロールパネルもLDAPに接続されています。 ここで行わなければならなかった唯一のことは、LDAPとzabbixユーザーの自動同期のためのスクリプトでした。監視はユーザー自身を作成することはできません。
現在、公開sshキーは中央リポジトリに保存されているため、このスキームにより、GITをGITプロセスに簡単かつ透過的にユーザーに統合することも可能になりました。
Provmoxコントロールパネル、openvz、LVMストレージ用に事前構成されたテンプレートにより、新しい仮想マシンの展開を簡素化および高速化できました。 割り当てられたすべてのリソースを制御し、負荷がかかったときにすべてが予測可能かつ安定して動作します。 このような仮想マシンを実装および保守するコストは、他の仮想化システムと比較して非常に低いです。
これはテストと開発の環境であり、重要なデータやバックアップの必要がない、完全に外部の環境に閉じられていることを思い出させてください。 したがって、このスキームでは、安全性とフォールトトレランスの点で多くの非常に重要なポイントが失われました。 このスキームでの運用では、証明書、TLS、SSL、パスワードポリシー、さまざまなPAM保護メカニズム、sudo、およびファイアウォールルールとグループポリシーについて考慮する必要があります。
その他のリンク:
インターネットプロジェクトのLDAP
Chefまたは1000台のサーバーを管理する方法
OpenVZを使用したLinux仮想化
Zabbixユニバーサル監視システム-はじめに