Linuxパーミッション・所有権を完全攻略!仕組みと設定方法を初心者向けに解説
生徒
「Linuxを使っていると『許可がありません(Permission denied)』というエラーが出て、ファイルを消せなかったり開けなかったりするんです。これって何が原因なんですか?」
先生
「それは『パーミッション』が正しく設定されていないからですね。Linuxではファイルごとに『誰が、何をしていいか』というルールが厳密に決まっているんですよ。」
生徒
「ルールがあるんですね。でも、設定が難しそうで不安です……。私でも理解できるでしょうか?」
先生
「安心してください!現実世界の『鍵』や『名札』に例えると、意外とシンプルなんです。まずは基本からゆっくり学んでいきましょう。」
1. Linuxのパーミッションとは?
Linux(リナックス)におけるパーミッション(Permission)とは、直訳すると「許可」や「許容」という意味です。コンピューターの中にあるファイルやフォルダ(Linuxではディレクトリと呼びます)に対して、「読み書きの権利」を制限するための仕組みです。
なぜこのような仕組みが必要なのでしょうか? Linuxはもともと、一台のコンピューターを複数の人が同時に使う「マルチユーザー」という環境を前提に作られています。もし、誰でも自由に他人の日記を読めたり、大事なシステムの設定を消せたりしてしまったら、セキュリティがめちゃくちゃになってしまいますよね。
そこで、「このファイルは作成者本人だけが見られる」「このフォルダはチーム全員で書き込める」といったアクセス制限を行うのがパーミッションの役割です。WindowsやMacでも裏側では動いていますが、Linuxではこれを直接操作することが多いため、非常に重要な知識となります。
2. 「誰が」を決める3つの所有権(オーナー)
パーミッションを理解するには、まず「所有権(Ownership)」を知る必要があります。Linuxでは、すべてのファイルに対して以下の3種類のグループが設定されています。イメージしやすいように、家や部屋の管理に例えてみましょう。
所有者 (User/Owner)
ファイルの持ち主(作った人)です。自分専用の引き出しのようなもので、一番強い権限を持ちます。
所有グループ (Group)
仲良しグループや部署のような集まりです。同じグループに入っている人たちが共有で使えます。
その他 (Others)
「所有者」でも「グループ」でもない、見ず知らずの第三者全員のことです。
このように、「自分」「仲間」「他人」という3つのカテゴリーに対して、それぞれ別々のルールを適用できるのがLinuxの特徴です。
3. 「何ができるか」を決める3つの権限(r・w・x)
次に、具体的な「権限の内容」を見ていきましょう。パーミッションには、大きく分けて以下の3種類があります。
- 読み取り権限(read / r):ファイルの内容を見る、あるいはフォルダの中にあるファイル一覧を見るための権限。
- 書き込み権限(write / w):ファイルの内容を書き換える、保存する、あるいはフォルダ内に新しいファイルを作るための権限。
- 実行権限(execute / x):プログラムとしてファイルを実行する、あるいはフォルダの中に「移動(入る)」するための権限。
これらの頭文字を取って、「r」「w」「x」と表現されます。もし権限がない場合は、代わりに「-(ハイフン)」が表示されます。これらが3つずつ並んで、前述の「自分・仲間・他人」の順に割り当てられます。
例えば、ls -lというコマンドを実行すると、ファイルの横に -rwxr-xr-- のような謎の文字列が出てきます。これは「自分は読み書き実行すべてOK、仲間は読みと実行だけOK、他人は読み取りだけOK」という意味を表しているのです。
ls -l
-rwxr-xr-- 1 user group 1024 Jan 1 10:00 my_script.sh
4. 数字で表すパーミッションの仕組み
Linuxでは、これら「r」「w」「x」を数字に置き換えて管理することも一般的です。エンジニアが「パーミッションを755に設定して」と言うときの「755」とは、この数字のことです。計算方法はとても簡単で、足し算をするだけです!
| 権限 | 記号 | 数値 |
|---|---|---|
| 読み取り (read) | r | 4 |
| 書き込み (write) | w | 2 |
| 実行 (execute) | x | 1 |
| 権限なし | - | 0 |
例えば、「読み取り(4) + 書き込み(2) + 実行(1) = 7」となります。つまり「7」は最強の権限(全部入り)ということです。もし「読み取り(4) + 実行(1) = 5」なら、読み書きはできるけど変更はできない設定になります。これを「自分・仲間・他人」の3つ並べると、「755」といった3桁の数字が出来上がります。
5. 権限を変更する「chmod」コマンド
パーミッションを変更したいときは、chmod(シーエイチモッド)というコマンドを使います。「change mode」の略です。初心者が最もよく使う、魔法のコマンドの一つです。
例えば、新しく作ったプログラムに「実行権限」を加えたい場合は、以下のように入力します。
chmod 755 sample.sh
ls -l sample.sh
-rwxr-xr-x 1 user group 0 Jan 9 10:00 sample.sh
これで、自分は自由に編集できて、他の人も中身を見たり実行したりできるようになりました。逆に、「自分以外には絶対に見せたくない秘蔵のメモ」の場合は、以下のように設定します。
chmod 600 secret.txt
ls -l secret.txt
-rw------- 1 user group 0 Jan 9 10:00 secret.txt
「600」は「自分(4+2=6)・仲間(0)・他人(0)」という意味なので、自分以外は誰も手出しができなくなります。これでプライバシーもバッチリですね!
6. 所有者を変更する「chown」コマンド
パーミッション(権限)だけでなく、そもそも「このファイルは誰のものか」という所有権(オーナー)自体を変えたいこともあります。その際に使うのが、chown(シーエイチオウン)コマンドです。「change owner」の略称です。
ただし、他人のファイルを勝手に自分のものにできてしまうと危ないので、このコマンドは基本的に管理者(ルートユーザー)のみが実行できます。初心者が「なぜかファイルが編集できない」と悩む原因の多くは、この所有権が管理者(root)になってしまっていることにあります。
chown user:group test.txt
ls -l test.txt
-rw-r--r-- 1 user group 0 Jan 9 10:00 test.txt
上記の例では、ファイル test.txt の持ち主を user さんに変更し、所属グループも group に変更しています。これにより、一般ユーザーである user さんが自由にそのファイルを扱えるようになります。
7. ルートユーザーと一般ユーザーの違い
ここで、Linuxにおける「神様」の存在についても触れておきましょう。それがルートユーザー(root)です。通常のパソコン操作では「一般ユーザー」としてログインしていますが、システム全体の重要な変更を行う際にはルートユーザーの権限が必要になります。
ルートユーザーは、どんなパーミッション設定も無視して、すべてのファイルを読み書き・削除できる最強の権限を持っています。そのため、初心者がルート権限で適当なコマンドを打つと、パソコンが起動しなくなるなどのトラブルに発展することもあります。普段は一般ユーザーで作業し、どうしても必要なときだけ sudo というコマンドを使って一時的にルート権限を借りるのがLinuxの作法です。
sudo chmod 777 system_file.conf
[sudo] password for user:
このように、sudo(スードゥー)を頭につけることで、「今だけ管理者の力を使います!」と宣言し、パスワードを入力して実行します。非常に強力な操作なので、使うときは慎重になりましょう。
8. ディレクトリにおけるパーミッションの注意点
最後に見落としがちなのが、ディレクトリ(フォルダ)のパーミッションです。ファイルとディレクトリでは、同じ「rwx」でも少し意味が異なります。
- r(読み取り):ディレクトリ内のファイル名の一覧を表示できるかどうか(
lsコマンドができるか)。 - w(書き込み):ディレクトリの中に新しいファイルを作ったり、既存のファイルを削除したりできるかどうか。
- x(実行):そのディレクトリに「移動」できるかどうか(
cdコマンドができるか)。
面白いのは、「r」権限があっても「x」権限がないディレクトリです。この場合、中のファイル名は見えますが、そのディレクトリに入ることができないため、実質的に中のファイルを読み取ることはできません。ディレクトリを誰かに公開したいときは、必ず「x」権限もセットで与えることを覚えておきましょう。
「パーミッション」を正しく理解し、設定できるようになると、Linuxの操作ミスで大事なデータを壊すリスクがぐっと減ります。エラーが出たときは、まず ls -l で誰にどんな権限があるのかを確認する癖をつけてみてくださいね!