【Linux】パーミッション変更(chmod)動作確認

セキュリティの観点で、ファイルやフォルダの「権限(パーミッション)」はとても重要です。これによって、どのユーザーがファイルを読む書く、または実行することができるかを決定できます。

Linuxにおけるパーミッションの概要は、下記の記事を参考にしてください。

  >> 参考記事 :ファイルアクセス権(パーミッション)の概要 

Linuxでは、chmodというコマンドを使い、この「権限(パーミッション)」を設定・変更することができます。この記事では、chmodの基本から、実際の使い方まで、解説します。

スポンサーリンク

chmodの基本

権限(パーミッション)」は、ファイルやディレクトリがどのように扱われるかを決定します。具体的には、ユーザーがファイルを読んだり、書いたり、実行したりできるかどうかが、この権限によって制御されます。

この権限を変更するための主要なコマンドが「chmod」です。しかし、任意のユーザーがランダムに権限を変更できるわけではありません。実際には、ファイルの「所有者」「スーパーユーザー」として知られる特権ユーザーだけが、chmodを使用して権限を変更できます

 

chmodの構文は、下記です。

chmod [パーミッション表現] [ファイル名(もしくはディレクトリ名)]

 

パーミッションの表現は、「8進数表現」と「シンボリック表現」の2パターンがあります。

スポンサーリンク

パーミッション表現

Linuxのファイルやディレクトリの権限を変更する方法は大きく2つに分かれます:8進数表現シンボリック表現です。これらの方法はそれぞれ異なるアプローチを取りますが、最終的な目的は同じです。

8進数表現

8進数表現は、数字を使って直接的に権限を指定する方法です。

ファイルやディレクトリの権限は、3つの操作(読み取り書き込み実行)は、それぞれ rwx という文字で示されます。

  • 読み取り(r): 読み取り権限。ファイルの内容を読むことができます。ディレクトリの場合、ディレクトリ内のファイルやサブディレクトリの一覧を表示することができます。
  • 書き込み(w): 書き込み権限。ファイルの内容を変更することができます。ディレクトリの場合、ディレクトリ内にファイルやサブディレクトリを追加・削除することができます。
  • 実行(x): 実行権限。ファイルを実行することができます。ディレクトリの場合、ディレクトリ内のファイルやサブディレクトリにアクセスすることができます。

この3つの操作を、数値で表現する際の基本となるのが8進数表現です。

  • 読み取り(r)4 として数値化されます。
  • 書き込み(w)2 として数値化されます。
  • 実行(x)1 として数値化されます。

これらの数値を組み合わせることで、0から7までの数値を生成することができます。

例えば、読み取りと書き込みを許可(rw-)の場合は、4+2=6となります。

以下はその具体的な計算方法です:

  • 読み取りのみ許可: r = 4
  • 書き込みのみ許可: w = 2
  • 実行のみ許可: x = 1
  • 読み取りと書き込みを許可: r + w = 4 + 2 = 6
  • 読み取りと実行を許可: r + x = 4 + 1 = 5
  • 書き込みと実行を許可: w + x = 2 + 1 = 3
  • 全ての操作を許可: r + w + x = 4 + 2 + 1 = 7

以下は8進数とそれに対応する権限の一覧です。

8進数         権限           説明                     
0すべての権限を持たない
1–x実行権限のみ
2-w-書き込み権限のみ
3-wx書き込みと実行権限
4r–読み取り権限のみ
5r-x読み取りと実行権限
6rw-読み取りと書き込み権限
7rwx読み取り、書き込み、実行のすべての権限

シンボリック表現

シンボリック表現は、文字を使用して権限を指定する方法です。この表現は、権限の対象(u, g, o, a)、操作(+,,=)、および権限の種類(r, w, x)の3つの部分から構成されます。

権限の対象

  • u (User): ファイルやディレクトリの「所有者」を指します。
  • g (Group): ファイルやディレクトリの「グループ」を指します。
  • o (Others): 「その他のユーザー」を意味します。これは、所有者やグループに属さないユーザーを指します。
  • a (All): 「すべてのユーザー」を指します。これは、所有者、グループ、その他のユーザー全てを含みます。

操作

  • +: 権限を追加します。例: u+x は、所有者に実行権限を追加します。
  • : 権限を削除します。例: g-w は、グループの書き込み権限を削除します。
  • =: 権限を設定します。既存の権限は上書きされます。例: o=r は、その他のユーザーの権限を読み取りのみに設定します。
スポンサーリンク

動作確認(ファイル)

それでは、chmodで、これらの権限がどのように動作するのかを、実際に確認してみます。

ユーザ名「hirotano」として、ログインしているものとします。

8進数表現による権限確認

テストファイルの準備

まず、テスト用として test_text_oct.txt という名前のテキストファイルを作成します。

hirotano@ubuntu-1:~$ echo "This is a sample text file for testing octal permissions." > test_text_oct.txt

作成されたファイルの権限を確認します。

hirotano@ubuntu-1:~$ ls -l

-rw-rw-r-- 1 hirotano hirotano 58 Sep 18 13:06 test_text_oct.txt

