「ファイルのパーミッションと属性」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(文字列「Tips and tricks」を「ヒントとテクニック」に置換)
 
(4人の利用者による、間の31版が非表示)
1行目: 1行目:
 
[[Category:ファイルシステム]]
 
[[Category:ファイルシステム]]
  +
[[Category:コマンドライン]]
 
[[en:File permissions and attributes]]
 
[[en:File permissions and attributes]]
  +
[[es:File permissions and attributes]]
  +
[[pt:File permissions and attributes]]
  +
[[ru:File permissions and attributes]]
  +
[[zh-hans:File permissions and attributes]]
 
{{Related articles start}}
 
{{Related articles start}}
 
{{Related|ユーザーとグループ}}
 
{{Related|ユーザーとグループ}}
6行目: 11行目:
 
{{Related|アクセス制御リスト}}
 
{{Related|アクセス制御リスト}}
 
{{Related|ケイパビリティ}}
 
{{Related|ケイパビリティ}}
  +
{{Related|拡張属性}}
 
{{Related articles end}}
 
{{Related articles end}}
   
[[ファイルシステム]]は[[wikipedia:File system permissions|パーミッション]][[wikipedia:File attribute|属性]]を使ってシステムプロセスが処理できるファイルやディレクトリのレベルを規定します。
+
[[ファイルシステム]]は[[Wikipedia:ja:ファイルパーミッション|パーミッション]][[wikipedia:File attribute|属性]]を使って、どの程度のレベルでシステムプロセスがファイルやディレクトリとやり取りできるかを規定します。
   
{{Warning|パーミッション属性のセキュリティについて言えば対抗できるシステムが起動した後の攻撃にすぎません。マシン物理的にアクセスできる攻撃者からデータを保護するには、[[ディスク暗号化]]す必要がありま。}}
+
{{Warning|セキュリティ目的で使用する場合、パーミッション属性起動済みのシステムからの攻撃しか防御しません。マシン物理的にアクセスできる攻撃者からデータを保護するには、[[ディスク暗号化]]さなければなりません。}}
   
 
== パーミッションの表示 ==
 
== パーミッションの表示 ==
   
