STNSのパッケージリポジトリを公開しました

先日記事を書いたSTNSのyum,aptリポジトリを公開したので紹介と、追加機能についてまとめてみました。

STNSとは

これまでLDAPやサーバごとに管理されていたLinuxユーザー、グループや、SSHの公開鍵をTOMLフォーマットの設定ファイルを用いた、JSONフォーマットのAPIで集中管理出来るようになるサーバとクライアントから成るシステムです。特にLDAPと比較し、導入、ユーザー管理が容易な点が特徴です。

前回の記事:Linuxユーザーと公開鍵を統合管理するサーバ&クライアントを書いた

リポジトリ

yum,apt共にshellスクリプトを実行するだけでリポジトリを追加することが出来ます。なお対応しているのは64bit版OSのみのためご注意ください。

CentOSの場合


$ curl -fsSl https://repo.stns.jp/scripts/yum-repo.sh | sh $ yum install stns libnss-stns

ubuntuの場合


$ curl -fsSl https://repo.stns.jp/scripts/apt-repo.sh | sh $ apt-get install stns libnss-stns

また前回の記事のバージョンに加えて下記に対応しています。

  • STNSから情報を取得するクライアントラッパーを分離
  • 名前解決時のベーシック認証に対応
  • chain_ssh_wrapperで複数の問い合わせ先から公開鍵を取得可能になった
  • chef Cookbookが爆誕

STNSから情報を取得するクライアントラッパーを分離

これはgolangでCGOを利用してコンパイルした場合に、netライブラリを利用するとgoroutineのデッドロックが発生した場合に検知できずに、固まってしまう状況が発生したためです。
go 1.5.1 linux/amd64 deadlock detection failed

$ /usr/local/bin/stns-query-wrapper /user/name/pyama
{
  "pyama" : {
    "id": 1001,
    "group_id": 1001,
    "directory": "/home/pyama",
    "shell": "/bin/bash",
    "gecos": "pyama",
    "keys": [
      "ssh-rsa xxx"
    ],
    "users": null
  }
}

これにより、引数に/user/name/<user_name>を受け取り、上記フォーマットのjsonを返してくれるコマンドであれば、自由に組み込みが可能になりました。

chain_ssh_wrapperで複数の問い合わせ先から公開鍵を取得可能になった

LDAPとの並行稼働時にSTNSとLDAP両方から公開鍵を取得することを想定した機能です。

  • /etc/stns/libnss_stns.conf

chain_ssh_wrapper = "/usr/libexec/openssh/ssh-ldap-wrapper"

上記のような定義を入れておくと、/usr/local/bin/stns-key-wrapper(STNSの公開鍵取得コマンド)とssh-ldap-wraper両方の公開鍵をマージして返却してくれます。

chef CookBookが爆誕

ServerとClientのレシピを分けているので、必要に応じてご利用ください。Clientについてはnscdのインストールまで行います。/etc/nsswitch.conf/etc/ssh/sshd_configは環境に応じて書き換えてください。nsswitch.confは下記のように書いておくとLDAPと並行稼動が可能です。


passwd: files stns ldap shadow: files stns ldap group: files stns ldap

導入した構成

既にSTNSはペパボで稼働しております。
スクリーンショット 2016-02-20 19.16.51
上位にLBをおいて冗長化した上で、STNSが稼働しているサーバでnginxを起動し、nginxでSSLを終端させてプロキシしています。STNS自体はgoで書かれたJSONサーバなので通常のWEBサーバと同じようにnginxなどのミドルウェアと連携することが出来ます。

ユーザー管理については、GitHubのAPIから特定のチームのユーザー情報を自動でTOML形式にdumpするスクリプトを準備し、そのスクリプトを実行した結果をPullRequestして、管理者がCapistranoでデプロイするという運用を行っており、GitHubでユーザー情報を管理することで、証跡も残るし、ユーザー管理も一元化でき一石六鳥ですね。

最後に

現状で一部のサービスや、共通インフラ周りでの導入が進んでおり、これから本格的に本番サーバに導入していくので、その過程で生まれる需要を掴んでしっかり拡張していきたいと考えています。
導入作業を進めていて自分で言うのも何ですが本当に楽なのでぜひ利用してみてください。またSTNSオーガニゼーションのかっこいいロゴを募集しています。興味のある方、ご提案お待ちしております。

Comments are closed.