ファイルのアクセス権を理解する
【連載コラム:Linuxを学ぼう(15)】
サーバーを扱う上で必須と言える技術が「Linux」。今回は「パーミッション」とも呼ばれるアクセス権について解説します。
今回は、ファイルのアクセス権について解説します。アクセス権は「パーミッション」とも呼ばれます。
ファイルに対するアクセスの種類
ファイルに対するアクセスは、以下の3つに分類されます。
- ファイルからの読み出し(r)
- ファイルへの書き込み(w)
- ファイルをプログラムとして実行(x)
3つめの実行には、バイナリーのプログラムだけでなく、シェルスクリプトなどを含みます。また、ディレクトリの場合には若干考え方が異なりますが、それは後ほど別途解説します。
ファイルにアクセスする主体
ファイルに対してアクセスする主体は、以下の3つに分類されます。主体は、プログラムを実行して対象となるファイルにアクセスしようとするのが誰か、ということです。
- ユーザー(u)
- グループ(g)
- その他のユーザー(o)
ユーザーとグループは明示的に指定する必要があるため、ls -lコマンドの実行結果に表示されます。
$ ls -l test.txt
-rw-rw-r--. 1 linuc linuc 0 5月 24 02:04 test.txt
この例では、ユーザーlinuc、グループlinucがtest.txtの所有者であり、アクセス権を持っています。
アクセス権の表記
アクセス権は、各ファイルに対して読み書き実効をrwxで表記し、左からユーザー、グループ、その他のユーザーと並べます。一番左にはディレクトリやその他の属性が付いている時の表記に使用されます。
たとえば、/etc/passwdはLinuxのユーザー情報を格納しているので、誰でも読めますが、書き込めるのは所有ユーザーであるrootだけです。
$ ls -l /etc/passwd
-rw-r--r--. 1 root root 2618 5月 24 02:04 /etc/passwd
実際のパスワードが書かれている/etc/shadowにはアクセス権が付与されていません。この状態でもユーザーrootは読むことはできます。
$ ls -l /etc/shadow
----------. 1 root root 1481 5月 24 02:04 /etc/shadow
以下の表記は実行可能なプログラムによくあるアクセス権です。
$ ls -l /bin/ls
-rwxr-xr-x. 1 root root 143328 4月 1 04:44 /bin/ls
プログラムの実行には読み込みも必要なので、rとxはセットで設定されている必要があります。
ディレクトリのアクセス権
ディレクトリのアクセス権は基本的にファイルと一緒ですが、実行(x)だけ考え方が異なります。ディレクトリの実行とは「そのディレクトリをカレントディレクトリにできる」という動作になります。
他のユーザーにディレクトリ内を見せたくないという設定にする場合、rとxの両方を外すようにしてください。
アクセス権の設定方法
アクセス権の設定にはchmodコマンドを使います。指定する際のオプションにはいくつかの方法があります。
- アクセス主体を指定する
アクセス主体を指定するには、uやg、oを指定します。
- アクセス権の付け外しを指定する
アクセス権を付けるには+、外すには-を指定します。
- アクセス権を指定する
アクセス権はr、w、xで指定します。
この3つを組み合わせると、たとえば以下のような指定が行えます。
元のアクセス権の状態は以下の通りです。
$ ls -l test.txt
-rw-rw-r--. 1 linuc linuc 0 5月 24 02:04 test.txt
その他のユーザーに書き込み権限を与える
$ chmod o+w test.txt
$ ls -l test.txt
-rw-rw-rw-. 1 linuc linuc 0 5月 24 02:04 test.txt
グループの書き込み権限を外す
$ chmod g-w test.txt
$ ls -l test.txt
-rw-r--rw-. 1 linuc linuc 0 5月 24 02:04 test.txt
アクセス権の数値指定
上記方法は現在のアクセス権に対して、付けたり外したりする方法ですが、それ以外に数値でアクセス権を指定する方法があります。
まず、アクセス権を以下の数値で換算します。
r:4
w:2
x:1
指定したいアクセス権は、これらの数値の合計値で表されます。たとえば、rw-rw-r--は664となります。ディレクトリの場合、必ずxが付くので、+1が原則となります。rwxr-xr-xは755となります。
以下はアクセス権を644と指定した例です。
$ chmod 644 test.txt
$ ls -l test.txt
-rw-r--r--. 1 linuc linuc 0 5月 24 02:04 test.txt
- 筆者紹介
宮原 徹 氏
Linux標準教科書、Linuxサーバー構築標準教科書などの監修者。LinuCレベル1/レベル2 Version10.0の改訂作業にも協力。また、幅広いOSSに関する情報提供の場として「オープンソースカンファレンス(OSC)」の企画運営も。
バックナンバー
第21回:外部からWebサーバーにアクセスする
第20回:Webサーバーを動かす
第19回:Webサーバーをインストールする
第17回:ネットワークの状態確認を理解する
第15回:ファイルのアクセス権を理解する
第14回:パッケージをアップデートする dnf編
第13回:PAMを理解する
第12回:グループとは何かを理解する
第11回:sudoコマンドについて理解する
第10回:suコマンドで特権ユーザーになる
第9回:ユーザー権限を理解する
第8回:SSHによるリモートログイン
第6回:Linuxイストールの実際
第5回:Linuxインストールの準備
第3回:学習環境を用意する
第2回:Linuxをどう学ぶのか
第1回:Linuxを学ぼう