【LinuC】1.02.1 ファイルの所有者とパーミッション

LinuC 1.02.1 ファイルの所有者とパーミッションについてまとめました。

ファイルの所有者

Linuxシステム上のすべてのファイルやディレクトリには、 1人の所有者と1つのグループが関連付けられます。

  • 所有者
    • そのファイルやディレクトリを作成したユーザーが所有者として設定される。
  • グループ
    • 所有者のプライマリグループがファイルやディレクトリのグループとして設定される。

パーミッション

パーミッションとは、Unixで扱われるファイルやディレクトリのアクセス権の設定です。
ファイルやディレクトリは扱う所有者、グループ、その他の3種類毎に、「実行」「書き込み」「読み込み」という3種類のアクセス権限を設定できます。

アクセス権限の種別 概要
読み込み権(r) ファイル内容を読み込みのみ可能。ディレクトリの場合、ディレクトリ内のファイルの一覧を表示可能。
書き込み権(w) ファイル内容を書き換え可能。ディレクトリの場合、ディレクトリ内でファイルやディレクトリの作成および削除が可能。
実行権(x) ファイルを実行可能。ディレクトリの場合、ディレクトリ内のファイルにアクセス可能。

例えばあるファイルに「755」と設定したとき、そのファイルのアクセス権限は以下のようになります。

権限の区分 設定値 アクセス権限
所有者権限 7 「読込み」「書込み」「実行」すべて可。
グループ権限 5 「読込み」「実行」のみ可。
その他のユーザーの権限 5 「読込み」「実行」のみ可。

3種類の権限は、それぞれに1ビットを使って許可、不許可を設定します。

10進数 2進数 記号 権限
0 000 「読込み」「書込み」「実行」すべて不可。
1 001 –x 「実行」のみ可。
2 010 -w- 「書込み」のみ可。
3 011 -wx 「書込み」「実行」のみ可。
4 100 r– 「読込み」のみ可。
5 101 r-x 「読込み」「実行」のみ可。
6 110 rw- 「読込み」「書込み」のみ可。
7 111 rwx 「読込み」「書込み」「実行」すべて可。

2進数の0が許可しない、1が許可することを示しています。
3bitのうち、左から順に読み込み(r)、書き込み(w)、実行(x)となります。

アクセス権限毎の設定値は所有者、グループ、その他の順にそれぞれ0から7の整数で表わさます。
例えばあるファイルに「755」と設定したとき、そのファイルのアクセス権限は以下のようになります。

権限の区分 設定値 アクセス権限
所有者権限 7 「読込み」「書込み」「実行」すべて可。
グループ権限 5 「読込み」「実行」のみ可。
その他のユーザーの権限 5 「読込み」「実行」のみ可。

パーミッションの確認(ls -l)

「ls -l」コマンドでカレントディレクトリ内のファイルのパーミッションを確認できます.

$ ls -l
total 804
drwxr-xr-x 3 root root       4096 Feb 20 08:50 NetworkManager
drwxr-xr-x 2 root root       4096 Feb 20 08:51 PackageKit
drwxr-xr-x 7 root root       4096 Feb 20 09:15 X11
-rw-r--r-- 1 root root       3028 Feb 20 08:48 adduser.conf
drwxr-xr-x 2 root root       4096 Feb 20 09:15 alternatives
drwxr-xr-x 3 root root       4096 Feb 20 08:50 apparmor
drwxr-xr-x 7 root root       4096 Feb 20 08:51 apparmor.d
drwxr-xr-x 3 root root       4096 Feb 20 08:51 apport
drwxr-xr-x 7 root root       4096 Feb 20 08:49 apt
-rw-r----- 1 root daemon      144 Nov 13  2018 at.deny
-rw-r--r-- 1 root root       2319 Feb 25  2020 bash.bashrc

「-rw-r–r–」や「drwxr-xr-x」などが, ファイルの権限設定を表します.

場所 読み方
最初の1文字目 ファイル種別を表しています。
2文字目から4文字目 ファイルの所有者(User)に対する権限
5文字目から7文字目 ファイルの所有グループ(Group)に対する権限
8文字目から10文字目 その他のユーザー(Others)に対する権限

最初の1文字目(ファイル種別)

種別 意味
ファイル
d ディレクトリ
l シンボリックリンク

