ファイルのアクセス権(パーミッション)の変更

ファイルのアクセス権(パーミッション)の変更

パーミッション・アクセス権について

冒頭で説明した通り、所有者や所有グループといった情報は、ファイルやディレクトリを自由に操作できないようにするために、操作できるユーザーを限定したり、操作内容を限定するために使用します。

アクセス権(ファイル操作に関する3つの権限)

操作内容については、具体的には以下の3つの権限を使って、アクセスを制御します。

これらの権利を、アクセス権、またはパーミッションと呼びます。
※各アクセス権の意味については、後ほど解説します。

ファイル操作に関する、ユーザーの分類

また、冒頭の説明と重複しますが、ファイル操作の対象となるユーザーは、

  • (ファイルの)所有者であるユーザー
  • (ファイルの)所有グループに、属するユーザー
  • それ以外のユーザー

の3つに分類することができ、それぞれの操作権限を、ファイルごとに設定します。

イメージ図(ファイルAについて)

各アクセス権の意味

アクセス権(パーミッション)は、ファイル(ディレクトリ)ごとに設定しますが、ファイルかディレクトリかによって、意味が多少異なります。

ファイルの場合

ディレクトリの場合

読む込む権限

対象のディレクトリに含まれるファイルの一覧を取得(確認)する権限
具体的には、lsコマンドでファイルの一覧を確認できます。

書き込む権限

対象のディレクトリ直下で、ファイル・ディレクトリを作成/削除する 権限

実行できる権限

対象のディレクトリに移動する(対象のディレクトリをカレントディレクトリにする)権限

パーミッションの表示形式(各ユーザーの権限を確認する)

以上の内容を踏まえ、あるファイルに対する、各ユーザー(所有者、所有グループ、その他)の権限を確認するために、パーミッションの表示形式について、説明します。

パーミッションの表示形式は、次の二つに分類することができます。

  • 記号で表示する場合
  • 3桁の数字で表示する場合

それぞれの表示形式について、一つずつ確認していきましょう。

記号で表示する場合

まず記号で確認する場合、10桁の記号で以下の通りに、ユーザーの権限を表示します。

記号で表示する場合

※ 表示例①
※ 表示例②

実践①:記号でファイルのパーミッションを確認する

1. 事前準備:rootユーザーをログオフして、user01に戻る
[root@localhost user01]# exit
2. パーミッションを確認する

lsコマンドに「-l」オプションを付与することで、パーミッションが確認できます。

[user01@localhost ~]$ls -l /bin/ls
-rwxr-xr-x. 1 root root 117608  8月 20  2019 /bin/ls

実践②:記号でディレクトリのパーミッションを確認する

1. 事前準備:対象のディレクトリの作成
[user01@localhost ~]$mkdir a1
2. パーミッションを確認する

lsコマンドに「-ld」オプションを付与することで、ディレクトリのパーミッションが確認できます。

[user01@localhost ~]$ls –ld a1
drwxrwxr-x 2 user01 user01 6  2月 19 16:58 a1

3桁の数字で表示する場合

3桁の数字で表示する場合、左から次の順番で、ユーザーごとの権限を指定します

  • 1文字目:所有者のアクセス権
  • 2文字目:所有グループのアクセス権
  • 3文字目:その他のアクセス権

3桁の数字で表示する場合

各権限の数値

また各権限は、以下の通りに数値で表すことができますが、

  • 読み取り権=4
  • 書き込み権=2
  • 実行権=1

複数の権限が付与される場合には、それぞれの権限の数値を合算して表します。

※ 例①:読み込み権、書き込み権の二つが付与される場合

読み込み権の 4 + 書き込み権の 2 = 6

※ 例②:読み込み権、実行権の二つが付与される場合

読み込み権の 4 + 実行権の 1 = 5

各権限の数値の組み合わせ表

また各権限の数値の組み合わせを表にまとめると次の通りです。

例:あるファイルのアクセス権を確認する

以上の内容を踏まえて、あるファイルのパーミッションが「664」だった場合の、各ユーザーのアクセス権について、考えていきましょう。

所有者の権限

6 = 4 + 2 = 読み込み権 + 書き込み権

所有グループの権限

6 = 4 + 2 = 読み込み権 + 書き込み権

その他の権限

4 = 読み込み権

chmod(change mode)コマンドでパーミッションを変更

書式

chmod  [-R] アクセス権(※) ファイル名またはディレクトリ名のパス

対象のファイル(またはディレクトリ)の、アクセス権(パーミッション)を変更するためのコマンドです。
「-R」オプションを付けると、指定したディレクトリ以下すべてのアクセス権をまとめて変更できます。

コマンドを実行できるユーザー

コマンドを実行できるユーザは、以下に限定されます。

  • 対象ファイルの所有者
  • rootユーザー

書式

chmod  [-R] アクセス権(※) ファイル名またはディレクトリ名のパス

※ アクセス権に、指定する内容について

コマンドのアクセス権に指定する内容は、以下のどちらかの方法に分けることができます。

3桁の数字で、ユーザごとのパーミッションを設定する方法

ユーザーごとの(所有者、所有グループ、その他のユーザ)のアクセス権を表す、各桁が0~7の3桁の数字(例:664)を使用します。
「パーミッションの表示形式 > 3桁の数字で表示する場合」で学習した内容を、そのまま使用します。

記号を使って、ユーザー別にパーミッションを設定する方法

ユーザー別に、アクセス権を個別に記号を使って指定します。
詳しくは次のページ以降で、説明します!

実践①:3桁の数字で、ユーザごとのパーミッションを設定する方法

