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

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎ファイルの属性: リンクを修正)
 
(2人の利用者による、間の20版が非表示)
2行目: 2行目:
 
[[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]]
 
[[ru:File permissions and attributes]]
  +
[[zh-hans:File permissions and attributes]]
 
{{Related articles start}}
 
{{Related articles start}}
 
{{Related|ユーザーとグループ}}
 
{{Related|ユーザーとグループ}}
8行目: 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"
38行目: 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}} ビットが設定されていない場合、最後のファイルやディレクトリパーミッションと関係なく、開くことができません。詳しくは {{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"}} {{man|1|chmod}} を参照
+
は {{ic|info Coreutils -n "Mode Structure"}} {{man|1|chmod}} を見てください
  +
  +
{{Tip|{{ic|namei -l ''path''}} を使えば、パスと一緒にパーミッションを表示できます。}}
   
 
=== サンプル ===
 
=== サンプル ===
   
いくつか例を見てましょう:
+
いくつか例を見て、理解を深めましょう:
   
'''drwx------''' 6 archie users 4096 Jul 5 17:37 Documents
+
'''drwx------''' 6 archie archie 4096 Jul 5 17:37 Documents
   
上記の場合 Archie は Documents ディレクトリの完全なアクセス権を持っています。Archie は Documents に入っているファイルを確認したりファイルを作成・削除することが可能す。ファイルのパーミッションは関係ありせん。ファイルにアクセスできるかどうかはファイルのパーミッションによって決まります。
+
上記の場合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 はファイル作成・削除したり前を変更することができません。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 は Documents の中を 'ls' することできませんが、ファイルの名前がわかってい名前を変更したり削除したり (ファイルの読み込み権限があれば) アクセスすることできます。また、新しいファイルを作ることも同様にできます。
+
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
   
Documents の中のファイルで Archie がアクセスできる名前を知っているファイルだけです (ファイルの読み込み権限が必要)。中に入っているファイルを一覧したり作成・削除することはできません。
+
Archie は、{{ic|Documents}} ディレクトリ内のファイルのうち、名前を知っているものにアクセスることしかできません (ただし、そのファイルのパーミッションで許可されている場合に限る)。ディレクトリ内のファイルを一覧表示することはできず、ファイルの作成、名称変更、削除もできません。
   
 
ここで説明しているのはディレクトリのパーミッションであり、個々のファイルのパーミッションとは関係がありません。新しくファイルを作成したとき、変更があるのはディレクトリです。したがってディレクトリの書き込み権限が必要となります。
 
ここで説明しているのはディレクトリのパーミッションであり、個々のファイルのパーミッションとは関係がありません。新しくファイルを作成したとき、変更があるのはディレクトリです。したがってディレクトリの書き込み権限が必要となります。
119行目: 125行目:
 
今度はディレクトリではなくファイルの例を見てみましょう:
 
今度はディレクトリではなくファイルの例を見てみましょう:
   
'''-rw-r--r--''' 1 archie users 5120 Jun 27 08:28 foobar
+
'''-rw-r--r--''' 1 archie web 5120 Jun 27 08:28 foobar
   
上記の例では最初の文字が {{ic|d}} ではなく {{ic|-}} になっていることが確認できます。最初文字からディレクトリではなくファイルであることを知ることができます。次に所有者のパーミッションは {{ic|rw-}} なので所有者はファイルの読み書きができますが実行することはできません。所有者が3つのパーミッション全てを得ていないことはおかしく思えるかもしれませんが、{{ic|x}} パーミッションは Gedit や [[Emacs]] などのテキストエディタから読むテキストファイル、あるいは [[R]] などのソフトウェアから読み込むデータファイルでは必要ないパーミッションです (python のコードなどが入っている場合は実行権限が与えられることがあります)。グループのパーミッションは {{ic|r--}} に設定されており、所有グループはファイルを読むことはできても編集することができません。何かを読み取り専用に設定することは重要です。他のユーザーのパーミッションはグループと同じに設定されています。
+
上記の例では最初の文字が {{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''
+
chmod ''who''=''パーミッション'' ''ファイル名''
   
{{ic|''who''}} はパーミッションを与える対象を指定する文字です。以下のどれかになります:
+
{{ic|''who''}} はパーミッションを与える対象を指定する文字です。以下のどれかになります:
   
* {{ic|u}}: ファイルを所有する[[ユーザーとグループ|ユーザー]]。
+
* {{ic|u}}: そのファイルを所有する[[ユーザー]]。
* {{ic|g}}: ファイルが所属する[[ユーザーとグループ|グループ]]。
+
* {{ic|g}}: そのファイルが所属する[[ユーザーグループ]]。
* {{ic|o}}: 他 ('''o'''ther) のユーザー。つまり、全てのユーザー
+
* {{ic|o}}: その他 ('''o'''ther) のユーザー。つまり、その他
* {{ic|a}}: 上記全て ('''a'''ll)。{{ic|ugo}} と入力する代わりに {{ic|a}} で指定できます。
+
* {{ic|a}}: 上記全て。{{ic|ugo}} と入力する代わりとして使えます。
   
設定するパーミッションは [[#パーミッションの表示]] で説明しているのと同じです ({{ic|r}}, {{ic|w}}, {{ic|x}})。
+
ここでのパーミッション[[#パーミッションの表示]] で説明しているのと同じです ({{ic|r}}{{ic|w}}{{ic|x}})。
   
それではコマンドを使用例を見てみましょう。Documents ディレクを守るためにあなた以外のユーザーが読み書き実行 (この場合は検索) ができないようにしたい場合:
+
それではコマンドを使用例を見てみましょう。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|-}} に変更されたことが確認できます。
 
上記ではパーミッションを取り去るために、{{ic|1==}} の後に何も文字を入力していません。所有者のパーミッションだけ {{ic|rwx}} となり、他のパーミッションは全て {{ic|-}} に変更されたことが確認できます。
155行目: 161行目:
 
上記の設定は以下のコマンドで元に戻すことができます:
 
上記の設定は以下のコマンドで元に戻すことができます:
   
ビフォー: {{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
   
アフター: {{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}}) をしています。空白は入れません
+
次の例では、グループとその他のユーザに対して読み込み実行のパーミッションを与えてみます。つまり、{{ic|1==}} の後にパーミッションの文字 ({{ic|r}} と {{ic|x}}) を入ます (スペース無しで)
   
{{ic|''who''}} に複数の文字を入力することでコマンドひとつにまとめることができます。例:
+
{{ic|''who''}} に複数の文字を入力することで、これ行うことができます。例えば:
   
 
$ chmod go=rx Documents
 
$ chmod go=rx Documents
   
{{Note|1={{ic|chmod}} コマンドで {{ic|''who''}} に入力する文字やパーミッション文字の順番は特に意味をなしません: {{ic|1=chmod go=rx file}} でも {{ic|1=chmod og=xr file}} でも全く同じ意味になります。}}
+
{{Note|{{ic|chmod}} コマンドで {{ic|''who''}} に入力する文字やパーミッション文字の順番は特に意味をなしません: {{ic|1=chmod go=rx file}} でも {{ic|1=chmod og=xr file}} でも全く同じ意味になります。}}
   
次に、2番目の例を考えてみましょう。たとえば、{{ic|foobar}} ファイルを変更して、読み取りと書き込みのアクセス許可を与え、グループ {{ic|users}} の同僚が作業している可能性があると仮定します。 {{ic|foobar}} は読み取りと書き込みもできますが、他のユーザーは読み取りしかできません
+
次に、2番目の例を考えてみましょう。たとえば、{{ic|foobar}} ファイルを変更して、読み取りと書き込みのアクセス許可を与え、{{ic|web}} グループの同僚が作業している可能性があると仮定します。{{ic|foobar}} は読み取りと書き込みもできますが、他のユーザーは読み取りしかできません:
   
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}}
   
これは最初の例とまったく同じですが、ディレクトリではなくファイルを使用し、書き込み権限を付与します(すべての権限を付与する例を示すため)
+
これは最初の例とまったく同じですが、ディレクトリではなくファイルを使用し、書き込み権限を付与します (権限を付与する例を全て示すため)
   
==== テキストを使う方法のショートカット ====
+
==== 文字を使う方法のショートカット ====
   
 
''chmod'' コマンドでは {{ic|1==}} の代わりに {{ic|+}} または {{ic|-}} を使うことでパーミッションを追加したり削除することができます。上記のコマンドのようにパーミッションを完全に書き換えることがありません (例えば、パーミッションを {{ic|r--}} から {{ic|rw-}} に変更する場合でも上記のコマンドを使うときは ''chmod'' コマンドの {{ic|1==}} の後に {{ic|w}} だけでなく {{ic|r}} も必要です。{{ic|r}} を指定しなかった場合、{{ic|r}} のパーミッションが消えてしまいます。{{ic|+}} と {{ic|-}} を使うことで現在のパーミッションから一部のパーミッションを追加したり削除することができるようになります)。
 
''chmod'' コマンドでは {{ic|1==}} の代わりに {{ic|+}} または {{ic|-}} を使うことでパーミッションを追加したり削除することができます。上記のコマンドのようにパーミッションを完全に書き換えることがありません (例えば、パーミッションを {{ic|r--}} から {{ic|rw-}} に変更する場合でも上記のコマンドを使うときは ''chmod'' コマンドの {{ic|1==}} の後に {{ic|w}} だけでなく {{ic|r}} も必要です。{{ic|r}} を指定しなかった場合、{{ic|r}} のパーミッションが消えてしまいます。{{ic|+}} と {{ic|-}} を使うことで現在のパーミッションから一部のパーミッションを追加したり削除することができるようになります)。
186行目: 192行目:
 
前記のグループに書き込みパーミッションを与える例を {{ic|+}} と {{ic|-}} で試してみましょう:
 
前記のグループに書き込みパーミッションを与える例を {{ic|+}} と {{ic|-}} で試してみましょう:
   
ビフォー: {{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
   
アフター: {{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''') から書き込み権限を奪いたい場合:
 
また、全てのユーザー ('''a''') から書き込み権限を奪いたい場合:
   
ビフォー: {{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
   
アフター: {{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}} オプションと組み合わせて使用され、ディレクトリに対してのみ実行可能ビットを設定し、通常のファイルに対しては変更しないでおきます。たとえば、次のようになります
+
別のショートカットは特殊な {{ic|X}} モードです。これは実際のファイルモードではありませんが、多くの場合、{{ic|-R}} オプションと組み合わせて使用され、ディレクトリに対してのみ実行可能ビットを設定し、通常のファイルに対しては変更しないでおきます。たとえば、次のようになります:
   
 
$ chmod -R a+rX ./data/
 
$ chmod -R a+rX ./data/
206行目: 212行目:
 
==== パーミッションのコピー ====
 
==== パーミッションのコピー ====
   
'' chmod '' に1つのクラスから許可をコピーするように指示し、所有者になって、グループまたはべてに同じ許可を与えことができます これを行うには、{{ic|1 ==}}の後に {{ic|r}}{{ic|w}}、または {{ic|x}} を配置する代わりにの '' who ''を配置します 文字。 例えば:
+
''chmod'' で、あるクラスから別のクラスにパーミッションをコピーすることも可能です (例えば、所有者のパーミッションをグループにコピーする)するには、{{ic|1==}} の後に{{ic|r}}{{ic|w}}、{{ic|x}} ではなくもう一つの ''who'' 文字を入れてください。例えば:
   
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}}) と同じにします。パーミッションのセットをコピーしたり、新しいパーミッションを付与したりすることはできません。
+
このコマンドは基本的に、"グループのアクセス許可を変更 ({{ic|1=g=}}) して、所有ユーザー ({{ic|1==u}}) と同じにします。ただし、パーミッションのセットをコピーしなおかつ新しいパーミッションを付与するというようなことはできません。例えば:
   
 
$ chmod g=wu foobar
 
$ chmod g=wu foobar
   
の場合、 ''chmod'' はエラーを出します。
+
の場合、''chmod'' はエラーを吐きます。
   
 
=== 数字を使う方法 ===
 
=== 数字を使う方法 ===
224行目: 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はその他のユーザのパーミッションす。
   
この数表記では、{{ic|r}}、{{ic|w}}、および {{ic|x}} それぞれ独自の数を持ちます
+
この数表記では、{{ic|r}}、{{ic|w}}、そして {{ic|x}} それぞれ独自の数を持ちます:
   
 
r=4
 
r=4
236行目: 242行目:
 
x=1
 
x=1
   
3桁の数字を考え出すには、所有者、グループ、ユーザーにどのようなアクセス許可を付与するかを検討し、それらの値を合計する必要があります。 たとえば、ディレクトリの所有者に読み取りと書き込みアクセス許可を付与し、グループと他のすべてのユーザに読み取りと実行のアクセス許可のみをる場合、のような数値が考えられます
+
3桁の数字を計算には、所有者、グループ、そしてユーザーにどのようなアクセス許可を付与するかを検討し、それらの値を合計する必要があります。えば、ディレクトリの所有者に読み書きと実行パーミッション、グループとその他のユーザに読み込みと実行のパーミッションのみを与る場合、数字は以下のようます:
   
* 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つのコマンド実行したと等です:
   
$ chmod u=rwx ''filename''
+
$ chmod u=rwx ''ファイル名''
$ chmod go=rx ''filename''
+
$ chmod go=rx ''ファイル名''
   
  +
ファイルやディレクトリのパーミッションを数字形式で見るには、{{man|1|stat}} コマンドを使ってください:
ほとんどのフォルダとディレクトリは {{ic|755}} に設定され、所有者には読み取り、書き込み、実行を許可しますが、それ以外のすべてのユーザーには書き込みを拒否します。ファイルは通常 {{ic|644}} で、所有者には読み取りと書き込みを許可しますが、他のすべてのユーザーには読み取りだけを許可します。実行可能ファイル以外では {{ic|x}} パーミッションがないという最後の注意を参照してください。
 
   
  +
$ stat -c %a ''filename''
例を使用してこれを実際に見るには、使用されている前の例を検討してください。代わりに、この数値手法が適用されています。
 
   
  +
%a オプションは出力を数字形式にするという意味です。
ビフォー: {{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
   
アフター: {{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|r}} を4、{{ic|w}} を2、{{ic|x}} を1として処理する方法は{{ic|chmod ''xxx'' ''ファイル名''}} を使用するため数値算出する最も簡単な方法ですが、各権限に2進数を割り当て、それをに変換する2進法もあります。もう少し複雑ですが、ここでは完全性のために説明しま
+
所有者とグループに実行パーミッションを与えたい場合数字は {{ic|774}} になります。全員に読み込みパーミッションのみを与えたい場合は、{{ic|444}} になります。{{ic|chmod ''xxx'' ''filename''}} で使うための数字を計算する最も簡単な方法は、{{ic|r}} を 4、{{ic|w}} を 2、{{ic|x}} を 1 として扱うことでしょう。しかしそれぞれパーミッションを2進数とし扱い、その後でに変換する法もあります。この方法は少し複雑ですが、完全を期すために言及ておきしょう
   
  +
以下のパーミッション組を考えてみましょう:
次の権限セットを検討してください。
 
   
 
-rwxr-xr--
 
-rwxr-xr--
   
許可された各許可の下に1を、許可されていないすべての許可対して0を置くと、結果は次のようになります
+
与えるパーミッションに1を、与えないパーミッションに0を置くと、以下のようになります:
   
 
-rwxrwxr-x
 
-rwxrwxr-x
 
111111101
 
111111101
   
次に、これらの2進数を変換できます
+
そして、これらの2進数を変換ます:
   
 
000=0 100=4
 
000=0 100=4
277行目: 289行目:
 
011=3 111=7
 
011=3 111=7
   
したがって、上記の値は775なります。
+
って、結果 775なります。
   
グループから書き込み可能な権限した場合。
+
グループから書き込みパーミッション取り除いてみましょう:
   
 
-rwxr-xr-x
 
-rwxr-xr-x
 
111101101
 
111101101
したがって、値は755となり、{{ic|chmod 755 ''filename''}} を使用して書き込み可能な権限を削除します。 どの方法を使用しても、同じ3桁の数字が表示されます。 テキストと数字のどちらを使用するかは、個人の好みと入力速度に依存します。 ディレクトリまたはファイルをデフォルトのアクセス許可に復元する場合。 所有者には読み取りと書き込み(および実行)のアクセス許可を付与しますが、他のすべてのユーザーには書き込みのアクセス許可を拒否します。{{ic|chmod 755/644 ''filename''}} を使用する方が速い場合があります。 ただし、権限を通常とは異なるものに変更する場合は、テキストメソッドを使用する方が数値に変換するよりも簡単で迅速な場合があり、これによりミスが発生する可能性があります。 たまに ''chmod'' を使用するだけでよいユーザーにとって、どちらの方法の速度にも実際に大きな違いはないと主張することができます。
 
   
  +
よって、結果は 755 となり、書き込みパーミッションを取り除くには {{ic|chmod 755 ''filename''}} を実行すれば良いことになります。どの方法をとっても同じ3桁の数字が得られます。文字を使うか数字を使うかは個人の好みと入力速度に依ります。ディレクトリやファイルのパーミッションをデフォルトに戻したい場合 (例えば、所有者に読み書き (と実行権限) を与え、それ以外には書き込み権限を与えない)、{{ic|chmod 755/644 ''filename''}} を使うほうが速いかもしれません。しかし、通常とは異なるパーミッションに変更する場合は、パーミッションを数字に変換するよりも、文字を使う方法をとったほうがシンプルで速いかもしれません (それに、数字を使う方法は間違いを犯す可能性があります)。たまにしか ''chmod'' を使わないユーザにとっては、どちらの方法をとったとしても対して速度に違いはないという主張もあるでしょう。
   
数字を使う方法であれ数字を4個使って {{ic|setuid}}, {{ic|setgid}}, {{ic|sticky}} ビットも設定できます:
+
数字を使4桁で {{ic|setuid}} ビット、{{ic|setgid}} ビット、そして {{ic|sticky}} ビットも設定できます
   
 
setuid=4
 
setuid=4
292行目: 304行目:
 
sticky=1
 
sticky=1
   
例えば {{ic|chmod 2777 ''filename''}} であれば誰でも読み書き実行ができ、{{ic|setgid}} ビットも有効になります。
+
例えば{{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がパーティションにデータを書き込むことができ(所有者triadすでにrwxアクセス許可を持っていので)。
+
これで、パーミッションを変更することなく、新しい所有者である archie このパーティションにデータを書き込めるようになりした (所有者のパーミッション {{ic|rwx}} である)。
   
 
{{Note|
 
{{Note|
* {{ic|chown}} は常に setuid と setgid ビットを消去します。
+
* {{ic|chown}} は常に setuid と setgid ビットを消去します。
* root 以外のユーザは {{ic|chown}} を使ってファイルの所有権を他のユーザ変えることできません。
+
* root 以外のユーザは {{ic|chown}} を使って自身のファイルを他のユーザに「渡す」ことできません。
 
}}
 
}}
   
 
== アクセス制御リスト ==
 
== アクセス制御リスト ==
   
[[アクセス制御リスト]]はファイルシステムに柔軟なパーミッション機構を追加しあらゆるユーザやグループにあらゆファイルのパーミッションを設定することます。
+
[[アクセス制御リスト]]は、任意のユーザやグループに対するパーミッションをファイルに設定できるようにすることで、ファイルシステムに柔軟なパーミッション機構を追加します。
 
アクセス制御リストがあるかどうかは [[アクセス制御リスト#ls コマンドの出力|ls コマンドの出力]]にプラス記号 ({{ic|+}}) があるかで確認できます。
 
   
 
== Umask ==
 
== Umask ==
342行目: 352行目:
 
== ファイルの属性 ==
 
== ファイルの属性 ==
   
[[ユーザーとグループ|ユーザーやグループ]]の読み書きや実行権限を制御するファイルモードビットとは別に、ファイル操作の可否を細かくカスタマイズするためのファイル属性を[[ファイルシステム]]がサポートしている場合があります。このセクションではそれらの属性を使用する方法を説明します。
+
[[ユーザーとグループ|ユーザーやグループ]]の読み書きや実行権限を制御するファイルモードビットとは別に、ファイル操作の可否を細かくカスタマイズするためのファイル属性を[[ファイルシステム]]がサポートしている場合があります。
   
{{Warning|デフォルトでは、[[Core Utilities|cp]][[rsync]] などのプログラムはファイルの属性までコピーしません。}}
+
{{Warning|デフォルトでは、[[cp]][[rsync]]、そしてそ他の似たようなプログラムはファイルの属性を保持しません。}}
   
{{Pkg|e2fsprogs}} パッケージには、{{man|1|lsattr}} と {{man|1|chattr}} というプログラムが含まれており、ファイルの属性を確認たり変更することができます。
+
{{Pkg|e2fsprogs}} パッケージには、{{man|1|lsattr}} と {{man|1|chattr}} というプログラムが含まれています。前者はファイルの属性を一覧表示、後者は属性を変更ます。
   
全てのファイルシステムで反映されるわけではありませんが、以下の属性を使用することができます:
+
いくつか便利な属性があります。全てのファイルシステムが以下の全てをサポートしているわけではありません
   
  +
* {{ic|a}} - 追加のみ: ファイルは追加 (append) 専用でしか開けなくなります。
* {{ic|a}}: 追記のみ
 
  +
* {{ic|c}} - 圧縮済み: ファイルに対してファイルシステムレベルでの圧縮を有効化します。
* {{ic|c}}: 圧縮
 
  +
* {{ic|i}} - 変更不可: 変更、削除、名称変更が禁止され、さらにそのファイルにリンクを張ることができなくなります。root のみがこれを設定できます。
* {{ic|d}}: ダンプしない
 
  +
* {{ic|j}} - データのジャーナリング: ファイルデータの書き込みとメタデータに対して[[ファイルシステム#ジャーナリング|ジャーナル]]を使用します。
* {{ic|e}}: 拡張フォーマット
 
  +
* {{ic|m}} - 圧縮をしない: ファイルに対してファイルシステムレベルでの圧縮を無効化します。
* {{ic|i}}: 変更不可
 
  +
* {{ic|A}} - atime を更新しない: ファイルの atime が変更されなくなります。
* {{ic|j}}: データのジャーナリング
 
  +
* {{ic|C}} - コピーオンライトをしない: コピーオンライトを無効化します (ファイルシステムがコピーオンライトをサポートしている場合)。
* {{ic|s}}: 安全な消去
 
* {{ic|t}}: 末尾のマージをしない
 
* {{ic|u}}: 削除不可
 
* {{ic|A}}: アクセス日時を更新しない
 
* {{ic|C}}: コピーオンライトしない
 
* {{ic|D}}: ディレクトリの同期更新
 
* {{ic|S}}: 同期更新
 
* {{ic|T}}: ディレクトリ階層のトップ
 
   
  +
属性の完全なリストとそれぞれの属性の詳細は {{man|1|chattr}} を参照してください。
例えば、特定のファイルに変更不可ビットを設定したい場合、次のコマンドを使用:
 
  +
  +
例えば、とあるファイルに変更不可のビットを設定したい場合は、以下のコマンドを使用してください:
   
 
# chattr +i ''/path/to/file''
 
# chattr +i ''/path/to/file''
   
ファイルから属性をしたいとき {{ic|+}} を {{ic|-}} に変更してください。
+
ファイルから属性を取りくに{{ic|+}} を {{ic|-}} に変更してください。
   
 
== 拡張属性 ==
 
== 拡張属性 ==
   
  +
[[拡張属性]] を見てください。
{{man|5|attr}} より: "拡張属性とはファイルやディレクトリに関連付けられる name:value のペアである。拡張属性には4つのクラスがある: security, system, trusted, user"。
 
 
{{Warning|デフォルトでは、[[Core Utilities|cp]] や [[rsync]] などのプログラムは拡張属性までコピーしません。}}
 
 
=== ユーザー拡張属性 ===
 
 
ユーザー拡張属性を使うことでファイルに任意の情報を保存できます。ユーザー拡張属性を作成するには:
 
 
$ setfattr -n user.checksum -v "3baf9ebce4c664ca8d9e5f6314fb47fb" foo.bar
 
 
拡張属性を表示するには getfattr を使用:
 
 
{{hc|$ getfattr -d foo.bar|2=
 
# 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/] も参照。
401行目: 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:ja:拡張ファイル属性#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]
 
  +
* [https://serverfault.com/questions/364677/why-is-chmod-r-777-destructive Why is “chmod -R 777 /” destructive?]
 
  +
{{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 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。