お楽しみください! オープンソースで認証サーバーを分離する

隔離する

システム管理者チームの作業は、サポートされているサーバーが多すぎる場合に発生します。 そして、多分多くの人々、そして再びセキュリティがあります。何かがうまくいかなかった場合、あなたはどこからでもキーを削除する必要があります。

300人の顧客がいます。 一部の人にとっては、これは「唯一」ですが、私たちにとっては、メンテナンスのためにほぼ2000台のサーバーです。 60人の従業員の2,000個のパスワードのデータベースを保存、更新、管理し、60人がサーバーのパスワードを知っているたびにクライアントに説明しないように、認証サーバーを作成し、Isolateという名前を付けました。 猫の下に、機能の説明とGithubへのリンクがあります-オープンソースに投稿しました。

従業員がサポートされている特定のサーバーにアクセスするための個別の承認サーバーがあります。 私たち自身がこの開発を長い間成功裏に使用してきましたが、今度は名前を付けてコミュニティと共有することにしました。

したがって、Isolateは、すぐに展開するための一連のuthサーバーとansible-playbookユーティリティです。 ハードウェアキー(特にセキュリティ!)を使用してログインでき、膨大な数のプロジェクト/サーバーを便利に管理できます。 この場合:


サポートのためにサーバーを受け入れ、その上にsudoユーザーを作成し、サーバーの認証キーを処方します。 次に、従業員はハードウェアキー(yubikeyを使用)を使用して認証サーバーにログインし、s(検索)コマンドはサーバーを見つけ(プロジェクト、サーバー、サイトなどの名前で)、SSHを介してg(go)を使用して接続します。

分離のハイライト:


それはどのように見えますか


サーバーリストの例:

[~]$ s . myproject ------ 10001 | 11.22.22.22 | aws-main-prod 10002 | 11.33.33.33 | aws-dev 10003 | 11.44.44.44 | vs-ci ------ Total: 3 [~]$ 

ポイント この場合、すべてのサーバーを検索するための汎用パターンとして。

カスタムポートとSSHプロキシを使用してサーバーを入力する例:

 [~]$ g myproject aws-dev Warning: Permanently added 3.3.3.100 (RSA) to the list of known hosts. Warning: Permanently added 10.10.10.12 (RSA) to the list of known hosts. [root@dev ~]$ 

任意のパラメーターを使用して任意のサーバーを入力する例(ISOLATEの構成なし):

 [isolate ~]$ g 45.32.44.87 --user support --port 2232 --nosudo Warning: Permanently added 45.32.44.87 (RSA) to the list of known hosts. 

動作原理


インストールの詳細については、Githubの READMEを参照てください。すぐにどのように機能するかについて説明します。

アクセス自体は、OSのシステムユーザーによって制限されます。 アクセス層として、sudo + ssh.pyラッパーが使用されます。その目的は、sudoが危険な構造を取得するのを防ぐことです。 ssh.pyは引数を検証し、SSHクライアントを起動します。これが責任を終了します。

例:

 $ sudo -l (auth) NOPASSWD: /opt/auth/wrappers/ssh.py $ sudo /opt/auth/wrappers/ssh.py -h usage: ssh-wrapper [-h] [--user USER] [--port PORT] [--nosudo] [--config CONFIG] [--debug] [--proxy-host PROXY_HOST] [--proxy-user PROXY_USER] [--proxy-port PROXY_PORT] [--proxy-id PROXY_ID] hostname positional arguments: hostname server address (allowed FQDN,[az-],ip6,ip4) optional arguments: -h, --help show this help message and exit --user USER set target username --port PORT set target port --nosudo run connection without sudo terminating command --debug --proxy-host PROXY_HOST --proxy-user PROXY_USER --proxy-port PROXY_PORT --proxy-id PROXY_ID just for pretty logs ------ 

このスクリプトはログの記録も行います。ログファイルの名前とその場所を形成し、sudoを作成したユーザーの名前を決定し、ログファイルのディレクトリを作成します。 各ログの隣には、JSONでの現在の接続のオブジェクトを含む* .metaファイルがあります。

helper.pyスクリプトにはすべての基本機能が含まれており、ssh.pyによる分離により、ユーザー権限の定義やその他の安全でない機能のエラーを恐れることなく、複雑なロジックでさえ実装できます。

shared / bootstrap.shで使用される関数は、スクリプトにラップされています。

たとえば、サーバー検索:

 s () { if [[ $# -eq 0 ]] ; then echo -e "\\n Usage: s <query> \\n"; return elif [[ $# -gt 0 ]] ; then "${ISOLATE_HELPER}" search "${@}"; fi } 

追加のパッケージをインストールせずにプロキシを使用できます。 十分なSSHサーバーとそれにインストールされたnc / netcat。 最新のSSHD / SSHでポートフォワーディング機能を使用することもできますが、この機能をサポートしていない古いSSHDがまだたくさんあるため、この手法はお勧めしません。

/ alias g関数で接続しようとすると、helper.pyも呼び出されます。これは引数をチェックし、アドレス/ IP / FQDN /プロジェクトを分類し、必要な引数でssh.pyを起動します。 プロジェクト/グループを指定せずにIP / FQDN経由でログインしようとすると、SSHのデフォルト設定が使用されます。

サーバーのすべての設定は、正確な指示がある場合にのみ使用できます。次に例を示します。

 $ g rogairoga nyc-prod-1 

または、プロジェクト名の後にサーバーが企業プロキシの背後にある場合、任意のFQDN / IPアドレスを指定できます。

 $ g rogairoga 192.168.1.1 

gに共通するすべての追加の引数も利用できます。

 $ g rogairoga 192.168.22.22 --port 23 --user support --nosudo 

サーバーIDでログインすることもできます。

 $ g 12345 

結論の代わりに


IsolateのソースコードはGithubで入手できます。 このソリューションが、多くのDevOpsチームがサーバーとの作業を構築および簡素化するのに役立つことを願っています。 コメント、願い、そしてもちろん、リクエストのプールを待っています! Telegramチャットでアイデアを提案したり、質問たりします。

今後の計画:


そして次に、Telegramクライアントを開きたいと思います-あなたはここでそれについて読むことができます

Source: https://habr.com/ru/post/J334148/


All Articles