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

隔離する



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



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クライアントを開きたいと思います-あなたはここでそれについて読むことができます



All Articles