今号では、Linux におけるパーミッションについて説明します!
パーミッションとは
パーミッションとは、Linux におけるファイルやディレクトリに対するアクセス権限のことです。
一般ユーザとして使用している場合、あまりパーミッションについて意識することは少ないかもしれませんが、普段利用しているすべてのファイルやディレクトリにパーミッションが設定されています。
「誰が」「どのような操作を」許可されているかを決める重要な仕組みであり、パーミッションが適切に設定されていないと不正アクセスやデータの改ざん、誤ってプログラムを実行してしまう可能性があります。
なお、パーミッションはファイルを作成するごとに自分で設定する必要はなく、システム側の設定とアプリ側の設定を組み合わせた上で、それぞれデフォルトのパーミッションが割り振られます。
適宜、パーミッションを変更しながら運用していくことになります。
パーミッションの考え方
Linux では、ファイルやディレクトリのパーミッションは下記 3つのカテゴリに分けられます。
- Owner (所有者):ファイルを作成したユーザ
- Group (グループ):Owner が所属するグループ
- Other (その他):Owner 以外の全ユーザ
また、各カテゴリに対して下記 3つの権限を設定できます。
- r (読み取り):ファイルの読み取り権限
- w (書き込み):ファイルの書き込み権限
- x (実行):ファイルの実行権限 (プログラムやスクリプトを実行する場合)
パーミッションの確認方法
最も簡単なのは、ls -l コマンドを実行してファイルの情報を表示する方法です。
$ ls -l test.txt -rw-r--r--. 1 ykaino ykaino-group 0 Mar 24 12:00 test.txt
出力された各内容を、それぞれ説明します。
- -rw-r–r–:パーミッションを表す文字列
- 1:リンク数。通常は 1となるが、ハードリンクがある場合は増加する
- ykaino:Owner。ファイルを作成したユーザ名
- ykaino-group:group。Owner が所属するグループ名
- 1234:ファイルサイズ (byte 単位)
- Mar 20 10:00:ファイルの最終更新日時
- example.txt:ファイル名 (ディレクトリの場合はディレクトリ名)
続いて、パーミッションを表す文字列について説明します。
上記で出力された文字列 (-rw-r–r–) を例にすると、
- 1文字目 (-):ファイルの種類。- は通常のファイル、d はディレクトリ、l はシンボリックリンクとなる
- 2~4文字目 (rw-):Owner (所有者) の権限。読み、書きは許可、実行は不可
- 5~7文字目 (r–):Owner がいるグループに所属する、他のユーザの権限。読みは許可、書き、実行は不可
- 8~10文字目 (r–):上記に該当しない他のユーザの権限。読みは許可、書き、実行は不可
なお、ls -l コマンドの他に、getfacl コマンドを実行してファイルの情報を表示する方法もあります。
$ getfacl test.txt # file: test.txt # owner: ykaino # group: ykaino-group user::rw- group::r-- other::r--
デフォルトのパーミッション
上記の test.txt ファイルでは、ユーザに読み、書きの権限があり、グループおよびその他のユーザには読み取り権限のみが与えられていました。
これは、ファイルやディレクトリにデフォルトで設定されるパーミッションがあらかじめ決められているために上記のような結果となっています。
デフォルトのパーミッションは umask というパラメータで設定されます。
ls -l コマンドの実行結果では、各権限を r (読み取り)、w (書き込み)、x (実行) で表現しましたが、umask では各権限を数値で表現します。
- r (読み取り):4
- w (書き込み):2
- x (実行):1
例えば、読み取りと書き込みの権限がある場合は 4 + 2 = 6、読み取りと実行の権限がある場合は 4 + 1 = 5 のように考えます。
Linux ファイルシステムでは、ファイルの基本パーミッションが 666 (読み書きのみ、実行権限なし)、ディレクトリの基本パーミッションが 777 (読み書き実行すべて可能)になっています。そこから umask の値を引き算して、最終的なパーミッションが決定します。
現在の umask の値は umask コマンドで確認できます。
# umask 0022
ファイルの場合は 666 から 022 を引いて 644 (Owner は読み、書き権限あり、グループおよびその他のユーザには読み取り権限あり)、ディレクトリの場合は 777 から 022 を引いて 755 (Owner は読み、書き、実行権限あり、グループおよびその他のユーザには読み、実行権限あり) になります。
umask の値を一時的に変更する場合は umask コマンドを実行します。
$ umask 027
永続的に変更する場合は ~/.bashrc もしくは ~/.profile などのファイルに、下記の様な umask の設定を追加します。
umask 027
次号では、パーミッションの変更方法や、特殊なパーミッションについて説明します!