多くのシステム管理者は、一見非常に些細なタスクを実行するために「自転車を発明」しました。 サーバーの保守を妨げるようになったサーバーのログに触発され、これらの自転車の1つに関する発明に関する公式文書から回復した詳細なストーリーを伝えたいと思います。 たくさんの文字と(h)コンソールに注意してください!
約2年前、私の仕事のために、GNU / linuxオペレーティングシステム(かなり古いubuntuを読んでください)を含むラックマウントサーバーと、16ギガバイトの容量を持つ2台のトランセンドUSBフラッシュドライブ
(そのようなボリュームが必要な理由はわかりません)が提供されましたキーキャリア。
タスクが設定されました:サーバー上にあるデータベースでパーティションを暗号化して、不正アクセスを防ぎます。
タスクを達成するために、
LUKSパーティション暗号化テクノロジーが選択されました。
次のツールも必要でした。
- 起動可能なGNU / linuxオペレーティングシステムと十分な空き容量を含む外部メディア(usb hdd)。
- スクリプトを記述およびテストするためのarch-linuxオペレーティングシステムを搭載したコンピューター。
当初は、暗号化されたファイルシステムのマウントと接続に組み込みの配布アルゴリズムを使用することを計画していましたが、経験の不足または他の何らかの理由により停止に至りました。 まあ、まず最初に。
もちろん、最初は外部メディアから起動し、サーバーのすべてのデータの完全バックアップを作成しました。同時に/ etc / fstabファイルを調べました。 バックアップを削除した直後は誰もスーパーユーザーのパスワードを知らなかったため、ルートユーザーの行に知っているパスワードのハッシュを書き込むことで/ etc / shadowファイルを変更しました。 このようにしてインストールされたシステムへのアクセスを取得したので、私は働くように設定しました:
ネットワークに接続:
LUKS暗号化システムを操作するためのツールを含むcryptsetupユーティリティをインストールしました。
ファイル「/ tmp / key」に書き込まれた256文字の擬似ランダムシーケンスを生成しました。
ところで、tmpは工作員にマウントされました。 最初のボリュームの2番目のパーティションのタイプをcrypto_LUKSに設定し、LUKSアルゴリズムを使用して暗号化された実際のパーティションにマッピングされる仮想パーティション「/ dev / mapper / dtb」を作成しました。
暗号化にマップされた仮想パーティションで、彼は新しいext4ファイルシステムを作成し、/ mntディレクトリにマウントしました。
次のコマンドを使用して、データ転送を実行します。
postgresqlデーモンを停止し、Midnight Commanderプログラムを使用して、すべてのファイルを/ var / lib / pgsqlから/ mntにコピーし、その後/ var / lib / pgsqlディレクトリをクリアしました。 最初のボリュームの暗号化された2番目のセクションは、/ var / lib / pgsqlディレクトリにマウント解除されました。
パーティション暗号化キーとして使用されるファイル「/ tmp / key」は、フラッシュドライブの1つに送信されました。
フラッシュドライブを調理する方法フラッシュドライブがパッケージに直接持ち込まれます。 フラッシュドライブの1つをコンピューターに挿入すると、フォーマットされているかどうか、およびどのファイルシステムにあるかを確認するために、メインセクションの前に7メガバイトの空き領域があることがわかりました。 すぐに、誤ってキーを削除することからユーザーを保護する方法が発生しました! ext2でフォーマットされたセクションを先に作成しました。 Windowsでは、ユーザーがフラッシュドライブのメインセクションをフォーマットしても、サーバーの起動機能が失われることはありません。
Midnight Commanderプログラムとコマンドラインユーティリティを使用して、暗号化されたパーティションの構成が/ etc / cryptsetupファイルに追加されました。 ただし、テストリブート中に、オペレーティングシステムのロードの特性により、/ etc / cryptsetupファイルの処理が発生するまで/ etc / fstabからキーメディアをマウントできないことがわかりました。その結果、暗号化されたパーティションはマウントされません。キーファイルなしではマウントできません。
適切なコマンドを使用して、必要な指示(キーメディアのマウント、暗号化パーティションのアクティブ化、キーパーティションのアンマウント、暗号化パーティションのマウント)が/etc/rc.localファイルに入力されました
このアクションは肯定的な結果をもたらしました(ダウンロードが完了した後、パーティションが適切な場所にマウントされました)。しかし、rc.localファイルはpostgresqlデーモンよりもずっと遅れて起動され、デーモンの操作中にデータベースファイルがマウントされたため、予期しない結果を招く可能性がありました
現在の状況を分析し、バックアップセクションとスワップパーティションを暗号化する必要性を考慮に入れた後、データベースからの情報およびスワップスペースにある可能性があるキーへの不正アクセスを防ぐために、特別な起動スクリプトを作成することにしました。 ロードの初期段階で、postgresqlデーモンが起動してスワップが必要になるまで、キーデバイスと暗号化パーティションをマウントします。
その結果、上記のすべての機能を実行する特別な開始bashスクリプトが作成されました。
- キーデバイスを検索してマウントしました
- キーデバイスが検出され、正常にマウントされた場合、暗号化されたパーティションに接続してマウントします
- 安全に取り外すためのマウントされていないキーデバイス
- 以前の操作の結果に関係なく、スワップパーティションが暗号化されたパーティションにマウントされるようにします
また、スクリプトの作成とデバッグの過程で、次の機能を実装することができました。
- fstabファイルの構文に類似した単純な構文を持つ特別なファイルを使用してluksアルゴリズムを使用して暗号化されたすべてのボリュームを集中管理する機能
- 暗号化されたパーティションの数に制限のないキーを無制限に使用する理論上の能力(システムリソースの枯渇に関連する特定の制限があります)
- キーファイルの異なるセットを使用して、さまざまな独立したキーメディアを作成する機能
- 暗号化されたドライブのさまざまなセットをマウントおよびアンマウントする機能
スクリプトを作成する過程で、ubuntuリポジトリに古いバージョンのcryptsetupパッケージが含まれていることがわかりました(指定されたUUIDでセクションを生成できませんでした)。したがって、プログラムの現在のバージョンはソースコードからコンパイルされ、標準のubuntuパッケージの代わりにインストールされました。
bashスクリプトは/etc/init.d/encryptdbにインストールされました。 スクリプトをインストールした後、システムの一般的な状態を変更しないさまざまなデバッグアクションが実行されました。 デバッグ後、update-rc.d encryptdb defaultsコマンドを使用したスクリプトがアクティブ化され、自動モードで実行されました。 スクリプトとともに、設定ファイル/ etc / keycrypt / keycryptabおよび/ etc / keycrypt / keydrvがインストールされました。
アプリケーション:
ロシア語のコメント付きEncryptdbスクリプト
現在、このソリューションはすでにいくつかのサーバーで実行されており、Debianおよび
(彼がsystemdを取得する前でも)。