STNS

Simple TOML Name Service

アドバンスドガイド

SSHログイン時にホームディレクトリを作成する

sshログインした際に、ユーザーのホームディレクトリは作成されません。/etc/pam.d/sshdに設定を行うことでホームディレクトリを自動で作成することが出来ます。

$ echo 'session    required     pam_mkhomedir.so skel=/etc/skel/ umask=0022' >> /etc/pam.d/sshd

link_users機能を利用し、デプロイユーザーを追加する

Webサービスにおいて、アプリケーションをデプロイする際に、デプロイユーザーを作成し、デプロイする運用が多くあると思います。大体のケースにおいて、デプロイユーザーの~/.ssh/authorized_keysにデプロイするユーザーの公開鍵を羅列して運用することが多いでしょう。STNSのlink_users機能を利用すると同様のことがシンプルに実現できます。

[users.deploy]
id = 1
group_id = 1
link_users = ["example1","example2"]

[users.example1]
id = 2
group_id = 1
keys = ["ssh-rsa aaa"]

[users.example2]
id = 3
group_id = 1
keys = ["ssh-rsa bbb"]

上記の定義を行うと、deployというユーザー名でexampl1example2がログイン可能となります。裏の動きとしてはdeployというユーザー名でSSHログインを行う際に、example1とexample2の公開鍵であるssh-rsa aaaおよびssh-rsa bbbを返却しています。

link_groups機能を利用し、組織の階層構造を表現する

サーバのパーミッション制御を行う際に、部署単位で行いたい場合があります。例えばA課で読み取り書き込み権限を与え、A課が所属するB部では読み取り権限のみ与えると行ったケースです。STNSではこういったケースにも対応する事ができます。

[groups.department]
users = ["user1"]
link_groups = ["division"]

[groups.division]
users = ["user2"]

この例ではdepartmentグループにuser1が所属しており、divisionグループにはuser2が所属しています。またdepartmentにはlink_groupsdivisionを定義しております。 これによって、departmentにはdivisionも所属しているという状態になり、idコマンドを発行すると下記のようになります。

$ id user2
uid=1001(user1) gid=1002(division) groups=1001(department),1002(division)

これによりuser2はdepartmentに所属するdivisionのユーザーということを表現できます。

sudoパスワードを管理する

STNSでは2種類の方法でsudoのパスワードを管理することが出来ます。

  1. sudo専用のアカウントを設け、共通パスワードとして管理する。
  2. 従来通りのユーザーごとのパスワードを利用する。

sudo専用のアカウントを利用する

STNSにsudo用のアカウントを設け、パスワードを管理することが出来ます。イメージとしては第2のrootパスワードです。

下記のようにサーバにsudo用の定義を行います。

[sudoers.example]
password = "$6$ZbcEUwqLWMcV7fr5$4krw.1ULrmZytoMwuV5.pIqjEo1Ngc9K15zYQ..."

パスワードハッシュについてはstns-passwdコマンドを利用してください。

$ stns-passwd p@ssword
$6$ZbcEUwqLWMcV7fr5$4krw.1ULrmZytoMwuV5.pIqjEo1Ngc9K15zYQ.KGZa.8T4EmCd1RfUM6rfviIpAwncNpnF9Yjyc0.30c2dN1J/

次にクライアントのpamの設定を行います。

#%PAM-1.0
auth       sufficient   libpam_stns.so sudo example
auth       include      system-auth
account    include      system-auth
password   include      system-auth
session    optional     pam_keyinit.so revoke
session    required     pam_limits.so

ポイントとしてはlibpam_stns.soの2つの引数です。ひとつ目の引数sudoでsudo用のアカウントを利用することを指定し、ふたつ目の引数でアカウントexampleを利用することを指定しています。 この状態で/etc/sudoersに正しく設定が行われていれば、sudoする際に[sudoers.example]で定義したパスワードを入力することにより、sudoコマンドを利用することが出来ます。

ユーザー毎のパスワードを利用する

STNSではユーザーごとにパスワードハッシュを定義することが出来ます。

[users.example]
id = 1000
group_id = 1000
directory = "/home/example"
password = "$6$ZbcEUwqLWMcV7fr5$4krw.1ULrmZytoMwuV5.pIqjEo1Ngc9K15zYQ..."

このように定義した状態でクライアント側のpamを下記のように定義します。

#%PAM-1.0
auth       sufficient   libpam_stns.so
auth       include      system-auth
account    include      system-auth
password   include      system-auth
session    optional     pam_keyinit.so revoke
session    required     pam_limits.so

前項と異なりlibpam_stns.soに引数を与えない場合は、Linuxからユーザー名を取得し比較を行うため、ユーザーに定義したパスワードハッシュでsudo時の認証を行うことが可能です。

また下記のように定義することによりログインなどの認証もSTNSに定義したユーザーパスワードで行うことが出来ます。

#%PAM-1.0
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        sufficient    libpam_stns.so
…

This theme is a fork of Solo.