2024.11.14
いまさらNode.jsを知ろう~環境構築も~
2016.12.29
インフラansibleでお手軽ユーザロック
もうあといくつ寝るとお正月。早くお餅が食べたいです。
fitbitを購入しましたが、もっぱら安眠時間の計測に活躍中です。
こんにちは、あかまつ です。
「チームからメンバーが抜けたからアカウントをロックしたい」なんてこと、よくありますよね。
LDAPとかで管理されていると らくちん なのですが、そうじゃないところもあるかと思います。
全サーバで一括ロックしたい!
ということで ansible でレシピを作ってみました。すごい簡単なものですが。
ansible 管理サーバ:192.168.58.101
管理対象ノード:192.168.58.10[23]
hosts: all vars: lockuser: testuser tasks: - name: Uesr lock user: name={{lockuser}} password=!!
[target] 192.168.58.102 192.168.58.103
すごい簡単!
これを実行してみると、、、
[root@centos67-102 ~]# id testuser
uid=501(testuser) gid=501(testuser) 所属グループ=501(testuser)
[root@centos67-102 ~]# grep testuser /etc/shadow
testuser:$6$npLmToll$YqPCZShkEcoYUplaAdW91Awm/jjHCZ7iPOGNVCANmP/dq0kbFjQZAos5Qn2hkrbnZfhhFfBk2ifLeamBhtGUU0:17164:0:99999:7:::
[root@centos67-102 ~]# passwd -S testuser
testuser PS 2016-12-29 0 99999 7 -1 (パスワード設定済み、SHA512 暗号化。)
[admin@centos67-101 ~]$ ansible-playbook userlock.yml -i hosts -sKk
SSH password:
SUDO password[defaults to SSH password]:PLAY [Uesr lock] ***************************************************************
TASK [setup] *******************************************************************
ok: [192.168.58.102]
ok: [192.168.58.103]TASK [Uesr lock] ***************************************************************
changed: [192.168.58.102]
changed: [192.168.58.103]PLAY RECAP *********************************************************************
192.168.58.102 : ok=2 changed=1 unreachable=0 failed=0
192.168.58.103 : ok=2 changed=1 unreachable=0 failed=0
[root@centos67-102 ~]# id testuser
uid=501(testuser) gid=501(testuser) 所属グループ=501(testuser)
[root@centos67-102 ~]# grep testuser /etc/shadow
testuser:!!:17164:0:99999:7:::
[root@centos67-102 ~]# passwd -S testuser
testuser LK 2016-12-29 0 99999 7 -1 (パスワードはロック済み。)
ロックできました!すごい簡単!!
ところで、これはユーザが存在しないサーバに対して実行したらどうなるんだろう。。。
192.168.58.103には実は testuser はいませんでした。
[root@centos67-103 ~]# id testuser
id: testuser: そのようなユーザは存在しません
[root@centos67-103 ~]# grep testuser /etc/shadow
[root@centos67-103 ~]# passwd -S testuser
passwd: 不明なユーザー名 ‘testuser’。
[root@centos67-103 ~]# id testuser
uid=501(testuser) gid=501(testuser) 所属グループ=501(testuser)
[root@centos67-103 ~]# grep testuser /etc/shadow
testuser:!!:17164:0:99999:7:::
[root@centos67-103 ~]# passwd -S testuser
testuser LK 2016-12-29 0 99999 7 -1 (パスワードはロック済み。)
ロックされたユーザが作成されてしまってる!
「チームからメンバーが抜けたからアカウントをロックしたい」から、ユーザがあったらロックしたかっただけなのに、逆にユーザを作成するというわけのわからんことに!!
やりたいことはできたけど、余計なことまでやってくれるという、よくある状態です。
usermod コマンドみたいにユーザがあったらロックして、なければ何もしないでもらいたのですが、user_module ではそこまで気が利くオプションはなさそうです。
ということで、結局できたレシピはこう。
- name: Uesr lock hosts: all vars: lockuser: testuser tasks: - name: Check user exists shell: /usr/bin/getent passwd | awk -F":" '$1=="{{lockuser}}"{print $1}' register: etc_users - name: Uesr lock user: name={{lockuser}} password=!! when: etc_users.stdout == "{{lockuser}}"
実行すると 192.168.58.103 は以下のようにスキップされているのがわかります。
[admin@centos67-101 ~]$ ansible-playbook userlock.yml -i hosts -sKk
SSH password:
SUDO password[defaults to SSH password]:PLAY [Uesr lock] ***************************************************************
TASK [setup] *******************************************************************
ok: [192.168.58.102]
ok: [192.168.58.103]TASK [Check user exists] *******************************************************
changed: [192.168.58.103]
changed: [192.168.58.102]TASK [Uesr lock] ***************************************************************
skipping: [192.168.58.103]
changed: [192.168.58.102]PLAY RECAP *********************************************************************
192.168.58.102 : ok=3 changed=2 unreachable=0 failed=0
192.168.58.103 : ok=2 changed=1 unreachable=0 failed=0
簡単な処理にshellを使うと負けた感覚になってしまうのは私だけでしょうか。。
まぁ、普通はどこのサーバにユーザ作ってとか管理されているだろうから、そこに対して実行しなければ良いだけだろうけど。
皆様もできたことだけ見てしまわぬよう、ご注意を。
※ユーザロックというと、「usermod -L testuser」「passwd -l testuser」などで現在のパスワードを保持しつつロックすることが一般的だと思いますが、ansibleのuserモジュールではそのオプションもなさそうなので、今回は「!!」をセットしてロックしています。
※パスワードロックしかしていませんが、公開鍵認証の無効化も考慮に入れた方がよいと思います。
【記事への感想募集中!】
記事への感想・ご意見がありましたら、ぜひフォームからご投稿ください!【テクノデジタルではエンジニア/デザイナーを積極採用中です!】
下記項目に1つでも当てはまる方は是非、詳細ページへ!Qangaroo(カンガルー)
【テクノデジタルのインフラサービス】
当社では、多数のサービスの開発実績を活かし、
アプリケーションのパフォーマンスを最大限に引き出すインフラ設計・構築を行います。
AWSなどへのクラウド移行、既存インフラの監視・運用保守も承りますので、ぜひご相談ください。
詳細は下記ページをご覧ください。
最近の記事
タグ検索