chmodコマンドの使い方を完全ガイド!Linuxのパーミッション(権限)と所有権の基本
生徒
「Linuxを使っていると『許可がありません』というエラーが出てファイルを編集できないことがあります。どうすればいいですか?」
先生
「それは『パーミッション』の設定によるものですね。Linuxではchmodというコマンドを使って、誰がそのファイルを操作できるかを変更できるんですよ。」
生徒
「パーミッション……難しそうな言葉ですね。初心者の私でも設定を変えられるようになりますか?」
先生
「もちろんです!数字の意味やコマンドの仕組みを覚えれば、鍵をかけたり開けたりするように簡単に操作できます。基礎からゆっくり解説しますね。」
1. パーミッション(権限)とは何か?
Linux(リナックス)というシステムは、もともと「たくさんの人が一つのコンピューターを共有して使う」ことを想定して作られました。そのため、「このファイルは自分だけが見られる」「このファイルはみんなで書き込める」といったルール(権限)が非常に厳格に決まっています。このルールのことをパーミッションと呼びます。
例えば、会社や学校の掲示板をイメージしてください。「誰でも読めるけれど、書き込めるのは管理者だけ」というルールがありますよね。もし誰でも勝手に内容を書き換えられたら、大事な情報が消されてしまうかもしれません。Linuxでも同じように、システムを壊されないように、ファイルやディレクトリ(フォルダのこと)ごとに細かくアクセス制限がかけられているのです。
このパーミッションを正しく設定できないと、プログラムを実行できなかったり、Webサイトが表示されなかったりといったトラブルの原因になります。初心者が最初につまずきやすいポイントですが、一度理解してしまえばLinuxの操作がぐっと楽しくなりますよ。
2. 所有者・グループ・その他のユーザーという考え方
パーミッションを理解するために、まずは「誰に対して」権限を設定するのかを知っておく必要があります。Linuxでは、全てのファイルやディレクトリに対して以下の3種類の対象を設定します。
- 所有者(ユーザー):そのファイルを作った本人。一番強い権限を持つことが多いです。
- グループ:複数のユーザーをまとめたチームのこと。開発チームのメンバー全員に権限を与えたいときなどに使います。
- その他(その他全員):所有者でもグループメンバーでもない、それ以外の人たち。
これらの3つの区分に対して、それぞれ「何ができるか」を決めていきます。Linuxでは、ファイルの状態を詳しく見るためにls -lというコマンドを使います。実際にターミナルで確認してみましょう。
ls -l
-rw-r--r-- 1 user user 0 Jan 1 12:00 sample.txt
この結果の左側にある「-rw-r--r--」という文字が、パーミッションを表しています。最初は暗号のように見えるかもしれませんが、読み方が分かれば簡単です。最初の1文字目を除いた残りの9文字が、3文字ずつ「所有者」「グループ」「その他」の順に並んでいます。
3. 権限の3つの種類:読み・書き・実行
次に、ファイルに対して「何ができるか」というアクションの種類を学びましょう。Linuxでは主に以下の3つの権利(権限)を組み合わせて管理します。
- 読み取り権限(r:read):ファイルの中身を見る、またはディレクトリの中にあるファイル一覧を見る権利。
- 書き込み権限(w:write):ファイルの内容を書き換える、またはディレクトリ内に新しいファイルを作ったり消したりする権利。
- 実行権限(x:execute):プログラムとしてファイルを実行する、またはディレクトリに「入る(移動する)」権利。
先ほどの「rw-r--r--」を分解してみると、以下のようになります。
- 所有者:rw-(読み書きができるが、実行はできない)
- グループ:r--(読み取りだけできる)
- その他:r--(読み取りだけできる)
この状態では、所有者以外は中身を書き換えることができません。もし、このファイルがプログラムで、誰でも実行できるようにしたい場合は、ここに「x」の権限を追加してあげる必要があります。その時に使うのが、今回の主役であるchmod(シーエイチモッド)コマンドです。
4. chmodコマンドの基本:数字で指定する方法
chmodコマンドで権限を変更するとき、最も一般的で便利なのが「数字」を使う方法です。それぞれの権限に数字が割り振られており、その合計値を使って設定します。
| 権限の種類 | 記号 | 割り当てられた数字 |
|---|---|---|
| 読み取り | r | 4 |
| 書き込み | w | 2 |
| 実行 | x | 1 |
| 権限なし | - | 0 |
この数字を足し算して、1つの桁を作ります。例えば、「読み取り(4)」と「書き込み(2)」を両方許可したい場合は、4 + 2 = 6 になります。全ての権限(フルアクセス)を与えたい場合は、4 + 2 + 1 = 7 になります。
これを「所有者」「グループ」「その他」の順番で3つの数字として並べます。例えば「755」という設定は、「所有者は全部できる(7)、グループとその他の人は読むのと実行だけできる(5)」という意味になります。
chmod 755 script.sh
ls -l script.sh
-rwxr-xr-x 1 user user 0 Jan 1 12:00 script.sh
このように、chmod 数字 ファイル名と入力するだけで、一気に権限を書き換えることができます。
5. 記号を使って権限を変更する方法
数字での指定は便利ですが、「今の設定は変えずに、特定の権限だけを追加したい」という場合には記号(アルファベット)を使った指定が便利です。以下の記号を組み合わせて使います。
- 対象:u(所有者)、g(グループ)、o(その他)、a(全員)
- 操作:+(追加)、-(削除)、=(その権限にする)
- 権限:r(読み取り)、w(書き込み)、x(実行)
例えば、「自分(所有者)にだけ実行権限を追加したい」という場合は、以下のように入力します。
chmod u+x myfile.txt
ls -l myfile.txt
-rwx-r--r-- 1 user user 0 Jan 1 12:00 myfile.txt
逆に、「誰でも書き込める設定になっているので、その他の人の書き込み権限を消したい」という場合は、以下のようにします。
chmod o-w shared.txt
ls -l shared.txt
-rw-rw-r-- 1 user user 0 Jan 1 12:00 shared.txt
記号を使った方法は、直感的に「何をしたいか」を記述できるため、複雑な計算をしなくて済むのがメリットです。特に「a+x(全員に実行権限を与える)」などは、よく使われる便利なショートカットです。
6. ディレクトリの権限設定の注意点
ファイルだけでなく、ディレクトリ(フォルダ)にもパーミッションがあります。ただし、ディレクトリにおける「実行権限(x)」は、ファイルの場合とは少し意味が異なるので注意が必要です。
- r(読み取り):ディレクトリ内のファイル名の一覧を表示できる。
- w(書き込み):ディレクトリ内に新しいファイルを作ったり、既存のファイルを消したりできる。
- x(実行):そのディレクトリに「入る(cdコマンドで移動する)」ことができる。
もしディレクトリに「x」の権限がないと、その中にあるファイルを見ることすらできなくなります。一般的に、ディレクトリには「755」や「700」といった、実行権限を含めた設定を行うのが基本です。
また、ディレクトリの中にある全てのファイルやフォルダの権限をまとめて変えたいときは、-R(大文字のアール)というオプションを使います。これを「再帰的(さいきてき)な変更」と呼びます。
chmod -R 700 my_private_dir
ls -ld my_private_dir
drwx------ 2 user user 4096 Jan 1 12:00 my_private_dir
このコマンドを実行すると、my_private_dirそのものだけでなく、その中に入っているサブフォルダやテキストファイルもすべて、一括で所有者以外アクセス禁止の状態になります。大量のファイルを一気に整理したいときに非常に役立つオプションです。
7. 所有権を変更するchownコマンド
パーミッション(権限)の変更方法を学んだら、セットで覚えておきたいのが所有権(誰のものか)の変更です。自分のファイルではないものの権限を勝手に変えることはできませんが、管理者権限を使えば、ファイルの持ち主そのものを変えることができます。その時に使うのがchown(シーエイチオウン)コマンドです。
この操作には非常に強い権限が必要になるため、通常は「スーパーユーザー(root)」として実行します。コマンドの前にsudoをつけることで、「一時的に管理者として実行する」という意味になります。
chown root:root sample.txt
ls -l sample.txt
-rw-r--r-- 1 root root 0 Jan 1 12:00 sample.txt
上記の例では、sample.txtの所有者を「rootユーザー」に、所属グループを「rootグループ」に変更しています。Webサーバーの設定ファイルなどは、セキュリティのために所有者を特定のシステムユーザーに変更することがよくあります。初心者のうちは、システムにとって重要なファイルの所有権をむやみに変えないように注意しましょう。
8. 権限がない!と言われたときの対処法(sudo)
Linuxを触っていると、自分の持ち物ではないファイル(システムの重要なファイルなど)を編集しようとして「Permission denied(許可が拒否されました)」と怒られることが多々あります。パソコンを触り始めたばかりの人には、これが大きな壁に感じられるかもしれません。
そんな時は、前述のsudoを使います。これは「Super User Do」の略で、「管理者として命令を実行する」という意味です。ただし、魔法の言葉のように何でもかんでもsudoをつければ良いわけではありません。システム全体に影響を与える操作になるため、本当にその変更が必要かどうかを確認してから使う癖をつけましょう。
たとえば、自分に書き込み権限がない設定ファイルのパーミッションを無理やり変更しようとするよりも、sudoを使って一時的に管理者権限でファイルを編集する方が安全な場合が多いです。Linuxの自由度は高いですが、その分「自分の操作には責任が伴う」という、コンピューターの基本的な仕組みを学ぶ良い機会になります。
9. よく使うパーミッションの設定例
最後に、実際の現場でよく使われるパーミッションの組み合わせをいくつか紹介します。これらをテンプレートとして覚えておくと、迷ったときに便利です。
- 644 (-rw-r--r--):一般的なファイルの標準設定。自分は書き込めて、他人は見るだけ。
- 755 (-rwxr-xr-x):プログラムファイル(スクリプト)やディレクトリの標準設定。自分は自由に使えて、他人は実行と閲覧ができる。
- 600 (-rw-------):秘密鍵や個人的なメモなど。自分以外は見ることもできない非常にセキュアな設定。
- 777 (-rwxrwxrwx):誰でも何でもできる設定。非常に危険なため、一時的なテスト以外では使わないのが鉄則です。
セキュリティの基本は「必要最小限の権限だけを与えること」です。誰でも読み書きできるように設定してしまうのは楽ですが、それは家の鍵をかけずに外出するようなものです。Linuxを使いこなす第一歩として、この「適切な鍵をかける」感覚を養っていきましょう。コマンドラインでの操作は、最初は難しく感じるかもしれませんが、タイピングするたびにコンピューターを直接操っている実感が湧いてくるはずです。一つずつ丁寧に試して、自分のものにしていってくださいね。