Bash Basics | Basicsトップページ | トップページ
アクセス権限
UNIX OS、およびUnix系OSでは複数のユーザーが同時にシステムを利用することが可能となっているため、セキュリティ面から各ユーザー間でのアクセス制御を行う必要があります。
アクセス制御を行うための仕組みは非常にシンプルで、グループ・ユーザー、権限の付与・剥奪が基本となります。
アクセス制御の基本となるのは、「誰が」、「何に」、「アクセスできるようにする」かです。
この「誰が」の最小単位が「ユーザー」であり、シェルであれば、そのシェルを誰が実行しているかです。
全てのユーザーを1つ1つ個別に制御するだけでは、大きな組織などでは管理が非常に煩雑になるため、ユーザーを何らかのカテゴリに沿ってグループ分けしたものが「グループ」です。
例えば、所属部署やチームごとにグループを定義することが可能です。
また、UNIX OS、およびUnix系OSでは以下の3種類のユーザーが存在します。
特権ユーザー、 システム管理ユーザー | システムのあらゆる操作が可能な特権を持つユーザー、root |
---|---|
システムユーザー | システム内で特定のサービスを提供するためのユーザー 例えばメールサーバーやWebサーバーを実行するユーザー ※サービスに万が一脆弱性があり、プロセスを乗っ取られたりコマンドをリモートから実行されるような場合、アクセスできる範囲(影響範囲)を局所化するために特定サービスのみを実行できるように制限しています |
一般ユーザー | 上記以外の一般のユーザー |
基本的なアクセス権限は以下の3つ「rwx」となりますが、アクセス対象がファイルかディレクトリかで考え方が異なりますのでご注意ください。
ファイルに対する操作は対象のファイルそのものに権限が必要となりますが、ディレクトリ内のファイルの内容を参照・更新する場合には、ディレクトリに対するの実行権限が必要となります。
また、ディレクトリ内にファイルを作成したり、削除する場合には、ディレクトリに対する書き込み権限と実行権限が必要となります。
種類 | 権限 | ファイルに対する操作 | ディレクトリに対する操作 | |
---|---|---|---|---|
r | 読み込み | ファイルの内容、および情報の参照が可能 | ディレクトリに存在するファイル名の取得が可能 | |
w | 書き込み | ファイルの内容、および情報の更新が可能 | ディレクトリの情報の更新が可能 | ディレクトリ内でファイルの作成・削除が可能 |
x | 実行 | ファイルの実行が可能 | ディレクトリに移動が可能 ディレクトリ内のファイルの情報の参照、および更新が可能 |
$ touch file
$ ls -la file
-rw-rw-r--. 1 user1 user1 0 1月 18 21:25 file
-rw-rw-r--. | 1 | user1 | user1 | 0 | 1月 18 21:25 | file |
ファイルタイプと権限 | ファイルの場合はハードリンク数 ディレクトリの場合はディレクトリ内のサブディレクトリ数 ※.と..もサブディレクトリとしてカウントされます |
所有者名 所有者名が不明な場合、所有者ID |
グループ名 グループ名が不明な場合、グループID |
ファイルサイズ ファイルがデバイスファイルの場合、メジャー番号とマイナー番号 |
最終更新日時 | ファイル名 |
カラム | 意味 | 備考 | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | ファイルタイプ | 主なファイルタイプは表の通りです。
| ||||||||||||||||||
2-4 | 所有者の権限 | 所有者、グループ、その他のユーザーのそれぞれに3文字(読み込み権限: r、書き込み権限: w、実行権限: x)で表現され、権限がない場合は-が表示されます。
| ||||||||||||||||||
5-7 | グループの権限 | |||||||||||||||||||
8-10 | その他ユーザーの権限 | |||||||||||||||||||
11 | SELinuxが有効化された環境下でのセキュリティコンテキスト | セキュリティコンテキストの場合のみ.が表示されます。 |
アクセス権限をrとwとxの3つのON/OFFのフラグ(2進数)として考えます。つまり、rとwとxを3つのビットとして考え、アクセス権がある=1、アクセス権がない=0とすることで、以下の表のように3桁の2進数として表現することが可能となります。
権限の状態 | rwx表記 | 2進数 | 8進数 |
---|---|---|---|
r(OFF), w(OFF), x(OFF) | --- | 000 | 0 |
r(OFF), w(OFF), x(ON) | --x | 001 | 1 |
r(OFF), w(ON), x(OFF) | -w- | 010 | 2 |
r(OFF), w(ON), x(ON) | -wx | 011 | 3 |
r(ON), w(OFF), x(OFF) | r-- | 100 | 4 |
r(ON), w(OFF), x(ON) | r-x | 101 | 5 |
r(ON), w(ON), x(OFF) | rw- | 110 | 6 |
r(ON), w(ON), x(ON) | rwx | 111 | 7 |
$ chmod 764 file
u | 所有者 |
---|---|
g | グループ |
o | その他のユーザー |
+ | アクセス権の追加 |
---|---|
- | アクセス権の剥奪 |
= | アクセス権の指定 |
r | 読み込み権限 |
---|---|
w | 書き込み権限 |
x | 実行権限 |
$ chmod u=rwx,g=rw,o=r file
|
左記の例では、testというディレクトリを作成し、testディレクトリにa、b、cというファイルを作成した後、それぞれのファイルにa、b、cの文字を書き込んでいます。 その後、ファイルbのアクセス権限を400(所有者のみ参照可)、ファイルcのアクセス権限を000(全てなし)に設定しています。 その状態でファイルa、b、cの内容を参照しようとすると、cは権限がないためエラーとなっていることがわかります。 また、続けてファイルb、cを削除しようとするとそれぞれファイルの書き込み権限がないため、警告が表示されていますが、「y(yes)」で応答することで削除は成功しています。 |
|
次にカレントディレクトリ(test)のアクセス権限を100(所有者のみ参照可)に変更したため、ディレクトリ内のファイルの一覧を参照することができなくなり、エラーが表示されていますが、ファイルの名前がわかっているファイルaの情報を取得することは問題ないことがわかります。 |
|
さらにカレントディレクトリ(test)のアクセス権限を200(所有者の書き込み権限のみ)とするとディレクトリの情報を取得することも、改めて書き込み権限を付与することもできなくなっています。 そのためいったん上の階層に移動して、再びtestディレクトリに移動しようとしても失敗します。これはディレクトリに対する実行権限がないためです。 |
通常、ユーザーが実行するコマンドはそのユーザーの権限とグループの権限で実行されます。また、操作を行うユーザーがディレクトリに対する書き込み権限と実行権限を持っていれば、新たにファイルを作成したり、名前を変更したり、削除することが可能です。新たに作成されるファイルは操作を行ったユーザーが所有者となり、ユーザーのグループがファイルのグループとなります。
UNIX OS、およびUnix系OSではこれらの基本的なアクセス権限以外に以下の3つの特殊な権限があります。
名称 | ファイルに対する権限 | ディレクトリに対する権限 |
---|---|---|
SUID (Set User ID) |
対象のファイルが実行形式(バイナリ)のコマンドの場合、そのファイルの所有者の権限で実行されます。(実効ユーザー) 対象のファイルがスクリプトでは効果なし。 |
なし |
SGID (Set Group ID) |
対象のファイルが実行形式(バイナリ)のコマンドの場合、そのファイルのグループの権限で実行されます。(実効グループ) 対象のファイルがスクリプトでは効果なし。 |
ディレクトリ内に新たに作成されるファイルやディレクトリのグループを継承します |
スティッキービット (Sticky Bit) |
なし | ディレクトリ内のファイルに対する名前の変更と削除をファイルの所有者とディレクトリの所有者に限定します |
$ find /usr/bin -perm -4000 -or -perm -2000 | xargs ls -la
-rwsr-xr-x. 1 root root 2447320 1月 5 02:45 /usr/bin/Xorg
-rwsr-xr-x. 1 root root 53048 10月 31 2018 /usr/bin/at
-rwxr-sr-x. 1 root cgred 15632 8月 9 2019 /usr/bin/cgclassify
-rwxr-sr-x. 1 root cgred 15608 8月 9 2019 /usr/bin/cgexec
-rwsr-xr-x. 1 root root 73888 8月 9 2019 /usr/bin/chage
-rws--x--x. 1 root root 23968 2月 3 2021 /usr/bin/chfn
-rws--x--x. 1 root root 23880 2月 3 2021 /usr/bin/chsh
-rwsr-xr-x. 1 root root 57576 1月 14 01:52 /usr/bin/crontab
-rwsr-xr-x. 1 root root 32096 10月 31 2018 /usr/bin/fusermount
-rwsr-xr-x. 1 root root 78408 8月 9 2019 /usr/bin/gpasswd
-rwsr-xr-x. 1 root root 61320 12月 3 00:32 /usr/bin/ksu
-rwx--s--x. 1 root slocate 40520 4月 11 2018 /usr/bin/locate
-rwsr-xr-x. 1 root root 44264 2月 3 2021 /usr/bin/mount
-rwsr-xr-x. 1 root root 41936 8月 9 2019 /usr/bin/newgrp
-rwsr-xr-x. 1 root root 27856 4月 1 2020 /usr/bin/passwd
-rwsr-xr-x. 1 root root 23576 4月 1 2020 /usr/bin/pkexec
---x--s--x. 1 root nobody 382216 11月 25 01:35 /usr/bin/ssh-agent
---s--x---. 1 root stapusr 212080 10月 14 2020 /usr/bin/staprun
-rwsr-xr-x. 1 root root 32128 2月 3 2021 /usr/bin/su
---s--x--x. 1 root root 151424 10月 14 21:28 /usr/bin/sudo
-rwsr-xr-x. 1 root root 31984 2月 3 2021 /usr/bin/umount
-r-xr-sr-x. 1 root tty 15344 6月 10 2014 /usr/bin/wall
-rwxr-sr-x. 1 root tty 19544 2月 3 2021 /usr/bin/write
対象の権限 | 付与 | 剥奪 | ||
---|---|---|---|---|
数値指定 | 文字指定 | 数値指定 | 文字指定 | |
SUID | 通常の権限設定の8進数の数値に4000を加算 | u+s | 通常のアクセス権限のみを指定 | u-s |
SGID | 通常の権限設定の8進数の数値に2000を加算 | g+s | 通常のアクセス権限のみを指定 | g-s |
スティッキービット | 通常の権限設定の8進数の数値に1000を加算 | o+t | 通常のアクセス権限のみを指定 | o-t |
$ ls -ld /usr/bin/passwd /usr/bin/write /tmp
-rwsr-xr-x. 1 root root 27856 4月 1 2020 /usr/bin/passwd
-rwxr-sr-x. 1 root tty 19544 2月 3 2021 /usr/bin/write
drwxrwxrwt. 20 root root 4096 1月 19 15:07 /tmp
実行ユーザー: user1
|
実行ユーザー: user2
|
user2が作成したfile2への書き込み権限がないため、失敗します。 |
user1が作成したfile1への書き込み権限がないため、失敗します。 |
ディレクトリへの書き込み権限と実行権限があるため、user2が作成したファイルの名前の変更が可能です。 |
|
ディレクトリへの書き込み権限と実行権限があるため、user1が作成したファイルの名前の変更が可能です。 |
|
ファイルに対する書き込み権限がないため、削除しようとすると警告が表示されますが、「y」と入力するとディレクトリへの書き込み権限と実行権限があるため、user2が作成したファイルでも削除が可能です。 |
ファイルに対する書き込み権限がないため、削除しようとすると警告が表示されますが、「y」と入力するとディレクトリへの書き込み権限と実行権限があるため、user1が作成したファイルでも削除が可能です。 |
ディレクトリtestを作成し、その他のユーザーへの書き込み権限とスティッキービットを設定します。 |
user1が作成したディレクトリtestに移動します。 |
|
|
ディレクトリの所有者であり、ディレクトリにスティッキービットが設定されているため、user2が作成したファイルの名前の変更が可能です。 |
|
ディレクトリにスティッキービットが設定されており、ディレクトリの所有者ではないため、user1の所有するファイルの名前の変更はできません。 |
|
同様にuser1の所有するファイルの削除もできません。 |
|
ディレクトリの所有者であり、ディレクトリにスティッキービットが設定されているため、user2が作成したファイルの削除も可能です。 |
ファイルやディレクトリを新しく作成する場合、システムの管理ポリシーに従ってデフォルトのアクセス権限が付与されます。このルールは「ファイル生成マスク」と呼ばれシェルの設定ファイルなどで指定されています。
ファイル生成マスクは8進数の数値で指定され、下記のような意味合いを持ちます。
対象 | 新しい対象に設定される権限 | ファイル生成マスクが002の場合の例 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ファイル | 666からマスク値を引いた値 | 666 - 002 = 664
|
||||||||||||
ディレクトリ | 777からマスク値を引いた値 | 777 - 002 = 775
|