所有者は、読み取りと書き込み権限が付与されています。

catコマンドで読み込みできることが確認できます。

hirotano@ubuntu-1:~$ cat test_text_oct.txt 
This is a sample text file for testing octal permissions

ファイルの読み取り権限を削除

chmodコマンドを使い、ファイルの読み取り権限を削除します。パーミッションを200を使用して、所有者にのみ書き込み権限を設定します。

hirotano@ubuntu-1:~$ chmod 200 test_text_oct.txt
hirotano@ubuntu-1:~$ ls -l

--w------- 1 hirotano hirotano 58 Sep 18 13:06 test_text_oct.txt

ファイルの内容をcatコマンドで読み取ろうとすると、Permission deniedのエラーメッセージが表示されます。

hirotano@ubuntu-1:~$ cat test_text_oct.txt
cat: test_text_oct.txt: Permission denied

ファイルの書き込み権限を削除

次に、chmodコマンドを使ってファイルの書き込み権限を削除します。400を使用して、所有者にのみ読み取り権限を設定します。

hirotano@ubuntu-1:~$ chmod 400 test_text_oct.txt

hirotano@ubuntu-1:~$ ls -l

-r-------- 1 hirotano hirotano 58 Sep 18 13:06 test_text_oct.txt

echoコマンドを使ってファイルにテキストを追加しようとすると、Permission deniedのエラーメッセージが表示されます。

hirotano@ubuntu-1:~$ echo "Trying to add this line." >> test_text_oct.txt
-bash: test_text_oct.txt: Permission denied

テストスクリプトの準備

テスト用に、test_script_oct.shという名前のbashスクリプトを作成します。

hirotano@ubuntu-1:~$ echo 'echo "Hello from test_script_oct.sh!"' > test_script_oct.sh

hirotano@ubuntu-1:~$ ls -l

-rw-rw-r-- 1 hirotano hirotano 38 Sep 18 13:17 test_script_oct.sh

デフォルトで、所有者には、実行権限が与えられていないことが確認できます。

このスクリプトを実行すると、Permission deniedのエラーメッセージが表示されます。

ファイルの実行権限の付与

chmodコマンドを使って、スクリプトの実行権限を追加します。500を使用して、所有者に読み取りと実行の権限のみを設定します。

hirotano@ubuntu-1:~$ chmod 500 test_script_oct.sh

hirotano@ubuntu-1:~$ ls -l

-r-x------ 1 hirotano hirotano 38 Sep 18 13:17 test_script_oct.sh

スクリプトがエラーなく実行されることが確認できます。

hirotano@ubuntu-1:~$ ./test_script_oct.sh        
Hello from test_script_oct.sh!

シンボリック表現による権限確認

テストファイルの準備

まず、テスト用として、test_text_sym.txtという名前のテキストファイルを作成します。

hirotano@ubuntu-1:~$ echo "This is a sample text file for testing symbolic permissions." > test_text_sym.txt

hirotano@ubuntu-1:~$ ls -l

-rw-rw-r-- 1 hirotano hirotano 61 Sep 18 13:27 test_text_sym.txt

ファイルの読み取り権限を削除

chmodコマンドを使って、所有者ファイルの読み取り権限を削除します。

hirotano@ubuntu-1:~$ chmod u-r test_text_sym.txt
 
hirotano@ubuntu-1:~$ ls -l
--w-rw-r-- 1 hirotano hirotano 61 Sep 18 13:27 test_text_sym.txt

ファイルの内容をcatコマンドで読み取ろうとすると、Permission deniedのエラーメッセージが表示されます。

hirotano@ubuntu-1:~$ cat test_text_sym.txt 
cat: test_text_sym.txt: Permission denied

所有者に書き込み権限を付与し、元の権限に戻します。ファイルの内容をcatコマンドで読み取ることができます。

hirotano@ubuntu-1:~$ chmod u+r test_text_sym.txt  

hirotano@ubuntu-1:~$ cat test_text_sym.txt       
This is a sample text file for testing symbolic permissions.
hirotano@ubuntu-1:~$ ls -l
-rw-rw-r-- 1 hirotano hirotano 61 Sep 18 13:27 test_text_sym.txt

ファイルの書き込み権限を削除

chmodコマンドを使ってファイルの書き込み権限を削除します。

hirotano@ubuntu-1:~$ chmod -w test_text_sym.txt

hirotano@ubuntu-1:~$ ls -l
-r--r--r-- 1 hirotano hirotano 61 Sep 18 13:27 test_text_sym.txt

echoコマンドを使ってファイルにテキストを追加しようとしようとすると、Permission deniedのエラーメッセージが表示されます。

hirotano@ubuntu-1:~$ echo "Trying to add this line." >> test_text_sym.txt
-bash: test_text_sym.txt: Permission denied

スクリプトの実行権限の追加

テスト用に、test_script_sym.shという名前のbashスクリプトを作成します。

hirotano@ubuntu-1:~$ echo 'echo "Hello from test_script_sym.sh!"' > test_script_sym.sh

hirotano@ubuntu-1:~$ ls -l
-rw-rw-r-- 1 hirotano hirotano 38 Sep 18 13:38 test_script_sym.sh

