0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Linuxユーザの鍵ファイルをまとめて変更・ユーザを一括削除するスクリプト

Last updated at Posted at 2019-02-27

最近まで課題だったこと

弊社の社内(ぼくが所属する部門)には誰かが作成した公開鍵をまとめて登録し、ユーザも発行してくれるツールがあります。
これはこれで便利なのですが、いかんせん登録することしかできないので、後からPC壊れて鍵の交換が必要になった、と言われた時は手作業での変更作業だったりします。
それが毎回地味にめんどくせってなってるので、ShellScriptでそれなりに動作する仕組みを作りました。

そもそもLDAPでやるって方法もあるんですけどネ。
案件が多数あるから結局どこかしらで入れ替えるための方法を検討することになっていたわけでございます。

鍵ファイルを変更するスクリプト

既存の登録するスクリプトを見つつ、これならできるんじゃないか感を感じたので別スクリプトで作ってみました。
引数追加して全てをまとめても良かったのですが、分けた方が運用上のミスも避けれるだろう、ということもあって分けました。

#!/bin/sh
set -eu

for data in `cat $1 | grep -v "#"`
do
    user=`echo $data| cut -f 1 -d :`
    if [ -z $(getent passwd ${user}) ]
    then
        echo ${user} does not exist.
    else
        echo ${user} exists and pub key is changed.
        install -m 600 -g xxxx -o ${user} ${user}.pub /home/${user}/.ssh/authorized_keys
        ls -la /home/${user}/.ssh/authorized_keys
    fi
done

これは単独では動作しないようになっています。

前提条件

  • 変更対象者のユーザ名を一覧にしたファイルがあること。
  • 変更対象の鍵ファイルが存在すること。
  • 鍵ファイルとユーザ名が一致していること。

という三つの前提条件があります。

書き換え箇所

以下のxxxxと記載している、1箇所を各環境に合わせて書き換えていただくようにお願いします。

        install -m 600 -g xxxx -o ${user} ${user}.pub /home/${user}/.ssh/authorized_keys

作った感想

たったこれだけで鍵ファイルを交換できるんならもっと早くからやっとくべきだった。
なお、Ansibleからも呼び出せるようになっています。
Ansible側は弊社オリジナルのカスタマイズが入っていますので参考にはならない部分があると思います。

Linuxユーザをまとめて削除するスクリプト

と言っても userdel -r すれば良いじゃんという話もあるのですが、それやっちゃうとホームディレクトリもごっそり消え、あとあとその人のところにしかなかった!なんてことがあるので、そういうことも防ごうと考えました。
また、弊社は最近はないのですが、出戻りでまた再度入社される方が少なからずいらっしゃいます。
そういうことを諸々考慮したスクリプトを作成しました。

それがこちらです。

はい、ドーン!

#!/bin/sh
set -eu

for data in `cat $1 | grep -v "#"`
do
    user=`echo $data| cut -f 1 -d :`
    if [ -z $(getent passwd ${user}) ]
    then
        echo ${user} does not exist.
    else
        echo ${user} exists and retire.
        userdel ${user}
        retire_date=`date +"%Y%m%d_%H%M%S"`
        mv /home/${user} /home/RETIRE/${user}.${retire_date}
    fi
done

前提条件

こちらの前提条件も記載しますが、鍵を変更するスクリプトとほぼ同じです。

  • 変更対象者のユーザ名を一覧にしたファイルがあること。
  • RETIREディレクトリが存在すること

RETIREディレクトリが気に入らなければ別のディレクトリ名として作成いただき、スクリプトも書き換えていただければと思います。

作った感想

これはこれで便利です。
あとでこの人いつ辞めたっけ?がわかりますし、元のディレクトリを使うかどうかも選択できます。
また辞めても同一ディレクトリで上書いてしまうようなこともなく、安全設計です。
この処理に不足があるとしたら、/var/内にmailデータが残ってることですかね。

弊社は踏み台などでmailを使うことはないのでさほどの問題じゃないと思っています。
削除処理も合わせて対応できる範囲かと思いますので、ご自由にどうぞーー。

まとめ

他にもEC2インスタンスのセキュリティグループを調査するのに作ったスクリプトとかもありますが、ちょっと今回は記載いたしません。
理由としては案件毎にmarkdownでAWSで構築した情報をメモしているのですが、便利なスクリプトになってからアウトプットしても良いかなーと考えています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?