[[Core Utilities#ls|ls]] コマンドの {{ic|-l}} オプションを使ってディレクトリの中身のパーミッション (あるいは'''ファイルモード''') を確認できます。例:
+
[[ls]] コマンドの {{ic|-l}} オプションを使えば、ディレクトリのコンテンツのパーミッション ('''ファイルモード''' とも) を確認できます。例:
   
 
{{hc|$ ls -l /path/to/directory|
 
{{hc|$ ls -l /path/to/directory|
 
total 128
 
total 128
drwxr-xr-x 2 archie users 4096 Jul 5 21:03 Desktop
+
drwxr-xr-x 2 archie archie 4096 Jul 5 21:03 Desktop
drwxr-xr-x 6 archie users 4096 Jul 5 17:37 Documents
+
drwxr-xr-x 6 archie archie 4096 Jul 5 17:37 Documents
drwxr-xr-x 2 archie users 4096 Jul 5 13:45 Downloads
+
drwxr-xr-x 2 archie archie 4096 Jul 5 13:45 Downloads
-rw-rw-r-- 1 archie users 5120 Jun 27 08:28 customers.ods
+
-rw-rw-r-- 1 archie archie 5120 Jun 27 08:28 customers.ods
-rw-r--r-- 1 archie users 3339 Jun 27 08:28 todo
+
-rw-r--r-- 1 archie archie 3339 Jun 27 08:28 todo
-rwxr-xr-x 1 archie users 2048 Jul 6 12:56 myscript.sh
+
-rwxr-xr-x 1 archie archie 2048 Jul 6 12:56 myscript.sh
 
}}
 
}}
   
最初のカラムが一重要です。例えば {{ic|drwxrwxrwx+}} という値であれば、それぞれの文字の意味は以下ののようになります:
+
1目の列に注目してください。例えば {{ic|drwxrwxrwx+}} という値であれば、それぞれの文字の意味は以下ののようになります:
   
 
{| class="wikitable"
 
{| class="wikitable"
36行目: 42行目:
 
| {{ic|+}}
 
| {{ic|+}}
 
|-
 
|-
| ファイルのタイプ。技術的にはパーミッションではありません。ついては {{ic|info ls -n "What information is listed"}} を参照してください。
+
| ファイルの種類。技術的にはパーミッションの一部ではありません。ここ入りうる値の説明は {{ic|info ls -n "What information is listed"}} を参照してください。
| ファイル所有者パーミッション。下を参照
+
| このファイルに対して所有者が持っているパーミッション。で説明されています
| ファイルグループパーミッション。下を参照
+
| このファイルに対してグループが持っているパーミッション。で説明されています
| ファイルの所有者でないユーザーのパーミッション。下を参照
+
| このファイルに対してその他のユーザが持っているパーミッション。で説明されています
| のアクセスメソッドがファイルに適用されているかどうかす文字。この文字が空白のときのアクセスメソッド存在しません。{{ic|.}} という文字はファイルにセキュリティコンテキストが付与されていことをします。のアクセスメソッド使われている、{{ic|+}} 文字で表されます ([[アクセス制御リスト]]の場合)
+
| 代替のアクセス手法このファイルに対して適用されているかどうかを示単一の文字。この文字が空白ならば代替のアクセス手法適用されていません。{{ic|.}} 文字の場合ファイルにセキュリティコンテキストが存在しているが、代替のアクセス手法は適用されていないことをします。代替のアクセス手法その他の組み合せで適用されているファイルでは、{{ic|+}} 文字で表されます。例えば、[[アクセス制御リスト]]の場合です
 
|}
 
|}
   
三組のパーミッション文字列 (上記の例なら {{ic|rwx}}) は以下の文字によって構成されます:
+
3つ文字からなるパーミッション (上記の例では {{ic|rwx}}) 以下の文字のどかが入ります:
   
 
{| class="wikitable"
 
{| class="wikitable"
 
! scope="col" style="width: 10%;" |
 
! scope="col" style="width: 10%;" |
 
! scope="col" style="width: 10%;" | 文字
 
! scope="col" style="width: 10%;" | 文字
! scope="col" style="width: 30%;" | ファイルの場合
+
! scope="col" style="width: 30%;" | ファイルに対する効果
! scope="col" style="width: 50%;" | ディレクトリの場合
+
! scope="col" style="width: 50%;" | ディレクトリに対する効果
 
|-
 
|-
! rowspan="2" style="text-align:left;" | 読み取り権限 (最初の文字)
+
! rowspan="2" style="text-align:left;" | 読み取りパーミッション (最初の文字)
 
| style="text-align:center;" | {{ic|-}}
 
| style="text-align:center;" | {{ic|-}}
| ファイルみ込むことができません。
+
| ファイルません。
| ディレクトリの中身表示することができません。
+
| ディレクトリの中身表示できません。
 
|-
 
|-
 
| style="text-align:center;" | {{ic|r}}
 
| style="text-align:center;" | {{ic|r}}
| ファイルを読み込むことができます。
+
| ファイルを読むことができます。
| ディレクトリの中身を表示することができます。
+
| ディレクトリの中身を表示できます。
 
|-
 
|-
! rowspan="2" style="text-align:left;" | 書き込み権限 (番目の文字)
+
! rowspan="2" style="text-align:left;" | 書き込みパーミッション (2番目の文字)
 
| style="text-align:center;" | {{ic|-}}
 
| style="text-align:center;" | {{ic|-}}
| ファイル変更することができません。
+
| ファイル変更できません。
| ディレクトリの中身変更することができません。
+
| ディレクトリの中身変更できません。
 
|-
 
|-
 
| style="text-align:center;" | {{ic|w}}
 
| style="text-align:center;" | {{ic|w}}
| ファイルを変更することができます。
+
| ファイルを変更できます。
| ディレクトリの中身を変更することができます (新しいファイルやフォルダを作成したり、既存のファイルやフォルダの名前を変更したり削除するなど)。実行権限も設定されていないと、このパーミッションは反映されません。
+
| ディレクトリの中身を変更できます (ここでの変更とは、新しいファイルやディレクトリの作成、既存のファイルやディレクトリの名変更削除す)。ただし、実行パーミッションも設定されていなければなりません。さもないと、このパーミッションは効果を持ちません。
 
|-
 
|-
! rowspan="6" style="text-align:left;" | 実行権限 (番目の文字)
+
! rowspan="6" style="text-align:left;" | 実行パーミッション (3番目の文字)
 
| style="text-align:center;" | {{ic|-}}
 
| style="text-align:center;" | {{ic|-}}
| ファイル実行することができません。
+
| ファイル実行できません。
| ディレクトリ [[Core Utilities|cd]] で開くことができま
+
| ディレクトリ [[cd]] でアクセスできません
 
|-
 
|-
 
| style="text-align:center;" | {{ic|x}}
 
| style="text-align:center;" | {{ic|x}}
 
| ファイルを実行できます。
 
| ファイルを実行できます。
| ディレクトリ [[Core Utilities|cd]] で開くことができます。親ディレクトリから継承を行う唯一のパーミッションビットです。パス内の全てフォルダに {{ic|x}} ビットが設定されていない場合、最後のファイルやディレクトリパーミッションと関係なく、開くことができません。詳しくは {{ic|man 7 path_resolution}} を参照。
+
| ディレクトリ [[cd]] でアクセスできます。これは、親ディレクトリから事実上 "継承している" とみなすことのできる唯一のパーミッションビットです。事実、親ディレクトリ''どれか1つでも'' {{ic|x}} が設定されていないパスの最後のファイルやディレクトリにも (それのパーミッションに依らず) アクセスできません。詳は {{man|7|path_resolution}} を参照してください
 
|-
 
|-
 
| style="text-align:center;" | {{ic|s}}
 
| style="text-align:center;" | {{ic|s}}
| colspan="2" | '''u'''ser の組の場合 [[Wikipedia:setuid|setuid]] ビット'''g'''roup の組の場合 '''setgid''' ビット。'''o'''thers のには存在しません。{{ic|x}} 設定されていることも示します。
+
| colspan="2" | ユーザ ('''u'''ser)パーミッションにある場合 [[w:ja:setuid|setuid]] ビット、グループ ('''g'''roup)パーミッションにある場合 '''setgid''' ビットとなりますその他のユーザ ('''o'''thers)パーミッションには現れません。この文字は、{{ic|x}} 設定されていることを意味します。
 
|-
 
|-
 
| style="text-align:center;" | {{ic|S}}
 
| style="text-align:center;" | {{ic|S}}
| colspan="2" | {{ic|s}} と同じですが、{{ic|x}} は設定されていません。通常のファイルで使われていることは滅多になく、フォルダでは意味がありません。
+
| colspan="2" | {{ic|s}} と同じですが、{{ic|x}} は設定されていません。通常のファイルで使われることは滅多になく、ディレクトリでは意味がありません。
 
|-
 
|-
 
| style="text-align:center;" | {{ic|t}}
 
| style="text-align:center;" | {{ic|t}}
| colspan="2" | [[Wikipedia:ja:スティッキービット|スティッキービット]]。'''o'''thers の組でしか存在しません。{{ic|x}} 設定されていることも示します。
+
| colspan="2" | [[w:ja:スティッキービット|スティッキービット]]ですその他のユーザ ('''o'''thers)パーミッションにしか現れません。この文字は、{{ic|x}} 設定されていることを意味します。
 
|-
 
|-
 
| style="text-align:center;" | {{ic|T}}
 
| style="text-align:center;" | {{ic|T}}
| colspan="2" | {{ic|t}} と同じですが、{{ic|x}} は設定されていません。通常のファイルで使われていることは滅多になく、フォルダでは意味がありません。
+
| colspan="2" | {{ic|t}} と同じですが、{{ic|x}} は設定されていません。通常のファイルで使われることは滅多にありません。
 
|}
 
|}
   
しくは {{ic|info Coreutils -n "Mode Structure"}} {{ic|man 1 chmod}} を参照
+
は {{ic|info Coreutils -n "Mode Structure"}} {{man|1|chmod}} を見てください
   
  +
{{Tip|{{ic|namei -l ''path''}} を使えば、パスと一緒にパーミッションを表示できます。}}
==== サンプル ====
 
   
  +
=== サンプル ===
Let us see some examples to clarify:
 
   
  +
いくつか例を見て、理解を深めましょう:
'''drwx------''' 6 archie users 4096 Jul 5 17:37 Documents
 
   
  +
'''drwx------''' 6 archie archie 4096 Jul 5 17:37 Documents
Archie has full access to the Documents directory. He can list, create files and rename, delete any file in Documents, regardless of file permissions. His ability to access a file depends on the file's permission.
 
   
  +
上記の場合、Archie は {{ic|Documents}} ディレクトリへの完全なアクセス権を持っています。Archie は、Documents 内のファイルを (そのファイルのパーミッションに依らず) 一覧表示、名称変更、削除することができ、さらにファイルを Documents 内に作成することができます。しかし、ファイル自体にアクセス (つまり、読み書き実行) できるかどうかは、そのファイルのパーミッションに依ります。
'''dr-x------''' 6 archie users 4096 Jul 5 17:37 Documents
 
   
  +
'''dr-x------''' 6 archie archie 4096 Jul 5 17:37 Documents
Archie has full access except he can not create, rename, delete any file. He can list the files and (if file's permission empowers) may access an existing file in Documents.
 
   
  +
Archie はファイルの作成、名称変更、削除ができませんが、それ以外なら可能です。Archie は Documents 内のファイルを一覧表示することができ、Documents 内のファイルに (そのファイルのパーミッションで許可されているならば) アクセスできます。
'''d-wx------''' 6 archie users 4096 Jul 5 17:37 Documents
 
   
  +
'''d-wx------''' 6 archie archie 4096 Jul 5 17:37 Documents
Archie can not do 'ls' in Documents but if he knows the name of an existing file then he may list, rename, delete or (if file's permission empowers him) access it. Also, he is able to create new files.
 
   
  +
Archie は {{ic|Documents}} ディレクトリ内で {{ic|ls}} を実行することができませんが、ディレクトリ内の特定のファイルの名前を知っているならば、そのファイルを一覧表示、名称変更、削除することができ、さらに (そのファイルのパーミッションで許可されているならば) アクセスすることができます。また、新しいファイルを作成することもできます。
'''d--x------''' 6 archie users 4096 Jul 5 17:37 Documents
 
   
  +
'''d--x------''' 6 archie archie 4096 Jul 5 17:37 Documents
Archie is only capable of (if file's permission empowers him) access those files in Documents which he knows of. He can not list already existing files or create, rename, delete any of them.
 
   
  +
Archie は、{{ic|Documents}} ディレクトリ内のファイルのうち、名前を知っているものにアクセスすることしかできません (ただし、そのファイルのパーミッションで許可されている場合に限る)。ディレクトリ内のファイルを一覧表示することはできず、ファイルの作成、名称変更、削除もできません。
You should keep in mind that we elaborate on directory permissions and it has nothing to do with the individual file permissions. When you create a new file it is the directory that changes. That is why you need write permission to the directory.
 
   
  +
ここで説明しているのはディレクトリのパーミッションであり、個々のファイルのパーミッションとは関係がありません。新しくファイルを作成したとき、変更があるのはディレクトリです。したがってディレクトリの書き込み権限が必要となります。
Let us look at another example, this time of a file, not a directory:
 
   
  +
今度はディレクトリではなくファイルの例を見てみましょう:
'''-rw-r--r--''' 1 archie users 5120 Jun 27 08:28 foobar
 
   
  +
'''-rw-r--r--''' 1 archie web 5120 Jun 27 08:28 foobar
Here we can see the first letter is not {{ic|d}} but {{ic|-}}. So we know it is a file, not a directory. Next the owner's permissions are {{ic|rw-}} so the owner has the ability to read and write but not execute. This may seem odd that the owner does not have all three permissions, but the {{ic|x}} permission is not needed as it is a text/data file, to be read by a text editor such as Gedit, EMACS, or software like R, and not an executable in its own right (if it contained something like python programming code then it very well could be). The group's permssions are set to {{ic|r--}}, so the group has the ability to read the file but not write/edit it in any way — it is essentially like setting something to read-only. We can see that the same permissions apply to everyone else as well.
 
   
  +
上記の例では最初の文字が {{ic|d}} ではなく {{ic|-}} になっていることが確認できます。なので、これはディレクトリではなくファイルであることを知ることができます。次に所有者のパーミッションは {{ic|rw-}} なので所有者はファイルの読み書きができますが実行することはできません。所有者が3つのパーミッション全てを得ていないことはおかしく思えるかもしれませんが、{{ic|x}} パーミッションは Gedit や [[Emacs]] などのテキストエディタから読むテキストファイル、あるいは [[R]] などのソフトウェアから読み込むデータファイルでは必要ないパーミッションです (python のコードなどが入っている場合は実行権限が与えられることがあります)。グループのパーミッションは {{ic|r--}} に設定されており、所有グループはファイルを読むことはできても編集することができません。何かを読み取り専用に設定することは重要です。他のユーザーのパーミッションはグループと同じに設定されています。
== パーミッションを変更 ==
 
   
  +
== パーミッションの変更 ==
[[Wikipedia:chmod|chmod]] は Linux などの Unix ライクなオペレーティングシステムで使われるコマンドで、ファイルやディレクトリのパーミッション (もしくはアクセスモード) を変更することができます (''ch''ange ''mod''e)。
 
   
  +
[[Wikipedia:ja:chmod|chmod]] は Linux などの Unix ライクなオペレーティングシステムで使われるコマンドで、ファイルやディレクトリのパーミッション (アクセスモード (''mod''e) とも) を変更 (''ch''ange) することができます。
=== テキストを使う方法 ===
 
   
  +
=== 文字を使う方法 ===
ファイルのパーミッション (あるいは''アクセスモード'') を変更するにはターミナルで ''chmod'' コマンドを使います。以下はコマンドの一般的な使い方です:
 
   
  +
ファイルのパーミッション (''アクセスモード'' とも) を変更するにはターミナルで ''chmod'' コマンドを使います。以下はコマンドの一般的な使い方です:
chmod ''who''=''permissions'' ''filename''
 
   
{{ic|''who''}} はパーミッションを与える対象を指定する文字です。以下のどれかになります:
+
chmod ''who''=''パーミッション'' ''ファイル名''
   
  +
{{ic|''who''}} は、パーミッションを与える対象を指定する文字です。以下のどれかになります:
* {{ic|u}}: ファイルを所有する[[ユーザーとグループ|ユーザー]]。
 
* {{ic|g}}: ファイルが所属する[[ユーザーとグループ|グループ]]。
 
* {{ic|o}}: 他 ('''o'''ther) のユーザー。つまり、全てのユーザー。
 
* {{ic|a}}: 上記の全て ('''a'''ll)。{{ic|ugo}} と入力する代わりに {{ic|a}} で指定できます。
 
   
  +
* {{ic|u}}: そのファイルを所有する[[ユーザー]]。
設定するパーミッションは [[#パーミッションの表示]] で説明しているのと同じです ({{ic|r}}, {{ic|w}}, {{ic|x}})。
 
  +
* {{ic|g}}: そのファイルが所属する[[ユーザーグループ]]。
  +
* {{ic|o}}: その他 ('''o'''ther) のユーザー。つまり、その他全員。
  +
* {{ic|a}}: 上記全て。{{ic|ugo}} と入力する代わりとして使えます。
   
  +
ここでのパーミッションとは、[[#パーミッションの表示]] で説明しているのと同じです ({{ic|r}}、{{ic|w}}、{{ic|x}})。
Now have a look at some examples using this command. Suppose you became very protective of the Documents directory and wanted to deny everybody but yourself, permissions to read, write, and execute (or in this case search/look) in it:
 
   
  +
それではコマンドを使用例を見てみましょう。Documents ドキュメントを守るために、このディレクトリであなた以外の全員が読み書きと実行 (この場合は検索ともいえます) を行えないようにするには:
ビフォー: {{ic|drwxr-xr-x 6 archie users 4096 Jul 5 17:37 Documents}}
 
  +
  +
前: {{ic|drwxr-xr-x 6 archie web 4096 Jul 5 17:37 Documents}}
   
 
$ chmod g= Documents
 
$ chmod g= Documents
 
$ chmod o= Documents
 
$ chmod o= Documents
   
アフター: {{ic|drwx------ 6 archie users 4096 Jul 6 17:32 Documents}}
+
: {{ic|drwx------ 6 archie web 4096 Jul 6 17:32 Documents}}
   
  +
上記ではパーミッションを取り去るために、{{ic|1==}} の後に何も文字を入力していません。所有者のパーミッションだけ {{ic|rwx}} となり、他のパーミッションは全て {{ic|-}} に変更されたことが確認できます。
Here, because you want to deny permissions, you do not put any letters after the {{ic|1==}} where permissions would be entered. Now you can see that only the owner's permissions are {{ic|rwx}} and all other permissions are {{ic|-}}.
 
   
  +
上記の設定は以下のコマンドで元に戻すことができます:
This can be reverted with:
 
   
Before: {{ic|drwx------ 6 archie users 4096 Jul 6 17:32 Documents}}
+
: {{ic|drwx------ 6 archie web 4096 Jul 6 17:32 Documents}}
   
 
$ chmod g=rx Documents
 
$ chmod g=rx Documents
 
$ chmod o=rx Documents
 
$ chmod o=rx Documents
   
After: {{ic|drwxr-xr-x 6 archie users 4096 Jul 6 17:32 Documents}}
+
: {{ic|drwxr-xr-x 6 archie web 4096 Jul 6 17:32 Documents}}
   
  +
次の例では、グループとその他のユーザに対して読み込みと実行のパーミッションを与えてみます。つまり、{{ic|1==}} の後にパーミッションの文字 ({{ic|r}} と {{ic|x}}) を入れます (スペース無しで)。
In the next example, you want to grant read and execute permissions to the group, and other users, so you put the letters for the permissions ({{ic|r}} and {{ic|x}}) after the {{ic|1==}}, with no spaces.
 
   
  +
{{ic|''who''}} に複数の文字を入力することで、これを行うことができます。例えば:
You can simplify this to put more than one {{ic|''who''}} letter in the same command, e.g:
 
   
 
$ chmod go=rx Documents
 
$ chmod go=rx Documents
   
{{Note|1=It does not matter in which order you put the {{ic|''who''}} letters or the permission letters in a {{ic|chmod}} command: you could have {{ic|1=chmod go=rx file}} or {{ic|1=chmod og=xr file}}. It is all the same.}}
+
{{Note|{{ic|chmod}} コマンドで {{ic|''who''}} に入力する文字やパーミッション文字の順番は特に意味をなしません: {{ic|1=chmod go=rx file}} でも {{ic|1=chmod og=xr file}} でも全く同じ意味になります。}}
   
  +
次に、2番目の例を考えてみましょう。たとえば、{{ic|foobar}} ファイルを変更して、読み取りと書き込みのアクセス許可を与え、{{ic|web}} グループの同僚が作業している可能性があると仮定します。{{ic|foobar}} は読み取りと書き込みもできますが、他のユーザーは読み取りしかできません:
Now let us consider a second example, suppose you want to change a {{ic|foobar}} file so that you have read and write permissions, and fellow users in the group {{ic|users}} who may be colleagues working on {{ic|foobar}}, can also read and write to it, but other users can only read it:
 
   
Before: {{ic|-rw-r--r-- 1 archie users 5120 Jun 27 08:28 foobar}}
+
: {{ic|-rw-r--r-- 1 archie web 5120 Jun 27 08:28 foobar}}
   
 
$ chmod g=rw foobar
 
$ chmod g=rw foobar
   
After: {{ic|-rw-rw-r-- 1 archie users 5120 Jun 27 08:28 foobar}}
+
: {{ic|-rw-rw-r-- 1 archie web 5120 Jun 27 08:28 foobar}}
   
  +
これは最初の例とまったく同じですが、ディレクトリではなくファイルを使用し、書き込み権限を付与します (権限を付与する例を全て示すため)。
This is exactly like the first example, but with a file, not a directory, and you grant write permission (just so as to give an example of granting every permission).
 
   
==== テキストを使う方法のショートカット ====
+
==== 文字を使う方法のショートカット ====
   
  +
''chmod'' コマンドでは {{ic|1==}} の代わりに {{ic|+}} または {{ic|-}} を使うことでパーミッションを追加したり削除することができます。上記のコマンドのようにパーミッションを完全に書き換えることがありません (例えば、パーミッションを {{ic|r--}} から {{ic|rw-}} に変更する場合でも上記のコマンドを使うときは ''chmod'' コマンドの {{ic|1==}} の後に {{ic|w}} だけでなく {{ic|r}} も必要です。{{ic|r}} を指定しなかった場合、{{ic|r}} のパーミッションが消えてしまいます。{{ic|+}} と {{ic|-}} を使うことで現在のパーミッションから一部のパーミッションを追加したり削除することができるようになります)。
The ''chmod'' command lets add and subtract permissions from an existing set using {{ic|+}} or {{ic|-}} instead of {{ic|1==}}. This is different from the above commands, which essentially re-write the permissions (e.g. to change a permission from {{ic|r--}} to {{ic|rw-}}, you still need to include {{ic|r}} as well as {{ic|w}} after the {{ic|1==}} in the ''chmod'' command invocation. If you missed out {{ic|r}}, it would take away the {{ic|r}} permission as they are being re-written with the {{ic|1==}}. Using {{ic|+}} and {{ic|-}} avoids this by adding or taking away from the ''current'' set of permissions).
 
   
  +
前記のグループに書き込みパーミッションを与える例を {{ic|+}} と {{ic|-}} で試してみましょう:
Let us try this {{ic|+}} and {{ic|-}} method with the previous example of adding write permissions to the group:
 
   
Before: {{ic|-rw-r--r-- 1 archie users 5120 Jun 27 08:28 foobar}}
+
: {{ic|-rw-r--r-- 1 archie web 5120 Jun 27 08:28 foobar}}
 
 
 
$ chmod g+w foobar
 
$ chmod g+w foobar
   
After: {{ic|-rw-rw-r-- 1 archie users 5120 Jun 27 08:28 foobar}}
+
: {{ic|-rw-rw-r-- 1 archie web 5120 Jun 27 08:28 foobar}}
   
  +
また、全てのユーザー ('''a''') から書き込み権限を奪いたい場合:
Another example, denying write permissions to all ('''a'''):
 
   
Before: {{ic|-rw-rw-r-- 1 archie users 5120 Jun 27 08:28 foobar}}
+
: {{ic|-rw-rw-r-- 1 archie web 5120 Jun 27 08:28 foobar}}
 
 
 
$ chmod a-w foobar
 
$ chmod a-w foobar
   
After: {{ic|-r--r--r-- 1 archie users 5120 Jun 27 08:28 foobar}}
+
: {{ic|-r--r--r-- 1 archie web 5120 Jun 27 08:28 foobar}}
   
  +
別のショートカットは特殊な {{ic|X}} モードです。これは実際のファイルモードではありませんが、多くの場合、{{ic|-R}} オプションと組み合わせて使用され、ディレクトリに対してのみ実行可能ビットを設定し、通常のファイルに対しては変更しないでおきます。たとえば、次のようになります:
A different shortcut is the special {{ic|X}} mode: this is not an actual file mode, but it is often used in conjunction with the {{ic|-R}} option to set the executable bit only for directories, and leave it unchanged for regular files, for example:
 
   
 
$ chmod -R a+rX ./data/
 
$ chmod -R a+rX ./data/
204行目: 212行目:
 
==== パーミッションのコピー ====
 
==== パーミッションのコピー ====
   
  +
''chmod'' で、あるクラスから別のクラスにパーミッションをコピーすることも可能です (例えば、所有者のパーミッションをグループにコピーする)。そうするには、{{ic|1==}} の後に、{{ic|r}} や {{ic|w}}、{{ic|x}} ではなく、もう一つの ''who'' 文字を入れてください。例えば:
It is possible to tell ''chmod'' to copy the permissions from one class, say the owner, and give those same permissions to group or even all. To do this, instead of putting {{ic|r}}, {{ic|w}}, or {{ic|x}} after the {{ic|1==}}, put another ''who'' letter. e.g:
 
   
Before: {{ic|-rw-r--r-- 1 archie users 5120 Jun 27 08:28 foobar}}
+
: {{ic|-rw-r--r-- 1 archie web 5120 Jun 27 08:28 foobar}}
   
 
$ chmod g=u foobar
 
$ chmod g=u foobar
   
After: {{ic|-rw-rw-r-- 1 archie users 5120 Jun 27 08:28 foobar}}
+
: {{ic|-rw-rw-r-- 1 archie web 5120 Jun 27 08:28 foobar}}
   
  +
このコマンドは基本的に、"グループのアクセス許可を変更 ({{ic|1=g=}}) して、所有ユーザー ({{ic|1==u}}) と同じにします。ただし、パーミッションのセットをコピーして、なおかつ新しいパーミッションを付与するというようなことはできません。例えば:
This command essentially translates to "change the permissions of group ({{ic|1=g=}}), to be the same as the owning user ({{ic|1==u}}). Note that you cannot copy a set of permissions as well as grant new ones e.g.:
 
   
 
$ chmod g=wu foobar
 
$ chmod g=wu foobar
   
  +
この場合、''chmod'' はエラーを吐きます。
In that case ''chmod'' throw an error.
 
   
 
=== 数字を使う方法 ===
 
=== 数字を使う方法 ===
222行目: 230行目:
 
''chmod'' では数字を使ってパーミッションを設定することもできます。
 
''chmod'' では数字を使ってパーミッションを設定することもできます。
   
数字を使用する場合、所有者グループ、その他のユーザのパーミッションを同時編集することができます。コマンドは以下のようになす:
+
数字を使えば、所有者グループ、そしてその他のユーザのパーミッション全て、さら setuid、setgid、そしてスティッキービットも一度に設定できます。基本的な使い方は以下のとおす:
   
$ chmod ''xxx'' ''filename''
+
$ chmod ''xxx'' ''ファイル名''
   
{{ic|'''xxx'''}} は3桁の数字になります。各桁の数字は0から7までのどれかになります。1番目数字は所有者のパーミッション、2の数字所有グループのパーミッション、3目の数字は他のユーザのパーミッションになります。
+
ここで、{{ic|'''xxx'''}} は3桁の数字で、各桁は0から7までのどれかす。最初は所有者のパーミッション、2目はグループのパーミッション、そして3はその他のユーザのパーミッションす。
   
In this number notation, the values {{ic|r}}, {{ic|w}}, and {{ic|x}} have their own number value:
+
この数字表記では、{{ic|r}}{{ic|w}}、そして {{ic|x}} はそれぞれ独自の数字を持ちます:
   
 
r=4
 
r=4
234行目: 242行目:
 
x=1
 
x=1
   
  +
3桁の数字を計算するには、所有者、グループ、そしてユーザーにどのようなアクセス許可を付与するかを検討し、それらの値を合計する必要があります。例えば、ディレクトリの所有者には読み書きと実行のパーミッション、グループとその他のユーザには読み込みと実行のパーミッションのみを与える場合、数字は以下のようになります:
To come up with a 3-digit number you need to consider what permissions you want owner, group, and user to have, and then total their values up. For example, if you want to grant the owner of a directory read write and execution permissions, and you want group and everyone else to have just read and execute permissions, you would come up with the numerical values like so:
 
   
* Owner: {{ic|rwx}}=4+2+1=7
+
* 所有者: {{ic|rwx}}=4+2+1=7
* Group: {{ic|r-x}}=4+0+1=5
+
* グループ: {{ic|r-x}}=4+0+1=5
* Other: {{ic|r-x}}=4+0+1=5
+
* その他: {{ic|r-x}}=4+0+1=5
   
$ chmod 755 ''filename''
+
$ chmod 755 ''ファイル名''
   
  +
これは、以下の2つのコマンドを実行したときと等価です:
This is the equivalent of using the following:
 
   
$ chmod u=rwx ''filename''
+
$ chmod u=rwx ''ファイル名''
$ chmod go=rx ''filename''
+
$ chmod go=rx ''ファイル名''
   
  +
ファイルやディレクトリのパーミッションを数字形式で見るには、{{man|1|stat}} コマンドを使ってください:
Most folders and directories are set to {{ic|755}} to allow reading, writing and execution to the owner, but deny writing to everyone else, and files are normally {{ic|644}} to allow reading and writing for the owner but just reading for everyone else; refer to the last note on the lack of {{ic|x}} permissions with non executable files: it is the same thing here.
 
   
  +
$ stat -c %a ''filename''
To see this in action with examples consider the previous example that has been used but with this numerical method applied instead:
 
   
  +
%a オプションは出力を数字形式にするという意味です。
Before: {{ic|-rw-r--r-- 1 archie users 5120 Jun 27 08:28 foobar}}
 
  +
  +
ほとんどのフォルダとディレクトリは {{ic|755}} に設定され、所有者には読み取り、書き込み、実行を許可しますが、それ以外のすべてのユーザーには書き込みを拒否します。ファイルは通常 {{ic|644}} で、所有者には読み取りと書き込みを許可しますが、他のすべてのユーザーには読み取りだけを許可します。実行可能ファイル以外では {{ic|x}} パーミッションがないという最後のノートを参照してください。ここでも同じです。
  +
  +
理解するために、数字形式を使って前回の例と同じことをしてみましょう:
  +
  +
前: {{ic|-rw-r--r-- 1 archie web 5120 Jun 27 08:28 foobar}}
   
 
$ chmod 664 foobar
 
$ chmod 664 foobar
   
After: {{ic|-rw-rw-r-- 1 archie users 5120 Jun 27 08:28 foobar}}
+
: {{ic|-rw-rw-r-- 1 archie web 5120 Jun 27 08:28 foobar}}
   
  +
所有者とグループに実行パーミッションを与えたい場合、数字は {{ic|774}} になります。全員に読み込みパーミッションのみを与えたい場合は、{{ic|444}} になります。{{ic|chmod ''xxx'' ''filename''}} で使うための数字を計算する最も簡単な方法は、{{ic|r}} を 4、{{ic|w}} を 2、{{ic|x}} を 1 として扱うことでしょう。しかし、それぞれのパーミッションを2進数として扱い、その後で数字に変換する方法もあります。この方法は少し複雑ですが、完全を期すために言及しておきましょう。
If this were an executable the number would be {{ic|774}} if you wanted to grant executable permission to the owner and group. Alternatively if you wanted everyone to only have read permission the number would be {{ic|444}}. Treating {{ic|r}} as 4, {{ic|w}} as 2, and {{ic|x}} as 1 is probably the easiest way to work out the numerical values for using {{ic|chmod ''xxx'' ''filename''}}, but there is also a binary method, where each permission has a binary number, and then that is in turn converted to a number. It is a bit more convoluted, but here included for completeness.
 
   
  +
以下のパーミッション組を考えてみましょう:
Consider this permission set:
 
   
 
-rwxr-xr--
 
-rwxr-xr--
   
  +
与えるパーミッションに1を、与えないパーミッションに0を置くと、以下のようになります:
If you put a 1 under each permission granted, and a 0 for every one not granted, the result would be something like this:
 
   
 
-rwxrwxr-x
 
-rwxrwxr-x
 
111111101
 
111111101
   
  +
そして、これらの2進数を変換します:
You can then convert these binary numbers:
 
   
 
000=0 100=4
 
000=0 100=4
275行目: 289行目:
 
011=3 111=7
 
011=3 111=7
   
  +
よって、結果は 775 となります。
The value of the above would therefore be 775.
 
   
  +
グループから書き込みパーミッションを取り除いてみましょう:
Consider we wanted to remove the writable permission from group:
 
   
-rwzr-xr-x
+
-rwxr-xr-x
 
111101101
 
111101101
   
  +
よって、結果は 755 となり、書き込みパーミッションを取り除くには {{ic|chmod 755 ''filename''}} を実行すれば良いことになります。どの方法をとっても同じ3桁の数字が得られます。文字を使うか数字を使うかは個人の好みと入力速度に依ります。ディレクトリやファイルのパーミッションをデフォルトに戻したい場合 (例えば、所有者に読み書き (と実行権限) を与え、それ以外には書き込み権限を与えない)、{{ic|chmod 755/644 ''filename''}} を使うほうが速いかもしれません。しかし、通常とは異なるパーミッションに変更する場合は、パーミッションを数字に変換するよりも、文字を使う方法をとったほうがシンプルで速いかもしれません (それに、数字を使う方法は間違いを犯す可能性があります)。たまにしか ''chmod'' を使わないユーザにとっては、どちらの方法をとったとしても対して速度に違いはないという主張もあるでしょう。
The value would therefore be 755 and you would use {{ic|chmod 755 ''filename''}} to remove the writable permission. You will notice you get the same three digit number no matter which method you use. Whether you use text or numbers will depend on personal preference and typing speed. When you want to restore a directory or file to default permissions e.g. read and write (and execute) permission to the owner but deny write permission to everyone else, it may be faster to use {{ic|chmod 755/644 ''filename''}}. However if you are changing the permissions to something out of the norm, it may be simpler and quicker to use the text method as opposed to trying to convert it to numbers, which may lead to a mistake. It could be argued that there is not any real significant difference in the speed of either method for a user that only needs to use ''chmod'' on occasion.
 
  +
  +
数字を使えば、4桁で {{ic|setuid}} ビット、{{ic|setgid}} ビット、そして {{ic|sticky}} ビットも設定できます。
  +
  +
setuid=4
  +
setgid=2
  +
sticky=1
  +
  +
例えば、{{ic|chmod 2777 ''filename''}} は、全員に対して読み/書き/実行ビットを設定し、さらに {{ic|setgid}} ビットも有効化します。
   
 
=== まとめて chmod ===
 
=== まとめて chmod ===
   
通常、ディレクトリとファイル同じパーミッションする必要はありません。一度にディレクトリツリーを修正しなくてはならない場合、''find'' を使って選択的に修正します
+
一般に、ディレクトリとファイルの両方に同じパーミッションを設定することはありません。ディレクトリツリー内のパーミッション一括で変更する必要がある場合[[find]] を使って選択的に修正してください
   
ディレクトリだけを 755 に chmod するには:
+
ディレクトリのパーミッションだけを 755 に変更するには:
   
$ find ''directory'' -type d -exec chmod 755 {} +
+
$ find ''ディレクトリ'' -type d -exec chmod 755 {} +
   
ファイルだけを 644 に chmod するには:
+
ファイルのパーミッションだけを 644 に変更するには:
   
$ find ''directory'' -type f -exec chmod 644 {} +
+
$ find ''ディレクトリ'' -type f -exec chmod 644 {} +
   
== 所有者変更 ==
+
== 所有者変更 ==
   
[[Wikipedia:chown|chown]] はファイルやディレクトリの所有者を変更します。場合によってはパーミッションの変更よりも簡単です。
+
[[Wikipedia:ja:chown|chown]] はファイルやディレクトリの所有者を変更します。これは、場合によってはパーミッションの変更よりも速くて簡単です。
   
以下の例では、[[GParted]] を使ってバックアップデータ用新しいパーティションを作成しています。Gparted は全てを root 実行するためファイルの所有者が全て root になります。ユーザーがパーティションをマウントしてデータを書き込もうると、ミッションによって拒否されてしまいます。
+
以下の例では、[[GParted]] を使ってバックアップデータ用新しいパーティションを作成しています。Gparted はデフォルトで全てを root として実行するためファイルの所有者が全て root になります。これ自体は全く問題ないのです、マウントされたパーティションデータを書き込ると、通常ユザはアクセスが拒否されてしまいます。
   
 
brw-rw---- 1 root disk 8, 9 Jul 6 16:02 sda9
 
brw-rw---- 1 root disk 8, 9 Jul 6 16:02 sda9
 
drwxr-xr-x 5 root root 4096 Jul 6 16:01 Backup
 
drwxr-xr-x 5 root root 4096 Jul 6 16:01 Backup
   
マウントされいるディレクトリ ({{ic|/media/Backup}}) と同じように、{{ic|/dev}} のデバイスの所有者も root にってることが確認きます。マウントされているディレクの所有者を変更するには以下を実行:
+
の通り、{{ic|/dev}} のデバイス root にって所有されており、それはマウントポイント ({{ic|/media/Backup}}) でも然りです。以下を実行することでマウントポイントの所有者を変更することができます:
   
ビフォー: {{ic|drwxr-xr-x 5 root root 4096 Jul 6 16:01 Backup}}
+
: {{ic|drwxr-xr-x 5 root root 4096 Jul 6 16:01 Backup}}
   
 
# chown archie /media/Backup
 
# chown archie /media/Backup
   
アフター: {{ic|drwxr-xr-x 5 archie root 4096 Jul 6 16:01 Backup}}
+
: {{ic|drwxr-xr-x 5 archie root 4096 Jul 6 16:01 Backup}}
   
  +
これで、パーミッションを変更することなく、新しい所有者である archie がこのパーティションにデータを書き込めるようになりました (所有者のパーミッションは {{ic|rwx}} であるため)。
Now the partition can have backup data written to it as instead of altering the permissions, as the owner already has {{ic|rwx}} permissions, the owner has been altered to the user archie. Alternatives would be to alter the permissions for everyone else (undesirable as it is a backup permission) or adding the user to the group {{ic|root}}.
 
  +
  +
{{Note|
  +
* {{ic|chown}} は常に setuid と setgid のビットを消去します。
  +
* root 以外のユーザは {{ic|chown}} を使って自身のファイルを他のユーザに「渡す」ことはできません。
  +
}}
   
 
== アクセス制御リスト ==
 
== アクセス制御リスト ==
   
[[アクセス制御リスト]]はファイルシステムに柔軟なパーミッション機構を追加しあらゆるユーザやグループにあらゆファイルのパーミッションを設定することます。
+
[[アクセス制御リスト]]は、任意のユーザやグループに対するパーミッションをファイルに設定できるようにすることで、ファイルシステムに柔軟なパーミッション機構を追加します。
   
  +
== Umask ==
アクセス制御リストがあるかどうかは [[アクセス制御リスト#ls コマンドの出力|ls コマンドの出力]]にプラス記号 ({{ic|+}}) があるかで確認できます。
 
  +
  +
[[umask]] ユーティリティを使うことでファイル作成モードマスクを制御することができ、新しくファイルを作成したときのファイルパーミッションの初期値を決めることができます。
   
 
== ファイルの属性 ==
 
== ファイルの属性 ==
   
[[ユーザーとグループ|ユーザーやグループ]]の読み書きや実行権限を制御するファイルモードビットとは別に、ファイル操作の可否を細かくカスタマイズするためのファイル属性を[[ファイルシステム]]がサポートしている場合があります。このセクションではそれらの属性を使用する方法を説明します。
+
[[ユーザーとグループ|ユーザーやグループ]]の読み書きや実行権限を制御するファイルモードビットとは別に、ファイル操作の可否を細かくカスタマイズするためのファイル属性を[[ファイルシステム]]がサポートしている場合があります。
  +
  +
{{Warning|デフォルトでは、[[cp]]、[[rsync]]、そしてその他の似たようなプログラムはファイルの属性を保持しません。}}
   
{{Warning|デフォルトでは、[[Core Utilities|cp]] [[rsync]] などのプログラムはファイルの属性までコピーしません}}
+
{{Pkg|e2fsprogs}} パッケージには、{{man|1|lsattr}} {{man|1|chattr}} というプログラムが含まれています。前者はファイルの属性を一覧表示し、後者は属性を変更しま
   
  +
いくつか便利な属性があります。全てのファイルシステムが以下の全てをサポートしているわけではありません。
=== chattr と lsattr ===
 
   
  +
* {{ic|a}} - 追加のみ: ファイルは追加 (append) 専用でしか開けなくなります。
ext2 や [[ext3]] ファイルシステムでは、{{Pkg|e2fsprogs}} パッケージに [[Wikipedia:lsattr|lsattr]] と [[Wikipedia:chattr|chattr]] というプログラムが含まれており、ファイルの属性を確認したり変更することができます。全てのファイルシステムで反映されるわけではありませんが、以下の属性を使用することができます:
 
  +
* {{ic|c}} - 圧縮済み: ファイルに対してファイルシステムレベルでの圧縮を有効化します。
  +
* {{ic|i}} - 変更不可: 変更、削除、名称変更が禁止され、さらにそのファイルにリンクを張ることができなくなります。root のみがこれを設定できます。
  +
* {{ic|j}} - データのジャーナリング: ファイルデータの書き込みとメタデータに対して[[ファイルシステム#ジャーナリング|ジャーナル]]を使用します。
  +
* {{ic|m}} - 圧縮をしない: ファイルに対してファイルシステムレベルでの圧縮を無効化します。
  +
* {{ic|A}} - atime を更新しない: ファイルの atime が変更されなくなります。
  +
* {{ic|C}} - コピーオンライトをしない: コピーオンライトを無効化します (ファイルシステムがコピーオンライトをサポートしている場合)。
   
  +
属性の完全なリストとそれぞれの属性の詳細は {{man|1|chattr}} を参照してください。
* {{ic|a}}: 追記のみ
 
* {{ic|c}}: 圧縮
 
* {{ic|d}}: ダンプしない
 
* {{ic|e}}: 拡張フォーマット
 
* {{ic|i}}: 変更不可
 
* {{ic|j}}: データのジャーナリング
 
* {{ic|s}}: 安全な消去
 
* {{ic|t}}: 末尾のマージをしない
 
* {{ic|u}}: 削除不可
 
* {{ic|A}}: アクセス日時を更新しない
 
* {{ic|C}}: コピーオンライトしない
 
* {{ic|D}}: ディレクトリの同期更新
 
* {{ic|S}}: 同期更新
 
* {{ic|T}}: ディレクトリ階層のトップ
 
   
例えば、特定のファイルに変更不可ビットを設定したい場合、のコマンドを使用:
+
例えば、とあるファイルに変更不可ビットを設定したい場合以下のコマンドを使用してください:
   
 
# chattr +i ''/path/to/file''
 
# chattr +i ''/path/to/file''
   
ファイルから属性をしたいとき {{ic|+}} を {{ic|-}} に変更してください。
+
ファイルから属性を取りくに{{ic|+}} を {{ic|-}} に変更してください。
   
 
== 拡張属性 ==
 
== 拡張属性 ==
   
  +
[[拡張属性]] を見てください。
{{ic|attr(5)}} より: "拡張属性とはファイルやディレクトリに関連付けられる name:value のペアである。拡張属性には4つのクラスがある: security, system, trusted, user"。
 
 
{{Warning|デフォルトでは、[[Core Utilities|cp]] や [[rsync]] などのプログラムは拡張属性までコピーしません。}}
 
 
=== ユーザー拡張属性 ===
 
 
ユーザー拡張属性を使うことでファイルに任意の情報を保存できます。ユーザー拡張属性を作成するには:
 
 
$ setfattr -n user.checksum -v "3baf9ebce4c664ca8d9e5f6314fb47fb" foo.bar
 
 
拡張属性を表示するには getfattr を使用:
 
 
$ getfattr -d foo.bar
 
# file: foo.bar
 
user.checksum="3baf9ebce4c664ca8d9e5f6314fb47fb"
 
 
=== ケイパビリティ ===
 
 
拡張属性は[[ケイパビリティ]]を設定するのにも使われます。
 
   
 
== ヒントとテクニック ==
 
== ヒントとテクニック ==
   
=== ルートの保護 ===
+
=== Preserve root ===
   
 
{{ic|--preserve-root}} フラグを使うことで {{ic|chmod}} を {{ic|/}} で再帰的に実行してしまうことを防ぐことができます。システム全体から実行可能属性を取り除いてシステムが破壊されてしまう恐れがなくなります。フラグを毎回使いたい場合、[[エイリアス]]で設定すると良いでしょう。[https://www.reddit.com/r/linux/comments/4ni3xe/tifu_sudo_chmod_644/] も参照。
 
{{ic|--preserve-root}} フラグを使うことで {{ic|chmod}} を {{ic|/}} で再帰的に実行してしまうことを防ぐことができます。システム全体から実行可能属性を取り除いてシステムが破壊されてしまう恐れがなくなります。フラグを毎回使いたい場合、[[エイリアス]]で設定すると良いでしょう。[https://www.reddit.com/r/linux/comments/4ni3xe/tifu_sudo_chmod_644/] も参照。
382行目: 388行目:
 
== 参照 ==
 
== 参照 ==
   
* [[wikipedia:Chattr]]
+
* [[Wikipedia:Chattr]]
* [http://www.hackinglinuxexposed.com/articles/20030417.html Linux File Permission Confusion]
+
* [https://www.hackinglinuxexposed.com/articles/20030417.html Linux File Permission Confusion]
* [http://www.hackinglinuxexposed.com/articles/20030424.html Linux File Permission Confusion part 2]
+
* [https://www.hackinglinuxexposed.com/articles/20030424.html Linux File Permission Confusion part 2]
  +
* [https://legacy-documentation.concrete5.org/tutorials/backup-and-restore-file-permissions-in-linux Backup and restore file permissions in Linux]
* [[wikipedia:Extended file attributes#Linux]]
 
  +
* [https://serverfault.com/questions/364677/why-is-chmod-r-777-destructive Why is "chmod -R 777 /" destructive?]
* [http://www.lesbonscomptes.com/pages/extattrs.html Extended attributes: the good, the not so good, the bad.]
 
  +
* [https://web.archive.org/web/20210724233134/https://security.ias.edu/node/441 The How and Why of User Private Groups in Unix]
* [http://www.concrete5.org/documentation/how-tos/designers/backup-and-restore-file-permissions-in-linux/ Backup and restore file permissions in Linux]
 
  +
  +
{{TranslationStatus|File permissions and attributes|2023-08-15|785253}}

2024年8月2日 (金) 12:04時点における最新版

関連記事

ファイルシステムは、パーミッション属性を使って、どの程度のレベルでシステムのプロセスがファイルやディレクトリとやり取りできるかを規定します。

警告: セキュリティ目的で使用する場合、パーミッションと属性は、起動済みのシステムからの攻撃しか防御しません。マシンへ物理的にアクセスできる攻撃者からデータを保護するには、ディスク暗号化も施さなければなりません。

パーミッションの表示

ls コマンドの -l オプションを使えば、ディレクトリのコンテンツのパーミッション (ファイルのモード とも) を確認できます。例:

$ ls -l /path/to/directory
total 128
drwxr-xr-x 2 archie archie  4096 Jul  5 21:03 Desktop
drwxr-xr-x 6 archie archie  4096 Jul  5 17:37 Documents
drwxr-xr-x 2 archie archie  4096 Jul  5 13:45 Downloads
-rw-rw-r-- 1 archie archie  5120 Jun 27 08:28 customers.ods
-rw-r--r-- 1 archie archie  3339 Jun 27 08:28 todo
-rwxr-xr-x 1 archie archie  2048 Jul  6 12:56 myscript.sh

1番目の列に注目してください。例えば drwxrwxrwx+ という値であれば、それぞれの文字の意味は以下の様のようになります:

d rwx rwx rwx +
ファイルの種類。技術的にはパーミッションの一部ではありません。ここに入りうる値の説明は info ls -n "What information is listed" を参照してください。 このファイルに対して所有者が持っているパーミッション。以下で説明されています。 このファイルに対してグループが持っているパーミッション。以下で説明されています。 このファイルに対してその他のユーザが持っているパーミッション。以下で説明されています。 代替のアクセス手法がこのファイルに対して適用されているかどうかを示す単一の文字。この文字が空白ならば、代替のアクセス手法は適用されていません。. 文字の場合は、ファイルにセキュリティコンテキストが存在しているが、代替のアクセス手法は適用されていないことを示します。代替のアクセス手法がその他の組み合わせで適用されているファイルでは、+ 文字で表されます。例えば、アクセス制御リストの場合です。

3つの文字からなるパーミッション (上記の例では rwx) には、以下の文字のどれかが入ります:

文字 ファイルに対する効果 ディレクトリに対する効果
読み取りパーミッション (最初の文字) - ファイルは読めません。 ディレクトリの中身は表示できません。
r ファイルを読むことができます。 ディレクトリの中身を表示できます。
書き込みパーミッション (2番目の文字) - ファイルは変更できません。 ディレクトリの中身は変更できません。
w ファイルを変更できます。 ディレクトリの中身を変更できます (ここでの変更とは、新しいファイルやディレクトリの作成、既存のファイルやディレクトリの名称変更や削除です)。ただし、実行パーミッションも設定されていなければなりません。さもないと、このパーミッションは効果を持ちません。
実行パーミッション (3番目の文字) - ファイルは実行できません。 ディレクトリは cd でアクセスできません。
x ファイルを実行できます。 ディレクトリに cd でアクセスできます。これは、親ディレクトリから事実上 "継承している" とみなすことのできる唯一のパーミッションビットです。事実、親ディレクトリのどれか1つでも x が設定されていないと、パスの最後のファイルやディレクトリにも (それのパーミッションに依らず) アクセスできません。詳細は path_resolution(7) を参照してください。
s ユーザ (user) のパーミッションにある場合は setuid ビット、グループ (group) のパーミッションにある場合は setgid ビットとなります。その他のユーザ (others) のパーミッションには現れません。この文字は、x も設定されていることを意味します。
S s と同じですが、x は設定されていません。通常のファイルで使われることは滅多になく、ディレクトリでは意味がありません。
t スティッキービットです。その他のユーザ (others) のパーミッションにしか現れません。この文字は、x も設定されていることを意味します。
T t と同じですが、x は設定されていません。通常のファイルで使われることは滅多にありません。

詳細は info Coreutils -n "Mode Structure"chmod(1) を見てください。

ヒント: namei -l path を使えば、パスと一緒にパーミッションを表示できます。

サンプル

いくつか例を見て、理解を深めましょう:

drwx------ 6 archie archie  4096 Jul  5 17:37 Documents

上記の場合、Archie は Documents ディレクトリへの完全なアクセス権を持っています。Archie は、Documents 内のファイルを (そのファイルのパーミッションに依らず) 一覧表示、名称変更、削除することができ、さらにファイルを Documents 内に作成することができます。しかし、ファイル自体にアクセス (つまり、読み書き実行) できるかどうかは、そのファイルのパーミッションに依ります。

dr-x------ 6 archie archie  4096 Jul  5 17:37 Documents

Archie はファイルの作成、名称変更、削除ができませんが、それ以外なら可能です。Archie は Documents 内のファイルを一覧表示することができ、Documents 内のファイルに (そのファイルのパーミッションで許可されているならば) アクセスできます。

d-wx------ 6 archie archie  4096 Jul  5 17:37 Documents

Archie は Documents ディレクトリ内で ls を実行することができませんが、ディレクトリ内の特定のファイルの名前を知っているならば、そのファイルを一覧表示、名称変更、削除することができ、さらに (そのファイルのパーミッションで許可されているならば) アクセスすることができます。また、新しいファイルを作成することもできます。

d--x------ 6 archie archie  4096 Jul  5 17:37 Documents

Archie は、Documents ディレクトリ内のファイルのうち、名前を知っているものにアクセスすることしかできません (ただし、そのファイルのパーミッションで許可されている場合に限る)。ディレクトリ内のファイルを一覧表示することはできず、ファイルの作成、名称変更、削除もできません。

ここで説明しているのはディレクトリのパーミッションであり、個々のファイルのパーミッションとは関係がありません。新しくファイルを作成したとき、変更があるのはディレクトリです。したがってディレクトリの書き込み権限が必要となります。

今度はディレクトリではなくファイルの例を見てみましょう:

-rw-r--r-- 1 archie web  5120 Jun 27 08:28 foobar

上記の例では最初の文字が d ではなく - になっていることが確認できます。なので、これはディレクトリではなくファイルであることを知ることができます。次に所有者のパーミッションは rw- なので所有者はファイルの読み書きができますが実行することはできません。所有者が3つのパーミッション全てを得ていないことはおかしく思えるかもしれませんが、x パーミッションは Gedit や Emacs などのテキストエディタから読むテキストファイル、あるいは R などのソフトウェアから読み込むデータファイルでは必要ないパーミッションです (python のコードなどが入っている場合は実行権限が与えられることがあります)。グループのパーミッションは r-- に設定されており、所有グループはファイルを読むことはできても編集することができません。何かを読み取り専用に設定することは重要です。他のユーザーのパーミッションはグループと同じに設定されています。

パーミッションの変更

chmod は Linux などの Unix ライクなオペレーティングシステムで使われるコマンドで、ファイルやディレクトリのパーミッション (アクセスモード (mode) とも) を変更 (change) することができます。

文字を使う方法

ファイルのパーミッション (アクセスモード とも) を変更するにはターミナルで chmod コマンドを使います。以下はコマンドの一般的な使い方です:

chmod who=パーミッション ファイル名

who は、パーミッションを与える対象を指定する文字です。以下のどれかになります:

  • u: そのファイルを所有するユーザー
  • g: そのファイルが所属するユーザーグループ
  • o: その他 (other) のユーザー。つまり、その他全員。
  • a: 上記全て。ugo と入力する代わりとして使えます。

ここでのパーミッションとは、#パーミッションの表示 で説明しているのと同じです (rwx)。

それではコマンドを使用例を見てみましょう。Documents ドキュメントを守るために、このディレクトリであなた以外の全員が読み書きと実行 (この場合は検索ともいえます) を行えないようにするには:

前: drwxr-xr-x 6 archie web 4096 Jul 5 17:37 Documents

$ chmod g= Documents
$ chmod o= Documents

後: drwx------ 6 archie web 4096 Jul 6 17:32 Documents

上記ではパーミッションを取り去るために、= の後に何も文字を入力していません。所有者のパーミッションだけ rwx となり、他のパーミッションは全て - に変更されたことが確認できます。

上記の設定は以下のコマンドで元に戻すことができます:

前: drwx------ 6 archie web 4096 Jul 6 17:32 Documents

$ chmod g=rx Documents
$ chmod o=rx Documents

後: drwxr-xr-x 6 archie web 4096 Jul 6 17:32 Documents

次の例では、グループとその他のユーザに対して読み込みと実行のパーミッションを与えてみます。つまり、= の後にパーミッションの文字 (rx) を入れます (スペース無しで)。

who に複数の文字を入力することで、これを行うことができます。例えば:

$ chmod go=rx Documents
ノート: chmod コマンドで who に入力する文字やパーミッション文字の順番は特に意味をなしません: chmod go=rx file でも chmod og=xr file でも全く同じ意味になります。

次に、2番目の例を考えてみましょう。たとえば、foobar ファイルを変更して、読み取りと書き込みのアクセス許可を与え、web グループの同僚が作業している可能性があると仮定します。foobar は読み取りと書き込みもできますが、他のユーザーは読み取りしかできません:

前: -rw-r--r-- 1 archie web 5120 Jun 27 08:28 foobar

$ chmod g=rw foobar

後: -rw-rw-r-- 1 archie web 5120 Jun 27 08:28 foobar

これは最初の例とまったく同じですが、ディレクトリではなくファイルを使用し、書き込み権限を付与します (権限を付与する例を全て示すため)。

文字を使う方法のショートカット

chmod コマンドでは = の代わりに + または - を使うことでパーミッションを追加したり削除することができます。上記のコマンドのようにパーミッションを完全に書き換えることがありません (例えば、パーミッションを r-- から rw- に変更する場合でも上記のコマンドを使うときは chmod コマンドの = の後に w だけでなく r も必要です。r を指定しなかった場合、r のパーミッションが消えてしまいます。+- を使うことで現在のパーミッションから一部のパーミッションを追加したり削除することができるようになります)。

前記のグループに書き込みパーミッションを与える例を +- で試してみましょう:

前: -rw-r--r-- 1 archie web 5120 Jun 27 08:28 foobar

$ chmod g+w foobar

後: -rw-rw-r-- 1 archie web 5120 Jun 27 08:28 foobar

また、全てのユーザー (a) から書き込み権限を奪いたい場合:

前: -rw-rw-r-- 1 archie web 5120 Jun 27 08:28 foobar

$ chmod a-w foobar

後: -r--r--r-- 1 archie web 5120 Jun 27 08:28 foobar

別のショートカットは特殊な X モードです。これは実際のファイルモードではありませんが、多くの場合、-R オプションと組み合わせて使用され、ディレクトリに対してのみ実行可能ビットを設定し、通常のファイルに対しては変更しないでおきます。たとえば、次のようになります:

$ chmod -R a+rX ./data/

パーミッションのコピー

chmod で、あるクラスから別のクラスにパーミッションをコピーすることも可能です (例えば、所有者のパーミッションをグループにコピーする)。そうするには、= の後に、rwx ではなく、もう一つの who 文字を入れてください。例えば:

前: -rw-r--r-- 1 archie web 5120 Jun 27 08:28 foobar

$ chmod g=u foobar

後: -rw-rw-r-- 1 archie web 5120 Jun 27 08:28 foobar

このコマンドは基本的に、"グループのアクセス許可を変更 (g=) して、所有ユーザー (=u) と同じにします。ただし、パーミッションのセットをコピーして、なおかつ新しいパーミッションを付与するというようなことはできません。例えば:

$ chmod g=wu foobar

この場合、chmod はエラーを吐きます。

数字を使う方法

chmod では数字を使ってパーミッションを設定することもできます。

数字を使えば、所有者、グループ、そしてその他のユーザのパーミッション全て、さらに setuid、setgid、そしてスティッキービットも一度に設定できます。基本的な使い方は以下のとおりです:

$ chmod xxx ファイル名

ここで、xxx は3桁の数字で、各桁は0から7までのどれかです。最初の桁は所有者のパーミッション、2桁目はグループのパーミッション、そして3桁目はその他のユーザのパーミッションです。

この数字表記では、rw、そして x はそれぞれ独自の数字を持ちます:

r=4
w=2
x=1

3桁の数字を計算するには、所有者、グループ、そしてユーザーにどのようなアクセス許可を付与するかを検討し、それらの値を合計する必要があります。例えば、ディレクトリの所有者には読み書きと実行のパーミッション、グループとその他のユーザには読み込みと実行のパーミッションのみを与える場合、数字は以下のようになります:

  • 所有者: rwx=4+2+1=7
  • グループ: r-x=4+0+1=5
  • その他: r-x=4+0+1=5
$ chmod 755 ファイル名

これは、以下の2つのコマンドを実行したときと等価です:

$ chmod u=rwx ファイル名
$ chmod go=rx ファイル名

ファイルやディレクトリのパーミッションを数字形式で見るには、stat(1) コマンドを使ってください:

$ stat -c %a filename

%a オプションは出力を数字形式にするという意味です。

ほとんどのフォルダとディレクトリは 755 に設定され、所有者には読み取り、書き込み、実行を許可しますが、それ以外のすべてのユーザーには書き込みを拒否します。ファイルは通常 644 で、所有者には読み取りと書き込みを許可しますが、他のすべてのユーザーには読み取りだけを許可します。実行可能ファイル以外では x パーミッションがないという最後のノートを参照してください。ここでも同じです。

理解するために、数字形式を使って前回の例と同じことをしてみましょう:

前: -rw-r--r-- 1 archie web 5120 Jun 27 08:28 foobar

$ chmod 664 foobar

後: -rw-rw-r-- 1 archie web 5120 Jun 27 08:28 foobar

所有者とグループに実行パーミッションを与えたい場合、数字は 774 になります。全員に読み込みパーミッションのみを与えたい場合は、444 になります。chmod xxx filename で使うための数字を計算する最も簡単な方法は、r を 4、w を 2、x を 1 として扱うことでしょう。しかし、それぞれのパーミッションを2進数として扱い、その後で数字に変換する方法もあります。この方法は少し複雑ですが、完全を期すために言及しておきましょう。

以下のパーミッション組を考えてみましょう:

-rwxr-xr--

与えるパーミッションに1を、与えないパーミッションに0を置くと、以下のようになります:

-rwxrwxr-x
 111111101

そして、これらの2進数を変換します:

000=0	    100=4
001=1	    101=5
010=2	    110=6
011=3	    111=7

よって、結果は 775 となります。

グループから書き込みパーミッションを取り除いてみましょう:

-rwxr-xr-x
 111101101

よって、結果は 755 となり、書き込みパーミッションを取り除くには chmod 755 filename を実行すれば良いことになります。どの方法をとっても同じ3桁の数字が得られます。文字を使うか数字を使うかは個人の好みと入力速度に依ります。ディレクトリやファイルのパーミッションをデフォルトに戻したい場合 (例えば、所有者に読み書き (と実行権限) を与え、それ以外には書き込み権限を与えない)、chmod 755/644 filename を使うほうが速いかもしれません。しかし、通常とは異なるパーミッションに変更する場合は、パーミッションを数字に変換するよりも、文字を使う方法をとったほうがシンプルで速いかもしれません (それに、数字を使う方法は間違いを犯す可能性があります)。たまにしか chmod を使わないユーザにとっては、どちらの方法をとったとしても対して速度に違いはないという主張もあるでしょう。

数字を使えば、4桁で setuid ビット、setgid ビット、そして sticky ビットも設定できます。

setuid=4
setgid=2
sticky=1

例えば、chmod 2777 filename は、全員に対して読み/書き/実行ビットを設定し、さらに setgid ビットも有効化します。

まとめて chmod

一般に、ディレクトリとファイルの両方に同じパーミッションを設定することはありません。ディレクトリツリー内のパーミッションを一括で変更する必要がある場合は、find を使って選択的に修正してください。

ディレクトリのパーミッションだけを 755 に変更するには:

$ find ディレクトリ -type d -exec chmod 755 {} +

ファイルのパーミッションだけを 644 に変更するには:

$ find ディレクトリ -type f -exec chmod 644 {} +

所有者の変更

chown はファイルやディレクトリの所有者を変更します。これは、場合によってはパーミッションの変更よりも速くて簡単です。

以下の例では、GParted を使ってバックアップデータ用の新しいパーティションを作成しています。Gparted はデフォルトで全てを root として実行するため、ファイルの所有者が全て root になります。これ自体は全く問題ないのですが、マウントされたパーティションにデータを書き込むとなると、通常ユーザはアクセスが拒否されてしまいます。

brw-rw---- 1 root disk 8,    9 Jul  6 16:02 sda9
drwxr-xr-x 5 root root    4096 Jul  6 16:01 Backup

見ての通り、/dev 内のデバイスは root によって所有されており、それはマウントポイント (/media/Backup) でも然りです。以下を実行することで、マウントポイントの所有者を変更することができます:

前: drwxr-xr-x 5 root root 4096 Jul 6 16:01 Backup

# chown archie /media/Backup

後: drwxr-xr-x 5 archie root 4096 Jul 6 16:01 Backup

これで、パーミッションを変更することなく、新しい所有者である archie がこのパーティションにデータを書き込めるようになりました (所有者のパーミッションは rwx であるため)。

ノート:
  • chown は常に setuid と setgid のビットを消去します。
  • root 以外のユーザは chown を使って自身のファイルを他のユーザに「渡す」ことはできません。

アクセス制御リスト

アクセス制御リストは、任意のユーザやグループに対するパーミッションをファイルに設定できるようにすることで、ファイルシステムに柔軟なパーミッション機構を追加します。

Umask

umask ユーティリティを使うことでファイル作成モードマスクを制御することができ、新しくファイルを作成したときのファイルパーミッションの初期値を決めることができます。

ファイルの属性

ユーザーやグループの読み書きや実行権限を制御するファイルモードビットとは別に、ファイル操作の可否を細かくカスタマイズするためのファイル属性をファイルシステムがサポートしている場合があります。

警告: デフォルトでは、cprsync、そしてその他の似たようなプログラムはファイルの属性を保持しません。

e2fsprogs パッケージには、lsattr(1)chattr(1) というプログラムが含まれています。前者はファイルの属性を一覧表示し、後者は属性を変更します。

いくつか便利な属性があります。全てのファイルシステムが以下の全てをサポートしているわけではありません。

  • a - 追加のみ: ファイルは追加 (append) 専用でしか開けなくなります。
  • c - 圧縮済み: ファイルに対してファイルシステムレベルでの圧縮を有効化します。
  • i - 変更不可: 変更、削除、名称変更が禁止され、さらにそのファイルにリンクを張ることができなくなります。root のみがこれを設定できます。
  • j - データのジャーナリング: ファイルデータの書き込みとメタデータに対してジャーナルを使用します。
  • m - 圧縮をしない: ファイルに対してファイルシステムレベルでの圧縮を無効化します。
  • A - atime を更新しない: ファイルの atime が変更されなくなります。
  • C - コピーオンライトをしない: コピーオンライトを無効化します (ファイルシステムがコピーオンライトをサポートしている場合)。

属性の完全なリストとそれぞれの属性の詳細は chattr(1) を参照してください。

例えば、とあるファイルに変更不可のビットを設定したい場合は、以下のコマンドを使用してください:

# chattr +i /path/to/file

ファイルから属性を取り除くには、+- に変更してください。

拡張属性

拡張属性 を見てください。

ヒントとテクニック

Preserve root

--preserve-root フラグを使うことで chmod/ で再帰的に実行してしまうことを防ぐことができます。システム全体から実行可能属性を取り除いてシステムが破壊されてしまう恐れがなくなります。フラグを毎回使いたい場合、エイリアスで設定すると良いでしょう。[1] も参照。

参照

翻訳ステータス: このページは en:File permissions and attributes の翻訳バージョンです。最後の翻訳日は 2023-08-15 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。