ある程度の数のサーバを扱っていると、linuxユーザの管理が大変になってきます。もちろん手で設定するのは大変ですが、AD系ではオーバースペックかつ、導入の手間が大きい場合があります。
そこで、STNSを使い、ユーザと公開鍵の管理のみをシンプルに行えるようにし、STNSサーバのみ変更することで対応できるようにし、linuxユーザ管理の手間を下げることができます。
公式にインストールガイドがありますが、Debianの場合少し違うのと、多少ハマったので、Debian jessieで簡単に構築検証できる環境を作りました。
Vagrant/virtualboxを使って仮想サーバを作り、そこにSTNSとそれを使ってログインすることができる環境をansibleで作ります。
検証方法
READMEの通りに進めれば、STNSサーバとそれを使ってログインできるクライアント側のサーバが出来上がります。
出来上がった後は、以下のようにstns_server側のstns.confを変更して、検証を進めることができます。
# STNSサーバに接続
vagrant ssh stns_server
# 設定ファイルを編集
sudo vi /etc/stns/stns.conf
# STNSのリロード
sudo service stns reload
もしくはansibleのtemplateをいじっても良いです。
ハマったことなど
その他、検証中にはまったことをいくつか書きます。
/etc/nsswitch.confの編集に注意
検証している際に、 /etc/nsswitch.conf
のフォーマットを誤って更新してしまったことがありました。その場合、他のユーザでもログインできなくなるので注意してください。
たまたまvagrantユーザでログインしていたコンソールでは、Who are you?
と聞かれて何もできなくなりました。検証用のサーバなので、vagrant destroy
で消して作り直せば問題ないですが、運用中のサーバでは気をつけましょう。
playbookの内容は、使っているboxに合わせてあるので、自分で構築したサーバにはうまく適用できない場合があります。
stns-key-wrapperのエラーが出てログインできない。(解決済み)
--- 2016.08.08追記 ---
STNS libnss 0.2.0にて、配置場所が変更になり、この問題は発生しなくなりました。検証用のplaybookも修正しています。
--- ここまで ---
クライアント側で、Opensshのconfigにsans-key-wrapperを指定しますが、以下のエラーが出てログインできない状態になります。sshしてる側は、ただのPermission denied
です。
ログインしようとしているサーバの/var/log/auth.log
または/var/log/syslog
に以下のようなエラーが出ます。
sshd[14922]: error: Unsafe AuthorizedKeysCommand: bad ownership or modes for directory /usr/local/bin
調べると、鍵のファイルなどの権限が広く設定されている場合に発生するものです。ディレクトリを700,ファイルを600(鍵ファイルの場合)するように促されます。
しかし、/usr/local/bin
の権限を変えるのは、、、ということでsampleでは、/stnsというディレクトリを作り、そこにstns-key-wrapper
をコピーして権限を変えて、sshdの設定で指定しています。
不思議なのは、一度権限を変えてログインできるようになると、そのあとは権限を戻しても特にエラーにならない点です。
ここはちょっと何が正解かはわかっていない状態です。
Debian 7 (wheezy)の場合、Opensshをバックポートから入れる必要がある。
こちらの記事にあるように、使われているAuthorizedKeysCommandがOpenSSH 6.2以降からになるためです。wheezyは通常だとOpenssh6.0が入ります。
nscdが起動しない
エラーで起動しませんでしたが、キャッシュならとりあえずはいらないかなと思ったのと、なくても動くので、詳しくは調べていません。
その他
他にも、STNSでsudoパスワードの管理を行うことができます。こちらはまた別途書こうと思います。
また、参考の記事のように、WebAPIのインターフェイスを満たせば、独自のバックエンドを作ることもできるようなので、自分たちのシステムでユーザと公開鍵などを扱っていれば、連携も行いやすいかなと思います。