パーミッションとは

ぱーみっしょん

Linuxなどで、ファイルやディレクトリごとに、所有者(user)・グループ(group)・その他(others)のそれぞれに読み取り(r)・書き込み(w)・実行(x)を許すかどうかを決めた設定。ls -l では rwxr-xr-- のように、chmod では 754 のような8進数(r = 4、w = 2、x = 1 の合計)でも表す。新しく作るファイルの権限は umask で決まる。root(スーパーユーザ)は、一般にこの制限を受けずにファイルを読み書きできる。

「パーミッション」は、1分野の2問の練習問題に出てきます(Linuxとコマンドラインの基礎など)。

この用語の分野: Linuxとコマンドラインの基礎

表記の読み方

ls -l の先頭の10文字は、1文字目がファイルの種類(- は通常のファイル、d はディレクトリ、l はシンボリックリンク)、続く3文字ずつが所有者、グループ、その他の権限です。8進数では各桁が r = 4、w = 2、x = 1 の合計なので、rwxr-xr-- は 754、rw-r--r-- は 644 になります。chmod 754 file のように数で指定するほか、chmod g+w file や chmod o-r file のように記号で一部だけを変えることもできます。

ディレクトリの権限

ディレクトリでは、r は中の名前の一覧を読む権限、w は中にファイルを作ったり消したりする権限、x は中に入って名前でファイルにたどり着く権限です。そのため、ファイルを消せるかどうかはファイル自身ではなく、ディレクトリの w と x で決まります。/tmp のように誰でも書き込めるディレクトリには、ほかの人のファイルを消せないようにするスティッキービット(t)を付けます。

特別なビットと umask

実行したときに所有者の権限で動かす setuid(所有者の x の位置が s)、グループの権限で動かす setgid、前述のスティッキービットがあり、8進数ではそれぞれ 4000、2000、1000 の位で表します。新しいファイルは 666、ディレクトリは 777 から umask のビットを取り除いた権限で作られ、umask 022 ならファイルは 644、ディレクトリは 755 になります。

パーミッションの練習問題に挑戦

ホームディレクトリで「ls」を実行すると notes.txt だけが表示され、「ls -a」を実行すると「.」「..」「.bashrc」「notes.txt」が表示された。この結果の説明として、正しいものはどれか。

  1. A「.」はカレントディレクトリ、「..」は親のディレクトリを表し、名前が「.」で始まる .bashrc は隠しファイルなので、-a を付けないと表示されない
  2. B「.」はカレントディレクトリ、「..」は親のディレクトリを表し、.bashrc は書き込みが禁止されたファイルなので、-a を付けないと表示されない
  3. C「.」はルートディレクトリ、「..」はホームディレクトリを表し、名前が「.」で始まる .bashrc は隠しファイルなので、-a を付けないと表示されない
答えと解説を見る

正解:A. 「.」はカレントディレクトリ、「..」は親のディレクトリを表し、名前が「.」で始まる .bashrc は隠しファイルなので、-a を付けないと表示されない

どのディレクトリにも、そのディレクトリ自身を表す「.」と、親のディレクトリを表す「..」という項目があります。名前が「.」で始まるファイルやディレクトリは隠しファイルとして扱われ、ls はオプションを付けないと表示せず、-a(all)を付けると表示します。.bashrc のようなシェルやツールの設定ファイルは、ふだんの一覧で目立たないように、隠しファイルの名前にすることが多くあります。表示されるかどうかは名前だけで決まり、ファイルの権限とは関係ありません。

Linuxの sudo コマンドの説明として、正しいものはどれか。

  1. Asudo を付けたコマンドは、root のパスワードを知っていれば誰でも実行でき、誰が実行したかの記録はどこにも残らない
  2. Bsudo を付けたコマンドは、ほかのプロセスより高い優先度がカーネルから与えられ、CPUを優先して使えるので速く実行される
  3. Csudoers で許可された利用者が、別の利用者(既定では root)の権限でコマンドを実行するもので、既定では自分のパスワードを入力する
答えと解説を見る

正解:C. sudoers で許可された利用者が、別の利用者(既定では root)の権限でコマンドを実行するもので、既定では自分のパスワードを入力する

root は、ファイルの権限の制限を基本的に受けずにシステムのすべてを操作できる管理者のアカウント(スーパーユーザ)です。sudo は、/etc/sudoers などで許可された利用者だけが、コマンドを1つずつ root などの権限で実行できるようにするしくみで、既定の設定では本人のパスワードで確認し、実行したコマンドを記録します。root のパスワードを共有して root で常にログインするより、誰が何をしたかを追いやすく、必要なときだけ強い権限を使えます。権限を必要最小限にする考え方は、セキュリティの最小権限の原則にもとづいています。

よくある質問

chmod 777 にすれば問題が解決しますか?

「Permission denied」は消えても、誰でも書き換えや実行ができる状態になり、ほかの利用者やプログラムに中身を変えられるおそれがあります。まず、どの利用者がどの操作をできる必要があるかを確かめ、所有者やグループを chown・chgrp で合わせたうえで、必要な権限だけを付けるのが基本です。

共有サーバでチームのメンバーだけにファイルを読ませるにはどうしますか?

チーム用のグループを作ってメンバーを加え、ファイルやディレクトリのグループをそのグループにして、グループに r(ディレクトリには r と x)を、その他には何も与えない設定(ファイルなら 640、ディレクトリなら 750 など)にします。人ごとに細かく決めたい場合は、ACL(setfacl・getfacl)を使う方法もあります。

解説の中の「パーミッション」

「パーミッション」が出てくる問題(2問)

  1. ホームディレクトリで「ls」を実行すると notes.txt だけが表示され、「ls -a」を実行すると「.」「..」「.bashrc」「notes.txt」が表示された。この結果の説明として、正しいものはどれか。
  2. Linuxの sudo コマンドの説明として、正しいものはどれか。

Linuxとコマンドラインの基礎の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

関連する用語

シェル スーパーユーザ 最小権限の原則 inode SSH 環境変数 Git grep cron シグナル(Unix)

用語集の一覧へ