このスクリプトを実行すると、Permission deniedのエラーメッセージが表示されます。

hirotano@ubuntu-1:~$ ./test_script_sym.sh    
-bash: ./test_script_sym.sh: Permission denied

スクリプトの実行権限を追加

chmodコマンドを使って、スクリプトの実行権限を追加します。

hirotano@ubuntu-1:~$ chmod +x test_script_sym.sh 

hirotano@ubuntu-1:~$ ls -l
-rwxrwxr-x 1 hirotano hirotano 38 Sep 18 13:38 test_script_sym.sh

スクリプトがエラーなく実行されることが確認できます。

hirotano@ubuntu-1:~$ ./test_script_sym.sh 
Hello from test_script_sym.sh!
スポンサーリンク

動作確認(ディレクトリ)

ディレクトリの権限はファイルの権限の考え方とは少し異なり、注意が必要です。

テストディレクトリとファイルの準備

まず、test_dirという名前のディレクトリと、その中にsample.txtというテキストファイルを作成します。

hirotano@ubuntu-1:~$ mkdir test_dir
hirotano@ubuntu-1:~$ echo "This is a sample text inside the directory." > test_dir/sample.txt

ディレクトリの権限を確認します。

hirotano@ubuntu-1:~$ ls -l
drwxrwxr-x 2 hirotano hirotano 4096 Sep 18 13:58 test_dir

所有者には、読み取り書き込み実行の権限が設定されています。

ディレクトリの実行権限を削除

ディレクトリに実行権限を削除すると、そのディレクトリ内にcdできなくなります

hirotano@ubuntu-1:~$ chmod 600 test_dir
hirotano@ubuntu-1:~$ cd test_dir
-bash: cd: test_dir: Permission denied
hirotano@ubuntu-1:~$ ls -l
drw------- 2 hirotano hirotano 4096 Sep 18 13:58 test_dir

ディレクトリの書き込み権限を削除

次に、ディレクトリの書き込み権限を削除します。この権限を削除すると、ディレクトリ内のファイルを削除することができなくなります

hirotano@ubuntu-1:~$ chmod 500 test_dir
hirotano@ubuntu-1:~$ rm test_dir/sample.txt
rm: cannot remove 'test_dir/sample.txt': Permission denied

hirotano@ubuntu-1:~$ ls -l
dr-x------ 2 hirotano hirotano 4096 Sep 18 13:58 test_dir
スポンサーリンク

ディレクトリの権限を再帰的に変更

chmod-Rオプションを使用すると、ディレクトリとその中のすべてのサブディレクトリ、ファイルの権限を再帰的に変更することができます。

テスト用に、test_dirという名前のディレクトリと、その中にsub_dirというサブディレクトリ、さらにその中にsample.txtというテキストファイルを作成します。

hirotano@ubuntu-1:~$ mkdir -p test_dir/sub_dir
hirotano@ubuntu-1:~$ echo "This is a sample text inside the subdirectory." > test_dir/sub_dir/sample.txt

権限を確認します。

hirotano@ubuntu-1:~$ ls -l
drwxrwxr-x 3 hirotano hirotano 4096 Sep 18 14:16 test_dir

hirotano@ubuntu-1:~$ ls -l test_dir 
drwxrwxr-x 2 hirotano hirotano 4096 Sep 18 14:16 sub_dir

hirotano@ubuntu-1:~$ ls -l test_dir/sub_dir/
-rw-rw-r-- 1 hirotano hirotano 47 Sep 18 14:16 sample.txt

-Rオプションなしでの権限変更

chmodtest_dirの権限を変更しますが、-Rオプションは使用しません

hirotano@ubuntu-1:~$ chmod 700 test_dir

この変更後、test_dirにはの権限は変更されていますが、sub_dirやその中のsample.txtの権限は変更されていません

hirotano@ubuntu-1:~$ ls -l
drwx------ 3 hirotano hirotano 4096 Sep 18 14:16 test_dir

hirotano@ubuntu-1:~$ ls -l test_dir/
drwxrwxr-x 2 hirotano hirotano 4096 Sep 18 14:16 sub_dir

hirotano@ubuntu-1:~$ ls -l test_dir/sub_dir/
-rw-rw-r-- 1 hirotano hirotano 47 Sep 18 14:16 sample.txt

-Rオプションありでの権限変更

chmod-Rオプションを使用して、test_dirとその中のすべてのサブディレクトリ、ファイルの権限を再帰的に変更します。

hirotano@ubuntu-1:~$ chmod -R 700 test_dir

この変更により、test_dirだけでなく、sub_dirやその中のsample.txtの権限も変更されます。

hirotano@ubuntu-1:~$ ls -l
drwx------ 3 hirotano hirotano 4096 Sep 18 14:16 test_dir

hirotano@ubuntu-1:~$ ls -l test_dir/
drwx------ 2 hirotano hirotano 4096 Sep 18 14:16 sub_dir

hirotano@ubuntu-1:~$ ls -l test_dir/sub_dir/
-rwx------ 1 hirotano hirotano 47 Sep 18 14:16 sample.txt

コメント