Windows には、パーミッションの概念がないため、Windows移行組にとっては、ちょっととっつきにくいファイル所有権の概念について説明していきます。Linuxを勉強していくにあたって非常に重要なところなので必ず覚えておきましょう。
|
|
■ファイルの属性/パーミッションの概念
ファイルやディレクトリには、ファイルの形式、アクセス権限、所有者、所有グループ、最終更新日時などの属性をもっています。ls
-l コマンドによってこれらの属性を確認する事ができます。左から順番に、パーミッション、ファイルの所有者、ファイルの所有グループ、ファイルサイズ、最終更新日時、ファイル名となっています。
$ ls -l
drwxr-xr-x 2 root root 4096 2月 4 17:22 etc
-rw-r--r-- 1 root root 0 2月 5 01:44 file1
lrwxrwxrwx 1 root root 5 2月 5 01:44 file2 -> file1
|
|
一番左にある drwxr-xr-x がパーミッションを表しています。パーミッションとは、ファイルやディレクトリが第三者によって勝手に書き換えられたり、読み取られたりされないように設定するための権限のことです。Windows
にパーミッションの概念はありませんが、Linux においてこのパーミッションは非常に重要な意味を持っています。r
(read )は、読み取り権限を表し、w (wirte )は、書き込み権限、x (execute)は実行権限を表しています。次に、例えば、rwxrwxrwx
というパーミッションの場合、最初のrwx が所有者を表し、2番目の rwx が所有グループ、3番目の rwx
がその他のユーザーを表しています。要するに、誰でも読み書き実行が可能なファイルという意味になります。パーミッションは、rwx
の表記方法以外にも数値で表現することができます。r は 4 、w は 2、x は 1 を意味し、rwxrwxrwx
を数値で表現すると、777 ということになります。
読み取り |
r |
4 |
ディレクトリ内の一覧表示が可能 |
書き込み |
w |
2 |
ディレクトリ内でファイルの作成/変更/削除が可能 |
実行 |
x |
1 |
ディレクトリ内のファイルにアクセスが可能 |
■アクセス権限の変更 [ chmod ]
アクセス権限を変更するには、chmod コマンドを使用します。例えば、ある特定のファイルのパーミッションを666から644に変更したい場合は以下のようにします。
# chmod 644 file1
# ls -l
-rw-r--r-- 1 root root 0 2月 5 01:44 file1 |
|
上記は特定の1ファイルのみのアクセス権限を変更しましたが、ディレクトリ内の中のファイルも含めてディレクトリごと再帰的に変更したい場合は、-R
オプションを使用します。
# chmod -R 755 directory
# ls -l
drwxr-xr-x 2 root root 4096 2月 5 03:56 directory |
|
アクセス権の設定を数値で表現する場合は、指定したアクセス権への変更のみとなり、特定のアクセス権の追加と削除を行う事はできません。それを実現する方法として、アルファベットで表記する場合があります。例えば、以下の例では、directory
に対してグループの実行権限を削除しています。
次に、全てのユーザーに対して実行権限を付与する例です。+ で権限の付加、- で権限の削除が行えるようになります。なお、a
をつけずに単に、chmod +x とした場合は、a+x を実行したのと同様の意味になります。
符号に= を使う事もできます。以下の例では、その他のユーザーには、読み取り権限のみを与えるという意味になります。
◎各符号の意味
u |
所有者 |
+ |
アクセス権限を追加 |
g |
所有グループ |
- |
アクセス権限を削除 |
o |
その他のユーザー |
= |
アクセス権を指定する |
a |
全てのユーザー |
s |
SUID あるいは、SGID(以下後述) |
|
|
t |
スティッキービット(以下後述) |
■ファイルの所有者、所有グループの変更 [ chown ] [ chgrp ]
chown コマンドは、ファイルの所有者及びグループの変更を行う事ができます。chgrp コマンドは、所有グループの変更のみ行う事ができます。chown
の書式は以下の通りです。chown で手っ取り早く、所有グループも変更したい場合は、コロン「: 」を用いて後ろにグループ名を記述します。なお、コロンの代わりにドット「.
」で区切っても同様の意味になります。-R オプションでディレクトリ内のファイルとディレクトリの所有者/所有グループを再帰的に変更する事ができます。
chown [ オプション ] <ユーザー名 [ :グループ名 ]> < ファイルまたはディレクトリ名>
# chmod kororo:kororo
file1
# ls -l
drwxr-xr-x 2 kororo kororo 4096 2月 5
03:56 file1 |
|
|
-c |
結果の詳細表示 |
|
-R |
指定したディレクトリ内のファイル及びディレクトリの所有者/所有グループも再帰的に変更する |
|
■SUID / SGID
SUID とは、Set User ID の略で、SUID が設定されているコマンドやプログラムが実行されると、実行したユーザーではなく、そのファイルの所有者の権限で実行されたものとみなします。SUID
を設定するには、chmod コマンドを実行する際に、ファイル所有者のアクセス権を設定する引数として、「s
」あるいは、「4000 」を指定します。なお、実行権限を元々持っていないファイルの場合(644 など)は、SUID
ビットをOn にした際に大文字の S が表示されます。実行権限を持ったファイルの場合は、小文字の s が表示されます。
# chmod u+s file1
# ls -l
-rwSr--r--
1 root root 0 2月 5 01:44 file1
# chmod u+s directory
# ls -l
drwsr-xr-x
2 root root 4096 2月 5 03:56 directory |
|
以下の例では、アクセス権が 755 のファイルにSUID を設定する場合です。
SGID は、Set Group ID の略で、SGID が設定されているコマンドやプログラムが実行されると、実行したユーザー、もしくはグループではなく、そのファイルの所有グループの権限で実行されたものとみなします。SUID
と異なる点は、アルファベットに g を用い、数値で表現する場合は 2000 になります。
# chmod g+s directory
# ls -l
drwsr-sr-x
2 root root 4096 2月 5 03:56 directory
# chmod 2755 directory2
# ls -l
drwxr-sr-x
2 root root 4096 2月 5 04:45 directory2 |
|
■スティッキービット(stickybit)
スティッキービットとは、ディレクトリに対して設定するアクセス権のひとつで、ファイルに関してはほとんど有効性がありません。ステッキービットが設定されているディレクトリでは、書き込みが許可されたファイルであっても、他のユーザーが所有しているものは削除できないようになります。/tmp
ディレクトリなど、他のユーザーに一時ファイルを削除されては困るという場合に使用します。スティッキービットをOn
にするには、t もしくは、数字の 1000 を使用します。
# chmod +t directory
# ls -l
drwsr-sr-t
2 root root 4096 2月 5 03:56 directory
# chmod 1755 directory2
# ls -l
drwxr-xr-t 2 root root 4096 2月 5 04:45
directory2 |
|
スティッキービットを Off にするには以下のようにします。
# chmod -t directory
# ls -l
drwsr-sr-x 2 root root 4096 2月 5 03:56
directory |
|