【Linux】 findコマンドとパーミッション

Linux

findコマンドでSUIDとSGIDが関連するファイルを検索する

Lpic102を受けようと問題を解いていると、findコマンドを使用した問題がちょいちょい現れます。よく出てくるので、実際に検証してみました。

特に、「SUIDとSGIDのいずれか片方でも設定されているファイルを検索できるのはどれか」と問題に対する答えが参考書によって違う!ということがあったので、この度実際に調べてみました。

本記事を読んでいただければわかりますが、一応2パターンあるのは事実で、片方は形式が古いというオチです(厳密にいうと古い方は答えとしては不適です)。

コマンドの論点

findコマンドで「-perm」オプションを使用する話です。具体的には、SUIDとSGIDが設定されているファイルを検索したいと言う話が過去問の大筋です。

問われるのは、「SUIDとSGIDが両方とも設定されているファイルを調べるコマンドはどれか」「SUIDまたはSGIDが設定されているファイルを調べるコマンドはどれか」と言う形式で問われることが多いです。

コマンドの形式を具体的に見る

検証したいコマンドは以下です。※初見だと何が違うのかわかりにくいですよね。

① find /usr -perm -6000

② find /usr -perm /6000

③ find /usr -perm +6000

コマンドの意味

①はSUIDとSGIDが両方設定されているファイルを、/usrディレクトリ以下を検索します。

②はSUIDとSGIDのいずれか片方でも設定されているファイルを検索します。

③もSUIDとSGIDのいずれか片方でも設定されているファイルを検索します。※下記の検証を要確認!

検証

何はともあれ、実際に検証してみます。

検証1 SUIDとSGIDを両方含んでいるファイルを検索

「find /usr -perm -6000 |xargs ls -l」を実行してみます。「xargs ls -l」はfindコマンドで取得したファイル名の詳細情報を取得したいために実行しています。

SUIDとSGIDを両方含んでいるファイルを検索することができます。

検証2 SUIDとSGIDをどちらか一方を含んでいるファイルを検索

「find /usr -perm +6000 |xargs ls -l」を実行してみます。

怒られますね。もう「+」で指定するのは古いんだそうです。
※怒られるだけで結果を表示してくれるわけではないんですね。そうなるとこれって答えとしては不適になってしまうわけですが…細かいことは割愛。

改めて「/」を先頭につけて検索します。「find /usr -perm /6000 |xargs ls -l」を実行します。

SUIDかSGIDのどちらか一方でも含まれている場合、検索の対象になっています。

検証3 SUIDを含んでいるファイルを検索

「find /usr -perm -4000 |xargs ls -l」を実行することで、SUIDのみ(SGIDなし)設定されているファイルだけを取得できます。

全部表示するとちょっと多すぎるので、途中は一部だけ掲載しています。

検証4 SGIDを含んでいるファイルを検索

「find /usr -perm -2000 |xargs ls -l」を実行することで、SGIDのみ(SUIDなし)設定されているファイルだけを取得できます。

全部表示するとちょっと多すぎるので、こちらも途中は一部だけ掲載しています。

検証5 包含関係が適切かを検証

本当に指定した通りに検索ができているのかは、上記結果だけではわかりません。
結果に対して「wc -l」をパイプで実行することでコマンドの出力行数が取得できるので、それぞれの出力行数を確認してみます。

集合で言う「n(A∪B) = n(A) + n(B) – n(A∩B)」が確かに成立しています。

よくわからない人は、「集合 個数」などで検索してみてください。集合の基礎なら数学Ⅰ、数学Aの教科書に載ってますので、その辺りも参考にしてみてください。

タイトルとURLをコピーしました