「-rw-r–r–」だと以下のとおりになります.

  • 最初の1文字目が「-」
    • 「ファイル種別」が「ファイル」
  • 2文字目から4文字目が「rw-」
    • 「所有者」に「読み取り」と「書き込み」の権限がある
  • 5文字目から7文字目が「r–」
    • 「所有グループ」に「読み取り」の権限がある
  • 8文字目から10文字目が「r–」
    • 「その他」に「読み取り」の権限がある
【パーミッションとは】アクセス権限の種類・設定値の意味
パーミッションとは?アクセス権限の種類・設定値の意味などについてまとめました。

パーミッションの変更(chmodコマンド)

chmodコマンドは、ファイルやディレクトリのアクセス権限(パーミッション)を設定します。

chmod [オプション] [ファイル・ディレクトリ]
記号 意味
u 所有者の権限
g グループの権限
o その他のユーザーの権限
a すべての権限
+ 後に記述した権限を付加する
後に記述した権限を削除する
= 後に記述した権限にする
r 読み込み権限
w 書き込み権限
x 実行権限
s セットID
t スティッキ・ビット
-v コマンド実行結果を表示
-c 変更があった場合のみ、実行結果を表示
-R 再帰的に変更

実行例1

以下のコマンドを実行するとファイル「test.csv」のアクセス権限は以下のようになります。

chmod 755 test.csv
権限の区分 設定値 アクセス権限
所有者権限 7 「読込み」「書込み」「実行」すべて可。
グループ権限 5 「読込み」「実行」のみ可。
その他のユーザーの権限 5 「読込み」「実行」のみ可。

実行例2

# すべてのユーザーに実行権限を付与
chmod +x test.csv
# -rwxr-xr-x      test.csv

#グループに書き込み権限をその他のユーザーにはすべて禁止
chmod g+w,o= test.csv
# -rwxrwx---      test.csv

#ディレクトリとディレクトリ内のファイル全ての権限を(再帰的に)変更
chmod -R 766 test_dir

# 実行結果を表示させながら実行(vオプション)
chmod -vR 755 test_dir

# 結果が変わらない場合は実行結果の表示なし(cオプション)
chmod -cR 755 test_dir
【Linuxコマンド】chmodでアクセス権限(パーミッション)を変更
Linuxコマンド「chmod」でファイルやディレクトリのアクセス権限(パーミッション)を変更する方法についてオプションと例題付きでまとめました。

ファイルの所有者・所有グループ変更(chown、chgrpコマンド)

chown

chown コマンドは、ファイルの所有者・所有グループを変更できます。

chown [ オプション ] <ユーザー名 [ :グループ名 ]> < ファイル or ディレクトリ名>
オプション 概要
 -c 結果の詳細を表示
 -R 再帰的に変更

【実行例】

$ chown user1:group1 file1
$ ls -l
drwxr-xr-x 2 user1 group1 4096 3月 5 04:16 file1

chgrp

chgrpコマンドは、所有グループの変更のみできます。

chgrp [オプション] グループ名 [ファイル・ディレクトリ]
オプション 概要
 -c 変更があればメッセージを表示
 -v コマンドの実行状況を表示
 -f エラーメッセージを非表示
 -h シンボリックリンク自体のグループを変更
 -R ディレクトリ内のグループも変更

SUID

SUID(Set User ID) が設定されているコマンドやプログラムが実行すると、実行したユーザーではなく「ファイルの所有者の権限」で実行されます。

chmod コマンドでファイルのパーミッションを変更する際、ファイル所有者のアクセス権を設定する引数に「s」もしくは「4000」を指定すると、そのファイルにSUIDが設定されます。

$ chmod u+s file1
$ ls -l
$-rwSr--r-- 1 root root 0 11月 5 02:14 file1

なお、上記のように実行権限がない(ファイル644 など)にSUIDを設定した場合、大文字のSが表示されます。
実行権限を持ったファイルの場合、以下のように小文字のsが表示されます。

$ chmod u+s file1
$ ls -l
drwsr-xr-x 2 root root 4096 11月 5 02:15 file1

アクセス権が 755 のファイルに「4000」を指定してSUIDを設定する場合は以下のコマンドになります。

$ chmod 4755 file1

SGID

SGID (Set Group ID)が設定されているコマンドやプログラムが実行されると、実行したユーザーやグループでなく、そのファイルの所有グループの権限で実行されます。
chmod コマンドでファイルのパーミッションを変更する際、ファイル所有者のアクセス権を設定する引数に「g」もしくは「2000」を指定すると、そのファイルにSGID が設定されます。

