パーミッションについて(chmod/su/sudo/chown/chgrp)

参考: http://linuxcommand.org/lc3_lts0090.php

パーミッションに関わるメソッドについてまとめてみました。 具体的には次のとおりです。

  • chmod (chage mode)- ファイルアクセス権限を変更する
  • su (substitute user)- 一時的にsuperuserになる
  • sudo (superuser do)- 一時的にsuperuserになる
  • chown (change owner)- 所有権を変更する
  • chgrp (change group)- グループ所有権を変更する

ファイルパーミッション

Linuxシステムにおいて、 それぞれのファイルやディレクトリはアクセス権限がユーザーに対して割り当てられています。 それはつまりファイルのread権限、 write権限、 execute権限(実行権限)です。

ファイルに与えられた権限を確認するには、 ls コマンドを使用します。 例として/bin/bashファイルを見てみましょう。

[me@linuxbox me]$ ls -l /bin/bash


-rwxr-xr-x 1 root root  316848 Feb 27  2000 /bin/bash

ここから見て取れることは、

  • /bin/bashファイルはrootユーザーによって所有されている。
  • superuserはこのファイルに対してread, write, execute権限を持つ。
  • このファイルはrootグループによって所有されている。
  • rootグループはこのファイルに対してread, execute権限を持つ。
  • 誰でもこのファイルを読み、 実行することができる。
- rwx rwx rwx
|  |   |   |__全ユーザーに対するread, write, execute権限
|  |   |______ファイルのグループ所有者に対するread, write, execute権限
|  |__________ファイルの所有者に対するread, write, execute権限
|_____________ファイルタイプ。 - は通常のファイル、 d はディレクトリを示す
chmod

chmod (change mode)コマンドはファイルやディレクトリのパーミッションを変更するために使われます。

パーミッションの状況は一連の二進数の値で表わされます。 下記は一部の例です。

rwx rwx rwx = 111 111 111
rw- rw- rw- = 110 110 110
rwx --- --- = 111 000 000

こうしたパーミッションの設定を八進数で表し、 それを引数に取ることでファイルやディレクトリのパーミッションを詳細に変更することができます。

rwx = 111 (二進数) = 7
rw- = 110 (二進数) = 6
r-x = 101 (二進数) = 5
r-- = 100 (二進数) = 4

例えば、 some_fileに所有者に対するread, write権限のみを与えたいなら次のようになります。

[me@linuxbox me]$ chmod 600 some_file

次に、 一般的な設定の値を下記に示します。 7から始まるものは実行権限に関わるためプログラムに用いられ、 他はファイルに用いられます。

意味
777 (rwxrwxrwx) 何の制限もありません。 あまり望ましい設定とはいえないでしょう。
755 (rwxr-xr-x) ファイルの所有者は読み書き、実行ができます。 他の人は読み実行のみができます。 全ユーザーが使用するプログラムに一般的な設定です。
700 (rwx------) ファイルの所有者以外は読み書き実行ができません。 プライベートなプログラムに有効な設定です。
666 (rw-rw-rw-) 全ユーザーが読み書きできます。
644 (rw-r--r--) 所有者は読み書きできますが、 全ユーザーは読むことのみできます。
600 (rw-------) 所有者のみが読み書きできます。 所有者がプライベートにしたいデータに一般的な設定です。

ディレクトリパーミッション

chmod コマンドはディレクトリのパーミッション権限を変更するためにも使用されます。 同様にパーミッション設定には八進数が使われますが、 r,w,xの意味は異なります。

  • r - xが設定されていれば、 内容をリストすることができる
  • w - xが設定されていれば、 ディレクトリ内にファイルを作成し削除し、 リネームすることができる
  • x - ディレクトリ内に移動することができる

以下はディレクトリの一般的なパーミッション設定です。

意味
777 (rwxrwxrwx) 何の制限もありません。 誰でもディレクトリ内のファイルをリストし、 新しくファイルを作成し、 削除することができます。 あまり望ましい設定とはいえないでしょう。
755 (rwxr-xr-x) ディレクトリ所有者は全アクセス権を持ちます。 他の人はリストのみ可能です。 ディレクトリをシェアしたい時に有効な設定です。
700 (rwx------) ディレクトリ所有者のみ全アクセス権を持ちます。 プライベートにしたいディレクトリに有効です。

一時的superuser

管理者権限に関わるタスクを実行するときに、 しばしばsuperuserになる必要がありますが、 セキュリティ上、 常にsuperuser状態を保つべきではありません。 superuser権限に一時的にアクセスするために、 su (substitute user)コマンドを使用しましょう。 このコマンドは少量のタスクを行うときに有効です。 superuserとなるためにシンプルに su コマンドをタイプします。 次にパスワードを要求されます。

(MacOSでは sudo をつけて実行します。)

[me@linuxbox me]$ su
Password:
[root@linuxbox me]#

su コマンド実行後、 superuserのセッションが開始されます。 終了するためには exit を実行すればもとのプライベートセッションに戻ります。

su コマンドより、 sudo (superuser do)コマンドを実行する方が好ましい事があります。 superuserとしてコマンドを実行するためには、 シンプルに実行したいコマンドの前に sudo をつけるだけです。

[me@linuxbox me]$ sudo some_command
Password:
[me@linuxbox me]$

ファイルの所有者を変更する

chown (change owner)コマンドでファイルの所有者を変更することができます。 次の例では some_file の所有者を"me"から"you"に変更しています。

[me@linuxbox me]$ su
Password:
[root@linuxbox me]# chown you some_file
[root@linuxbox me]# exit
[me@linuxbox me]$

superuser状態でしか変更できないことに注意しましょう。 chown はディレクトリに対しても同様の働きをします。

グループ所有者を変更する

chgrp (change group)を使えば、 ファイルやディレクトリのグループ所有者を変更することができます。

[me@linuxbox me]$ chgrp new_group some_file

上記の例ではsome_fileのグループ所有者を"new_group"に変更しています。 chgrpを実行するためにファイルやディレクトリの所有者でなければなりません。