こんにちは、たねやつです。
このシリーズでは、Linuxの基本的なコマンドを一つずつ取り上げ、その使い方を具体的な例とともに解説していきます。今回は、ファイルやディレクトリのアクセス権(パーミッション)を変更するchmodコマンドです。
chmodコマンドとは?
chmodコマンドは、CHange MODeの略で、ファイルやディレクトリに対するユーザーの権限(読み取り、書き込み、実行)を変更するために使用します。Linuxのセキュリティの基本であり、スクリプトに実行権限を与えたり、他人に見られたくないファイルを保護したりする際に必須のコマンドです。
パーミッションの指定方法
chmodには大きく分けて2つの権限指定方法があります。
- シンボリックモード(記号モード):
u(user),g(group),o(other),a(all) と+(追加),-(削除),=(設定) とr(read),w(write),x(execute) を組み合わせて指定します。直感的で分かりやすいのが特徴です。 - 数値モード(絶対モード): 権限を3桁の8進数で表現します。
r=4,w=2,x=1の合計値で権限を指定し、左から順に「所有者」「グループ」「その他」の権限となります。例:755はrwxr-xr-xを意味します。
| 数字 | 権限 | 意味 |
|---|---|---|
| 7 | rwx |
読み、書き、実行すべて許可 |
| 6 | rw- |
読み、書きを許可 |
| 5 | r-x |
読み、実行を許可 |
| 4 | r-- |
読み取りのみ許可 |
| 0 | --- |
すべて不許可 |
主なオプション
| オプション | 説明 |
|---|---|
-R |
--recursiveの略。ディレクトリとその配下のすべてのファイル・ディレクトリに対して、再帰的にパーミッションを変更します。 |
-v |
--verboseの略。変更した各ファイルのパーミッション情報を表示します。 |
-c |
--changesの略。実際に変更が行われたファイルの情報のみを表示します。 |
具体的な使用例
状況1: シェルスクリプトに実行権限を与えたい
自分で作成したmy_script.shを実行しようとしたら、Permission deniedと怒られた場面です。実行権限(x)を所有者(u)に追加する必要があります。
# ls -lで現状確認 # -rw-r--r-- 1 pi pi 123 Jul 10 12:00 my_script.sh # シンボリックモードで実行権限を追加 chmod u+x my_script.sh # ls -lで確認 # -rwxr--r-- 1 pi pi 123 Jul 10 12:00 my_script.sh
これで./my_script.shとして実行できるようになります。
状況2: 他のユーザーから見られたくないファイルを作成したい
private_memo.txtというファイルを、自分以外のユーザー(グループ、その他)からは一切読み書きできないようにしたい場面です。
# 数値モードでパーミッションを600に設定 chmod 600 private_memo.txt # ls -lで確認 # -rw------- 1 pi pi 456 Jul 10 12:05 private_memo.txt
所有者(pi)のみが読み書き(rw-)でき、他のユーザーの権限は---になりました。
状況3: Webサーバーの公開ディレクトリの権限をまとめて設定したい
Webサーバーのドキュメントルート/var/www/html配下の、すべてのディレクトリのパーミッションを755に、すべてのファイルのパーミッションを644に再帰的に設定したい場面です。これはWebサーバーを運用する上で非常に一般的な設定です。
# まず、すべてのディレクトリの権限を755に変更
find /var/www/html -type d -exec chmod 755 {} \;
# 次に、すべてのファイルの権限を644に変更
find /var/www/html -type f -exec chmod 644 {} \;
chmod -Rだけではファイルとディレクトリを区別できないため、findコマンドと組み合わせることで、種類に応じた適切な権限を一括で設定できます。
最後に
今回はchmodコマンドについて解説しました。Linuxのセキュリティの根幹をなす重要なコマンドです。シンボリックモードと数値モードの両方を理解し、特に-Rオプションやfindとの連携を使いこなすことで、意図した通りのファイル保護やアクセス制御が可能になります。