$ chmod g+s file1
$ ls -l
drwsr-sr-x 2 root root 4096 11月 5 12:34 file1
$ chmod 2755  file1
$ ls -l
drwxr-sr-x 2 root root 4096 11月 5 12:34  file1

スティッキービット(stickybit)

テッキービットが設定されているディレクトリは、書き込み許可権限のあるファイルであっても、他のユーザーが所有しているものは削除できなくなります。
また、スティッキービットが設定されているディレクトリ内に作成したファイルやディレクトリは、所有者以外はファイルやディレクトリの名前変更と削除ができなくなります。
「/tmp」ディレクトリなどm他のユーザーに誤って削除されたくない一時ファイルを保護する場合などに使用します。

chmod コマンドでファイルのパーミッションを変更する際、ファイル所有者のアクセス権を設定する引数に「t」もしくは「1000」を指定すると、そのファイルにスティッキービットが設定されます。

$ chmod +t file1
$ ls -l
drwsr-sr-t 2 root root 4096 11月 5 02:14 file1
$ chmod 1755 file1
$ ls -l
drwxr-xr-t 2 root root 4096 11月 5 02:14 file1

スティッキービットの設定を解除(Off)するコマンドは以下のとおりです。

$ chmod -t file1
$ ls -l
drwsr-sr-x 2 root root 4096 11月 5 02:14 file1

デフォルトのアクセス権(umaskコマンド)

umaskコマンドは、のユーザーがファイルやディレクトリを作成した際、デフォルトのパーミッションを指定するマスクを設定します。
作成したファイルのデフォルトパーミッションは666(rw-rw-rw-)、ディレクトリは777です。
この「デフォルトのパーミッション」と「umaskで指定されたマスクの論理否定」との論理積が、ファイルやディレクトリ作成時の最終的なパーミッションとなります。
umask値の設定にはパーミッションとして利用したくないビットを「1」として指定します。

計算例1(ファイル)

umaskを所有者以外は書き込み不可の022(000 010 010)とする。
「000 010 010」の論理否定は各ビットを反転させた「111 101 101」となる。
デフォルトパーミッションは666(110 110 110)なので、最終的なパーミッションは

「110 110 110」 AND 「111 101 101」 = 110 100 100 (644)

となる。

計算例2(ディレクトリ)

umaskを所有者以外は書き込み不可の022(000 010 010)とする。
「000 010 010」の論理否定は各ビットを反転させた「111 101 101」となる。
デフォルトパーミッションは777(111 111 111)なので、最終的なパーミッションは

「111 111 111」 AND 「111 101 101」 = 111 101 101(755)

となる。

umask [オプション] マスク値
オプション 概要
-p 現在設定されているマスク設定を8進数形式で表示
-S 現在設定されているマスク設定を記号(例:u=rwx,g=rwx,o=rwx)で表示

umaskコマンドにオプションを付けないで実行すると、現在設定されているumask値が表示されます。

$ umask
0022

デフォルト以外のumask値の変更はログイン中のみ有効となり、ログアウトするとumask値は元に戻ります。

ファイルの拡張属性の変更と確認(chattr、lsattrコマンド)

chattr コマンドは、ファイルの拡張属性を変更できます。
lsattrコマンドは、ファイルの拡張属性を確認できます。

chattr [オプション] 拡張属性 ファイルパス
lsattr  ファイルパス
オプション 概要
 -R- 指定したディレクトリの中にある全てのファイルの属性を変更
拡張属性 概要
A atime を変更しない
a 追加書き込み以外の書き込み不可(root のみ設定可能)。
c 圧縮して保存。
d dump コマンドによるバックアップの対象外となる。
i 変更不可(root のみ設定可能)。
S 即座にディスクへ書き込み。
s 削除したとき、使用していたブロックを 0 にする。

実行例

$ chattr +i sample.csv
$ lsattr sample.csv
----i--------e- sample.csv

$ echo sample-message >> sample.csv

bash: sample.csv: 許可がありません

関連ページ

【LinuC入門】試験対策と例題まとめ(学習サイト)
LinuCの試験対策と例題(学習サイト)についてまとめました。
【LPIC入門】Linuxの基礎と試験範囲別の解説
LPICに従って、Linuxの基礎と試験範囲別の解説についてまとめました。
【Linuxコマンド入門】主なコマンドとサンプル集
Linuxコマンドの主な使い方とサンプル集について入門者向けにまとめました。

コメント