STNSでLinuxのユーザ管理を統合してみる

 とある事情で複数台のLinuxで同一のユーザを扱うとかいう話で出てきて、都度ユーザを追加とかいう面倒なことをしなければならず、何台にも及び、かなりイラっとしたので調べてみてSTNSなるものに行き着いた。

なんかLinuxのユーザ情報を一元管理できて複数台で認証情報を統合できるとかいうことらしい。最近はRESTみたいなフォーマットになっているとのことで早速、実験してみる。

・構築環境

Ubuntu24.04LTS(AmazonEC2 AMI)


◆構築方法

1.サーバ側

$ curl -fsSL https://repo.stns.jp/scripts/apt-repo.sh | sh
$ sudo apt install -y stns-v2 libnss-stns-v2 cache-stnsd
$ cd /etc/stns/
$ sudo mkdir conf.d

$ sudo tee -a /etc/stns/server/stns.conf <<_EOS_
port = 1104
include = "/etc/stns/conf.d/*.conf"
_EOS_

$ sudo groupadd -g 2000 test-example

$ sudo tee /etc/stns/conf.d/sample.conf <<_EOS_
[users.example1]
id = 1001
group_id = 2000
shell="/bin/bash"
directory = "/home/example1"
keys = ["ssh-rsa AAAAhogefuga・・・"]


[users.example2]
id = 1002
group_id = 1001
shell="/bin/bash"
directory = "/home/example2"
keys = ["ssh-rsa AAAAhogefuga・・・"]


[users.example3]
id = 1003
group_id = 1001
shell="/bin/sh"
directory = "/home/example3"
keys = ["ssh-rsa AAAAhogefuga・・・"]


[groups.example]
id = 1001
users = ["example1","example2","example3"]
_EOS_

$ sudo systemctl start stns
$ sudo systemctl enable stns


2.クライアント側

$ sudo apt remove -y --purge ec2-instance-connect
$ sudo shutdown -r now

$ curl -fsSL https://repo.stns.jp/scripts/apt-repo.sh | sh
$ sudo apt install -y stns-v2 libnss-stns-v2 cache-stnsd

$ SERVER_IP=127.0.0.1 #サーバのIPアドレス(名前解決できるならホスト名)
$ sudo tee -a /etc/stns/client/stns.conf <<_EOS_
api_endpoint = "http://${SERVER_IP}:1104/v1"
[cached]
enable = true
_EOS_

$ sudo systemctl restart cache-stnsd
$ sudo systemctl enable cache-stnsd

$ curl http://${SERVER_IP}:1104/v1/users
$ curl http://${SERVER_IP}:1104/v1/users?name="example1"
$ /usr/lib/stns/stns-key-wrapper example1

$ sudo vi /etc/nsswitch.conf
----------------------
passwd:         files systemd  stns   #追記
group:          files systemd  stns   #追記
shadow:         files systemd  stns   #追記
gshadow:        files systemd
----------------------

$ sudo vi /etc/ssh/sshd_config
# 以下追記
-----------------------------
PubkeyAuthentication yes
AuthorizedKeysCommand /usr/lib/stns/stns-key-wrapper
AuthorizedKeysCommandUser root
-----------------------------

$ sudo tee -a /etc/pam.d/sshd <<_EOS_
session    required     pam_mkhomedir.so skel=/etc/skel/ umask=0022
_EOS_

$ sudo shutdown -r now


◆参照サイト

・STNS構築

https://zenn.dev/sogaoh/articles/21-12-25-af3793dc2fcd0a

https://qiita.com/shogomuranushi/items/f09fcdeb146b45452403

https://qiita.com/Ets/items/2fd0c6d6dcce86c6588d

https://kun432.hatenablog.com/entry/linux-user-management-with-stns


・AMIのsshエラー時の参考

https://www.servernote.net/article.cgi?id=ec2-instance-connect-ssh-login-error


最初はGCEで試していたけど、どんだけファイアウォールルールいじってもstnsのサイトだけcurlが成功しなくてあきらめてAWSでやることにした。そしたら今度はAWS側でssh接続時にエラーでログインできないってなってauth.logひいてssh書き替えているAWSのパッケージをアンインストールしたら驚くほどあっさり成功した。

こちらの使い道としては既存のグループとかユーザも残しつつ使う。なのであとは、その辺の確認が必要。複数グループに追加するところは何とかできた。既存グループとの共存がどう動くかはこれから見てみます。一通り確認が終わったらまぁDockerにしてみるとか、Serveless構成にしてみるとか考えたいところですね。そこまで行けるかどうかは謎、なんせこれ動かすためだけにさんざん手こずるほど低スキルなので難しいだろうなぁ。。。

コメント

このブログの人気の投稿

GASでGoogleDriveのサブフォルダとファイル一覧を出力する

証券外務員1種勉強(計算式暗記用メモ)

マクロ経済学(IS-LM分析)