最近まで課題だったこと
弊社の社内(ぼくが所属する部門)には誰かが作成した公開鍵をまとめて登録し、ユーザも発行してくれるツールがあります。
これはこれで便利なのですが、いかんせん登録することしかできないので、後から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で構築した情報をメモしているのですが、便利なスクリプトになってからアウトプットしても良いかなーと考えています。