find -permオプションの使い方を完全解説!初心者でもできるパーミッション検索
生徒
「Linuxで、特定のアクセス権(パーミッション)を持ったファイルだけを探すことってできますか?」
先生
「できるよ!そのときはfindコマンドの-permオプションを使うと便利だよ。」
生徒
「パーミッションって何ですか?なんだか難しそうです…」
先生
「大丈夫、順番にゆっくり説明していくから、安心してね!」
1. パーミッションとは?
Linuxにおけるパーミッション(Permission)とは、ファイルやディレクトリに対して「誰が」「どのような操作をできるか」を定めた利用権限のことです。パソコンの中にある大切な書類を、勝手に見られたり書き換えられたりしないための「鍵」のような役割を果たします。
この権限は、以下の3種類のユーザー層に対して個別に設定されます。
- 所有者(Owner): そのファイルを作成した本人。
- グループ(Group): 同じプロジェクトチームなど、特定の仲間の集まり。
- その他(Others): 所有者でもグループでもない、第三者のユーザー全員。
さらに、それぞれのユーザーが「読み取り(r)」「書き込み(w)」「実行(x)」の3つのアクションを許可されているかを確認します。例えば、料理のレシピ本に例えると以下のようになります。
- 読み取り(r): 本の内容を読むことができる(ファイルの中身を見る)。
- 書き込み(w): 本にメモを書き込んだりページを破いたりできる(ファイルの上書きや削除)。
- 実行(x): レシピ通りに料理を作る(プログラムやスクリプトを動かす)。
実際のコマンド画面で、ファイルにどのような権限がついているかを確認してみましょう。プログラミングが初めての方でも、ls -lというコマンドを打つだけで簡単にチェックできます。
ls -l
-rwxr-xr-- 1 user1 staff 1024 Feb 4 09:00 sample.txt
左端に表示された-rwxr-xr--という文字列がパーミッションの正体です。この見方をマスターすれば、Linuxのセキュリティ管理の第一歩は完璧です。次の章では、これらを検索するための具体的な方法を解説します。
2. find -permオプションとは?
findコマンドの-permオプションは、「パーミッション(アクセス権)」を条件にしてファイルやディレクトリを検索するためのオプションです。
例えば、「すべてのユーザーに実行権限があるファイル」を探したいときに使います。
3. パーミッションの表記方法
パーミッションは、数値(8進数)で指定するのが一般的です。
r(読み取り)→ 4w(書き込み)→ 2x(実行)→ 1
それぞれを足し合わせて、所有者・グループ・その他に順番で並べます。
例:755は「所有者が読み書き実行、他は読みと実行」
4. -permオプションの使い方(基本)
たとえば、パーミッションが777(全員が読み書き実行できる)ファイルを探したいときは、次のように書きます。
find /path/to/dir -perm 0777
/path/to/dir/public.sh
/path/to/dir/tmp_file
先頭の0は8進数であることを示しています。
5. 一部のパーミッションだけを検索するには?
すべての権限が一致しないとマッチしないのが-perm 0777の特徴です。
「一部だけ該当すればOK」という柔軟な検索をしたい場合は、-を先頭に付けます。
例:実行権限(x)を持っていればよい場合
find /path/to/dir -perm -001
/path/to/dir/run.sh
このように、1桁だけの指定も可能です。もちろん、3桁すべて指定して柔軟に検索することもできます。
例:誰かが実行できるファイルを探す
find /path/to/dir -perm -111
/path/to/dir/start.sh
/path/to/dir/test_exec
6. パーミッションが完全一致するファイルだけを探す(=)
=を付けると、「完全に一致するパーミッションだけ」を対象にします。
例:パーミッションが600のファイルだけを探す
find /home/user -perm =600
/home/user/secret.txt
これは「所有者だけが読み書きでき、他の人は何もできない」ファイルです。
7. 特殊パーミッションの検索(setuid・setgid・sticky)
setuid(4000)、setgid(2000)、stickyビット(1000)も検索できます。
- setuid:実行時に所有者の権限で動作
- setgid:実行時にグループの権限で動作
- sticky:他人のファイル削除防止(/tmpなど)
例:setuidが付いたファイルを検索
find / -perm -4000
/usr/bin/passwd
8. 他のオプションと組み合わせた例
-permは他の条件と組み合わせることで、さらに便利に使えます。
例:サイズが1MB以上かつ実行可能なファイルを検索
find /usr/local/bin -size +1M -perm -111
/usr/local/bin/large_script
例:7日以内に更新された、読み書き可能なファイル
find /var/tmp -mtime -7 -perm -600
/var/tmp/edit.txt
9. パーミッションの確認方法
ファイルやディレクトリの現在のパーミッションを調べるには、ls -lコマンドを使います。
ls -l script.sh
-rwxr-xr-- 1 user1 devgroup 2048 Sep 16 09:00 script.sh
このように、最初の-rwxr-xr--の部分がパーミッションです。
数値に直すと754になります。