1. 対象のファイルのパーミッションを確認する
[user01@localhost ~]$ ls -l services
-rw-r--r-- 1 user01 user01 670293  2月  8 12:25 services
2. パーミッションを変更する

パーミッションを「rwxrw-r—」に変更するために、アクセス権を「764」に指定して、変更のコマンドを実行します。

[user01@localhost ~]$ chmod 764 services
[user01@localhost ~]$ ls -l services
-rwxrw-r-- 1 user01 user01 43  2月  8 12:35 services
3. パーミッションを元に戻す

変更前のパーミッション「rw-r–r—」に戻すために、アクセス権を「644」に指定して、変更のコマンドを実行します。

[user01@localhost ~]$ chmod 644 services

記号を使って、ユーザー別にパーミッションを設定する方法

記号を使った方法では、

「誰に(所有者、所有グループ、その他)」、
「どのアクセス権」を、
「設定(追加、削除、上書き)するのか」を、

記号を使って指定します。

具体的には、左から次の順番で記号を使って表します。

※ 権限の追加(+)と、権限の上書き(=)の違い

既存の権限が設定されていた場合、前者(追加:+)は既存の権限を残したまま、新しく権限を追加できますが、
後者(上書き:= )は、既存の権限を一旦白紙にした状態で、新しく指定した権限のみが設定されます。

※ 例:所有者の権限が 「r- -(読み込み権のみ)」だった場合
u + w(追加)

所有者の権限に書き込み権を追加すると、そのまま読み込み権と書き込み権が、所有者に設定されます。
所有者の権限 = r w -(読み込み権+書き込み権)

u = w(上書き)

所有者の権限に書き込み権を上書きすると、書き込み権だけが所有者に設定されます。
所有者の権限 = – w -(書き込み権)

実践②: 記号を使って、ユーザー別にパーミッションを設定する

1. 対象のファイルのパーミッションを確認する
[user01@localhost ~]$ ls -l services
-rw-r--r-- 1 user01 user01 670293  2月  8 12:25 services
2. パーミッションを変更する
[user01@localhost ~]$ chmod u+x services
[user01@localhost ~]$ ls -l services
-rwxr--r-- 1 user01 user01 670293  2月  8 12:25 services
[user01@localhost ~]$ chmod g+w services
[user01@localhost ~]$ ls -l services
-rwxrw-r-- 1 user01 user01 670293  2月  8 12:25 services

ディレクトリのパーミッションを変更

続いてディレクトリのアクセス権の変更を行いますが、その前にディレクトリのアクセス権について復習しましょう。

ディレクトリのアクセス権について【復習】

読む込む権限

対象のディレクトリに含まれるファイルの一覧を取得(確認)する権限
具体的には、lsコマンドでファイルの一覧を確認できます。

書き込む権限

対象のディレクトリ直下で、ファイル・ディレクトリを作成/削除する 権限

実行できる権限

対象のディレクトリに移動する(対象のディレクトリをカレントディレクトリにする)権限

実践①: ディレクトリから読む権利を削除する

[user01@localhost ~]$ chmod u-r a1
[user01@localhost ~]$ ls -l
d-wxrwxr-x 2 user01 user01 6  2月 19 16:58 a1
[user01@localhost ~]$ ls a1
ls: ディレクトリ a1 を開くことが出来ません: 許可がありません

[user01@localhost ~]$ cp today a1/today
[user01@localhost ~]$ cd a1

[user01@localhost a1]$ ls
ls: ディレクトリ . を開くことが出来ません: 許可がありません

実践②: ディレクトリから書く権利を削除する

[user01@localhost a1]$ cd
[user01@localhost ~]$ chmod 555 a1
[user01@localhost ~]$ ls –ld a1
dr-xr-xr-x 2 user01 user01 19  2月 19 17:03 a1

[user01@localhost ~]$ ls –l a1
-rw-rw-r-- 1 user01 user01 43  2月 19 17:05 today
[user01@localhost ~]$ cp today a1/today1
cp: 通常ファイル `a1/today1' を作成できません: 許可がありません
[user01@localhost ~]$ cd a1
[user01@localhost a1]$

実践③: ディレクトリから実行権を削除する

[user01@localhost a1]$ cd
[user01@localhost ~]$ chmod 655 a1
[user01@localhost ~]$ ls -l
drw-r-xr-x 2 user01 user01     19  2月 19 17:03 a1

[user01@localhost ~]$ cp today a1/today2
cp: failed to access `a1/today2': 許可がありません
[user01@localhost ~]$ cd a1
-bash: cd: a1: 許可がありません

参考:新規ファイルのパーミッション

自分が作ったファイルやディレクトリには自動的にパーミッションが設定されます。
通常は、ファイルは664、ディレクトリは775に設定されます。(一般ユーザーの場合)
実は通常の場合、UNIXの標準のパーミッションはファイルは666、ディレクトリは777と決まっています。
しかし、ファイルマスク値(umask値)という値が設定されているので、ファイルは664、
ディレクトリは775になるのです。umaskコマンドで表示できます。
標準のアクセス権からumaskの値を引いたものが、実際のパーミッションになります

参考:スティッキ―ビット( Sticky bit)

UNIXやLinuxで利用できる特殊なパーミッションの一つ

  • スティッキービットが設定されたディレクトリは、誰でもファイルを作成・書き込みが行える
  • 作成したファイルやディレクトリを削除出来るのは、所有者だけ(rootユーザー除く)
[user01@localhost ~]$ ls -ld /tmp 
drwxrwxrwt. 20 root root 4096  2月 25 10:43 /tmp

これで第7章 所有者/グループとパーミッションの管理は終わりました!


NEXT>> 練習問題