Linux: SUID, SGIDプログラムの検索 – findコマンド

Linuxシステム内のプログラムのパーミッションににSUID(set user-ID)ビットもしくはSGID(set group-ID)ビットが設定されていると、プログラムの実行ユーザの権限ではなく、プログラムの所有ユーザ、グループの権限で実行される。(IBM i の借用権限みたいなものかな)例として、ユーザのパスワード変更コマンドであるpasswdコマンドがある。

passwdコマンドはその他一般ユーザから実行可能であり、かつ下記の/etc/passwdファイルを編集する権限も必要である為、SUIDビットを立てている。

SUID, SGIDビットのプログラムはユーザに対して高権限を与える側面もある為、システム攻撃者のバックドアプログラム/スクリプトとして悪用されることもある。これらを発見する手段の一つとして下記のコマンドがある。

簡単に解説すると()内の-permが検索対象のパーミッション設定、-type fで通常ファイルタイプを検索、-execでfind検索結果を-execの後続のコマンドに渡す。その際{}の箇所に検索結果を渡せる。VM上のLinuxで実行した結果は下記の通り。

diffコマンドやcronと併用することで、定期的に差分チェックが可能。
仮に不要なビット設定がされているコマンドがあった場合は以下のコマンドでSUID, SGIDを削除する。

実行後の対象ファイルのパーミッションは通常のxに置き換わる。