【第1回】シェルスクリプトで学ぶ!Linuxコマンド
LPICの学習をしててふと思うこと…それは
「このコマンドって実際に使うのか?」
こんな疑問を(私自身が)解決すべく、LPICレベル1で学習するコマンドを使用して、使えそう(?)なシェルスクリプトを作成していきます。
コマンドも覚えられてシェルスクリプトも作成できるようになるなんて、まさに一石二鳥ですね!
今回のシェルスクリプトは、SUIDやSGIDが権限変更によって追加されたファイルの一覧を取得するというものです。
これらの権限は、誰でも所有者(グループ所有者)の権限でファイル実行ができてしまうことから、設定されている実行権限のあるファイルに注意をしておく必要があります。
それでは早速、シェルスクリプトを見てみましょう!
#/bin/bash
### 現状のパーミッション確認 ###
find / -perm -u=s -type f > /var/log/perm 2> /dev/null
find / -perm -g=s -type f >> /var/log/perm 2> /dev/null
### 2つのファイルの差分検出 ###
cat /var/log/perm.prt /var/log/perm > /tmp/permjoint
check=`sort /tmp/permjoint | uniq -u`
rm -f /tmp/permjoint
### ログに書き出し ###
date >> /root/permcheck
if [ “$check” != ” ];
then
echo “以下のファイルは権限変更された可能性があります。” >> /root/permcheck
echo “$check” >> /root/permcheck
else
echo “権限が変更されたファイルはありません。” >> /root/permcheck
fi
### 検証元ファイル作成 ###
find / -perm -u=s -type f > /var/log/perm.prt 2> /dev/null
find / -perm -g=s -type f >> /var/log/perm.prt 2> /dev/null
このシェルスクリプトを実行すれば、/root直下にpermcheckファイルが作成され、その中に権限変更があったファイルの一覧が書き込まれます。
※/var/log/permファイルに現状SUID、SGIDが設定されているファイル一覧を保存しておく必要があります。
cron設定で定期実行することが前提となる書き方です。
使用したコマンド
find
ファイル検索を行うコマンド。様々な検索式を使用することができますので、使用頻度はかなり高いのではないかと思います。
今回の使い方は、-typeを使用してファイルのみ検索を行い、その中でも-permを使用してSUIDやSGIDが設定されているものを抽出しています。
cat
ファイルの中身を標準出力してくれるコマンド。もはや説明不要でしょう。
今回は、2つのファイルを垂直方向に結合するために使用しています。
sort
ファイルの中身をソートしてくれるコマンド。
次のuniqコマンドは、ソートされていないとうまく働かないのでソートしてます。
uniq
重複行をまとめる際に使用するコマンド。
今回は、-uオプションを使用して、重複していない行だけを取得しています。
date
日付を出力するコマンド。
ログファイルには日付を出力するのが常なので、今回もそうしています。その方が見やすいですしね。
echo
引数にとったものを標準出力するコマンド。Linuxに限らず、様々な場所で広く用いられているのでこれも説明不要でしょう。