警告

本資料は参考情報として提供されています。内容についてのご質問には必ずしもお答えできない可能性がございます。

6. アクセス権の管理

Linux環境におけるアクセス権、特にファイルアクセスの制御について記述します。

Linuxはマルチユーザーに対応しており、複数人が1つのシステムを同時に使うことができます。そのため、ファイルや実行中のプログラムには所有者やアクセス権が設定され、誰にどのような操作を許可するかを管理しています。特に、スーパーコンピューターシステムのような複数人で共有する環境では、ファイルやディレクトリの権限が適切に設定されないと、データの共有ができなかったり、意図しないユーザーがファイルを閲覧したり編集したりすることがありえます。

ヒント

ToMMoスーパーコンピューターシステムにおける権限や各ディレクトリの所有者については、アカウントの種類スパコンのディレクトリ構成もご覧ください。

6.1. 所有者とアクセス権を確認する

ファイルやディレクトリの所有者と設定されている権限は、ls -lコマンドで確認することができます。

$ ls -l
合計 4.0k
drwxrwxr-x 2 project__personal-id project  22  4月  1 12:34 data
-rw-rw-r-- 1 project__personal-id project 118  4月  1 14:56 process.log

このうち、1列目のうちrwxrwxr-xがアクセス権を、3、4列目がそれぞれ所有者と所有グループを示します。rwxrwxr-xの箇所はファイルモードビット(file mode bits)と呼ばれます。

所有者にはユーザー名が、所有グループには通常、所有者が所属するグループのいずれかが割り当てられます。

6.2. アクセス権の読み方

アクセス権を示すrwxrwxr-xは3つに分けて読み取ります、つまり最初のrwx、次のrwxそして最後のr-xです。これらはそれぞれ、所有者、所有グループに属するユーザー、それ以外のユーザーに対する権限を示します。

意味

1

rwx

所有者に対する権限

2

rwx

所有グループに属するユーザーに対する権限

3

r-x

それ以外のユーザーに対する権限

さらにrwxはそれぞれ読み取り権限(Readable)、書き込み権限(Writable)、実行権限(eXecutable)を示します。それぞれの権限があればr,w,xが表示され、ない場合は代わりに-が表示されます。

これらの権限の意味は、対象がファイルかディレクトリかで異なります。

権限

ファイルの場合

ディレクトリの場合

r

読み取りを許可

中身の一覧の取得を許可(例えばlsコマンド)

w

書き込みを許可

ファイルやディレクトリの作成・削除を許可

x

実行を許可(→実行権限

アクセスを許可(cdコマンドでそのディレクトリやサブディレクトリをカレントディレクトリにすること)

ファイルに対する権限の例:

$ ls -l
total 24
-rw-r-----  1 project__another-id   project  19  4 1 12:00 readable.txt
-rw-------  1 root                  root         8  4 1 12:00 secret.txt
-rw-r-----  1 project__personal-id  project  19  4 1 12:00 writable.txt
$ whoami
project__personal-id
$ cat readable.txt  # `project__personal-id`に対する権限は`r--`
You can read this.
$ echo "I can write something." >> readable.txt
bash: readable.txt: Permission denied
$ echo "I can write here." >> writable.txt  # `project__personal-id`に対する権限は`rw-`
$ cat writable.txt
You can read this.
I can write here
$ cat secret.txt  # `project__personal-id`に対する権限は`---`
cat: secret.txt: Permission denied

ディレクトリに対する権限の例:

$ ls -l
total 0
drwxr-x---  2 project__personal-id  project  64  3 19 01:43 my_directory
drwxr-x---  2 project__another-id   project  64  3 19 01:43 share
drwx--x--x  3 root         root     96  3 19 01:52 share_hidden
$ whoami
project__personal-id
$ ls share  # `r-x`
sharedata.txt
$ touch share/mydata.txt
touch: share/mydata.txt: Permission denied
$ ls share_hidden/  # `--x`
ls: share_hidden/: Permission denied
$ cat share_hidden/personal-id.log  # `ls`はできなくてもパスを知っていればアクセスはできる
You can read it.

6.3. アクセス権を変更する

アクセス権はchmod(change mode) コマンドで変更することができます。アクセス権の変更は、ファイルやディレクトリの所有者のみが実施することができます。

chmod [options] [ugoa][+-=][rwx] files...
chmod [options] NNN files...
-R, --recursive

ディレクトリとそれに含まれるファイルやディレクトリの権限をまとめて変更する

--reference <FILE>

権限を指定する代わりに、指定したパスの権限をFILEの権限に揃える

chmodは、オプションの他に、権限の操作を指定する文字列もしくは数字と、操作の対象となるファイルやディレクトリへのパスを引数として取ります。

権限の操作を指定する文字列は、ugoaから1つ以上(もしくは省略)、+-=から1つ、rwxから1つ以上の文字を組み合わせて表記されます。

操作する対象の指定

文字

意味

u

所有者(user)

g

所有グループ(group)

o

他のユーザー(other users)

a

上記全て(all, 省略した場合の動作)

操作の指定

記号

意味

+

権限を追加する

-

権限を削除する

=

指定した権限に設定する

$ chmod +x job.sh  # 全てのユーザーに実行権限を付与する(`a+x`でも同じ)
$ chmod ug+rw job.sh  # 所有者と所有グループに読み書きする権限を付与
$ chmod o-x job.sh  # その他のユーザーから実行権限を剥奪
$ chmod g=rx job.sh  # 所有グループに読み込み・実行権限を付与、書き込み権限がついていたら外す

このような指定方法の他に、3桁の8進数で権限を指定することもできます。これは、9種類の権限の有無を9桁の2進数に見立てて、それを8進数表記することで数値化したものです。

たとえば、chmod 754を実行すると、rwxr-xr--が設定されます。

user

group

others

ファイルモード

r

w

x

r

-

x

r

-

-

2進数

1

1

1

1

0

1

1

0

0

各桁の10進表記

4

2

1

4

0

1

4

0

0

合計(8進数)

7

5

4

6.4. 所有者と所有グループ

ファイルの所有者と所有グループは、ファイルを作成したユーザーと、そのプライマリグループ(primary group)が設定されます。プライマリグループは、ユーザーが所属するグループの1つが使われます。Linux環境では、ユーザーは複数のグループに所属することができ、また最低でも1つの(プライマリ)グループに所属します。プライマリグループ以外にユーザーが所属しているグループは、セカンダリグループ(secondary groups) と呼ばれます。

所有者や所有グループを変更するために、chownchgrpコマンドが用意されていますが、通常は所有者や所有グループの変更は行えません。所有者の変更には管理者権限が必要です。また、ユーザーが所属しているグループが複数あれば、所有グループの変更は行えますが、ToMMoのスーパーコンピューターシステムでは、ユーザーがプライマリグループにのみ所属しているため、所有グループの変更も行えません。詳しくは、アカウントの種類をご覧ください。

注釈

Linuxには、システム管理のための特権(管理者権限)を持つ管理者ユーザー(あるいはスーパーユーザー・root)が用意されています。管理者ユーザーはあらゆる操作が可能で、例えばファイルの所有者や権限設定に関わらず操作が可能です。また、サーバーの設定ファイルなどは管理者ユーザーのみが編集、もしくは閲覧可能なよう設定されていることが一般的です。