最終更新日 2005/06/04
パーミッション
パーミッションとは
パーミッションの表示
ファイルとディレクトリのパーミッション
パーミッションの設定(記号)
パーミッションの設定(数値)
特殊なパーミッションパーミッションとは
パーミッションとは、ファイルやディレクトリに設定(する)されているアクセス権のことを言います。アクセス権とは、どのユーザに対して、どのような操作を許可するかという情報のことです。
具体的には、GNU/Linuxシステムのユーザを「オーナー」「グループ」「その他のユーザ」の3種類に分けます。
そして、そのユーザに対して「読み込み権限」「書き込み権限」「実行権」の3つの操作を与えます。
例えば、ユーザには「読み」「書き」「実行」を与え、グループに対しては「読み」のみ、その他のユーザには何も与えないなどです。
パーミッションを与えることによって、ファイルやディレクトリを保護することができます。
パーミッションの表示
ファイルやディレクトリのパーミッションを表示するには、「ls -l」コマンドを使用します。パーミッションの表示
# ls -l 合計 4 -rwxrwxrwx 1 root root 0 3月 4 11:27 file -rw-r--r-- 1 root root 0 3月 4 11:27 file2 lrwxrwxrwx 1 root root 4 3月 8 18:43 filelink -> file drwxr-xr-x 2 root root 4096 3月 8 18:43 testdir |
一番左の「rwxrwxrwx」の部分がパーミッションを表しています。rwxの3文字が3セットです。
左からの3つが「オーナー」に対してのアクセス権、真中が「グループ」に対して、次が「その他」に対してのアクセス権です。
「r」が読み込み権限、「w」が書き込み権限、「x」が実行権を表しています。
rwxが始まる前の「-」や「d」はパーミッションを表しているのではなく、ファイルの種類を表示しています。
「-」はファイル、「l」はシンボリックリンク、「d」はディレクトリをそれぞれ表しています。
ファイルとディレクトリのパーミッション
パーミッションは、「読み」「書き」「実行」の3つになります。しかし、ファイルのパーミッションとディレクトリのパーミッションの意味合いは少し違います。
ファイルに対しては、「読み」「書き」「実行」の意味合いをそのまま当てはめてもらって構いません。
ディレクトリに若干違いますが、GNU/Linuxシステムではディレクトリもファイルの一種として扱うため、そのことを頭に入れて考えると 分かりやすくなります。
ファイルのパーミッション
| パーミッション | 意味 |
| 読み込み権限 | ファイルの内容を閲覧できる。lessなどのページャで開くことができるが、上書き編集はできない |
| 書き込み権限 | ファイルを編集することができる。viなどのエディタで開いて編集し上書きすることができる |
| 実行権 | スクリプトファイル(シェルスクリプトなど)を実行することができる |
ディレクトリのパーミッション
| パーミッション | 意味 |
| 読み込み権限 | ディレクトリの一覧を表示することができる。ディレクトリ内でlsを実行することができる |
| 書き込み権限 | ディレクトリ内でファイルを作成したり削除したりできる。 |
| 実行権 | ディレクトリ内にcdコマンドで移動することができる |
パーミッションの設定(記号)
パーミッションの設定は、「chmod」コマンドを使用します。
書式: chmod <パーミッション> <ファイル又はディレクトリ>
書式のパーミッションの部分は数値による設定と、記号による設定のどちらかで設定が可能です。記号によるパーミッション設定を行う場合は、ユーザ(u,g,o,a)オペレータ(+,-,+)アクセス権(r,w,x)の3つを使用します。
ユーザを表す記号
| 記号 | 説明 |
| u | ファイルの所有者(オーナー) |
| g | ファイルの所有グループ |
| o | その他のユーザ(アザー) |
| a | すべてのユーザ(ugoで表すこともできる) |
オペレータを表す記号
| 記号 | 説明 |
| + | アクセス権を追加する |
| - | アクセス権を削除する |
| = | アクセス権を設定する |
アクセス権を表す記号
| 記号 | 説明 |
| r | 読み込み権限 |
| w | 書き込み権限 |
| x | 実行権 |
記号による設定のパーミッション箇所は、<ユーザ><オペレータ><アクセス権>の形になります。
オーナーに対して書き込み件を与える場合は「u+w」、グループに対して実行権を削除する場合は「g-x」とします。
また、「uo+rx」などユーザ・アクセス権とも複数指定することもできます。
記号を用いた設定例
1: $ chmod u+x testfile 2: $ chmod g-w testfile 3: $ chmod u=rw testfile 4: $ chmod a+x testfile |
- ユーザに対して実行権を追加
- グループに対して書き込み権を削除
- ユーザに対して読み込み権と書き込み権を設定
- すべて(オーナ・グループ・その他の人)に対して実行権を追加
パーミッションの設定(数値)
数値による設定は、パーミッションを8進数の数字で表します。パーミッション「rwxr-xr--」の場合に、2進数で許可があるところを「1」許可がないところを「0」で表すと「111101100」の9ビットで 表すことができます。これをユーザ(オーナー・グループ・その他)ごとに3ビットずつに分けます。
オーナは「rwx」で「111」、グループは「r-x」で「101」、その他は「r--」で「100」となります。
それぞれ、ユーザごとに2進数を8進数に変換すると、ユーザ「7」、グループ「5」、その他「4」となり、この数字を繋げて「754」となります。
つまり、それぞれのパーミッションを8進数で表した場合は、「r=4」「w=2」「x=1」となります。
パーミッションと2進数表記と8進数表記
| パーミッション | 2進数表記 | 8進数表記 |
| rwx | 111 | 7 |
| rw- | 110 | 6 |
| r-x | 101 | 5 |
| r-- | 100 | 4 |
| -wx | 011 | 3 |
| -w- | 010 | 2 |
| --x | 001 | 1 |
| --- | 000 | 0 |
数値による設定のパーミッション箇所は、8進数による全員のアクセス権という形になります。
オーナーに対しては、読み・書きを、グループに対して読みだけを、その他に対しては、なにも与えない場合は「640」とします。
記号を用いた設定例
1: $ chmod 777 testfile 2: $ chmod 755 testfile 3: $ chmod 600 testfile 4: $ chmod 000 testfile |
- すべて(オーナ・グループ・その他の人)に対してフルアクセスを与える
- ユーザはフルアクセス、グループとその他の人は、読みと実行が可能
- ユーザは読み・書きができるが、ユーザ以外はなにもできない
- すべて(オーナ・グループ・その他の人)に対してアクセスを与えない(rootはパーミッションは関係ない)
特殊なパーミッション
ファイルのパーミッションには、特殊なフラグが存在します。「SUID」「SGID」「SICKY」の3つのモードです。通常パーミッションは、9ビットで表現しますが正確にはこの上に3ビット追加した合計12ビットになります。
suidビット
通常コマンドを一般ユーザが実行すると、実行したユーザの権限で動作します。指定したコマンドがrootの所有者だったとしても、実行したユーザの権限で動作しますので、root所有のファイルなどにはアクセスできません。
そこで、一般ユーザが実行した際にrootユーザの権限が必要になるコマンドにsuidがセットされています。
代表的なものは、passwdコマンドです。passwdコマンドは、誰でも実行することができます。
rootは、全ユーザのパスワードの変更を、一般ユーザは自分のパスワードを変更することが可能です。
パスワード変更する場合は、「/etc/shadow」ファイルを変更する必要があります。
「/etc/shadow」ファイルを変更するの変更には、当然rootユーザの権限が必要になってきます。
そこで、このpasswdコマンドには、suidがセットされています。
一般ユーザが実行するとroot権限で動作し、「/etc/shadow」ファイルを変更することが可能になります。
suidビットの表示は、「r-s--x--x 」のようにユーザのパーミッションの実行部分「x」の換わりに「s」になります。
設定方法は、数値で「4000」、記号では、「u+s」となります。
/usr/bin/passwdコマンド
# ll /usr/bin/passwd -r-s--x--x 1 root root 19336 9月 7 2004 /usr/bin/passwd |
sgidビット
sgidビットをファイルに設定した場合の動作は仕組みは、suidと変わりません。所有ユーザではなく、所有グループの権限で動作することになります。
また、ディレクトリに設定した場合は、ディレクトリの下に作成されたファイルは、すべてディレクトリのグループと同じになります。
sgidビットの表示は、「rwxr-sr-x 」のようにグループのパーミッションの実行部分「x」の換わりに「s」になります。
設定方法は、数値で「2000」、記号では、「g+s」となります。
/sbin/netreportコマンド
# ll /sbin/netreport -rwxr-sr-x 1 root root 10839 10月 28 2004 /sbin/netreport |
sickyビット
通常のパーミッションを利用して、誰でも書き込む可能(フルアクセス)なディレクトリを作成したいとします。その場合は、パーミッションの値を「rwxrwxrwx」「777」とすることによって実現できます。
しかし、この場合は誰でも書き込む可能ですので、誰でも削除も可能になります。
誰でも書き込むはできて、作成したファイルについては、作成者だけが削除可能なディレクトリを作成する場合に「sickyビット」と使用します。
sickyビットの表示は、「drwxrwxrwt」のようにその他のパーミッションの実行部分「x」の換わりに「t」になります。
設定方法は、数値で「1000」、記号では、「o+t」となります。
/tmpディレクトリ
# ll -d /tmp drwxrwxrwt 4 root root 4096 6月 4 04:02 /tmp |
Top