「ユーザーとグループ」の版間の差分
細 (→ユーザーグループ: typo) |
(同期) |
||
(2人の利用者による、間の5版が非表示) | |||
1行目: | 1行目: | ||
[[Category:セキュリティ]] |
[[Category:セキュリティ]] |
||
+ | [[ar:Users and groups]] |
||
[[de:Benutzer und Gruppen]] |
[[de:Benutzer und Gruppen]] |
||
[[en:Users and groups]] |
[[en:Users and groups]] |
||
[[es:Users and groups]] |
[[es:Users and groups]] |
||
− | [[fa:کاربران و گروه ها]] |
||
[[fr:Users and groups]] |
[[fr:Users and groups]] |
||
− | [[it:Users and groups]] |
||
[[pt:Users and groups]] |
[[pt:Users and groups]] |
||
[[ru:Users and groups]] |
[[ru:Users and groups]] |
||
16行目: | 15行目: | ||
{{Related|systemd-homed}} |
{{Related|systemd-homed}} |
||
{{Related|パスワードリカバリ}} |
{{Related|パスワードリカバリ}} |
||
+ | {{Related|アイデンティティ管理}} |
||
{{Related articles end}} |
{{Related articles end}} |
||
24行目: | 24行目: | ||
''ユーザー''とはコンピュータを使う全ての人のことです。ここで、名前がユーザーを表すことを説明しましょう。名前は Mary や Bill という風につけられ、実名のかわりに Dragonlady や Pirate といった名前を使うことができます。重要なのはコンピュータはそれぞれのアカウントに名前をつけていて、人々がコンピュータを使うためのアクセスを得るために名前を使うということです。システムサービスによっては制限・特権ユーザーアカウントを使って動作させることもあります。 |
''ユーザー''とはコンピュータを使う全ての人のことです。ここで、名前がユーザーを表すことを説明しましょう。名前は Mary や Bill という風につけられ、実名のかわりに Dragonlady や Pirate といった名前を使うことができます。重要なのはコンピュータはそれぞれのアカウントに名前をつけていて、人々がコンピュータを使うためのアクセスを得るために名前を使うということです。システムサービスによっては制限・特権ユーザーアカウントを使って動作させることもあります。 |
||
− | 特定の方法でアクセスを制限することでセキュリティのためにユーザーの管理が行われます。[[Wikipedia:ja:スーパーユーザー|スーパーユーザー]] (root) はオペレーティングシステムと設定全てにアクセスすることができます。そのため管理用途だけに使われることが想定されています。特権がないユーザーは |
+ | 特定の方法でアクセスを制限することでセキュリティのためにユーザーの管理が行われます。[[Wikipedia:ja:スーパーユーザー|スーパーユーザー]] (root) はオペレーティングシステムと設定全てにアクセスすることができます。そのため管理用途だけに使われることが想定されています。特権がないユーザーはいくつかのプログラムによって[[アプリケーション一覧/セキュリティ#管理者権限|制御された特権昇格]]を行うことが可能です。 |
作成するアカウントにそれぞれ異なる名前を使えば、人々は複数のアカウントを持つことが可能です。さらに、"root" など、使うことができない予約済みの名前も存在します。 |
作成するアカウントにそれぞれ異なる名前を使えば、人々は複数のアカウントを持つことが可能です。さらに、"root" など、使うことができない予約済みの名前も存在します。 |
||
40行目: | 40行目: | ||
:''このキーデザイン原理の構成は統一パラダイムの提供による幅広い入出力のアクセスです: ドキュメント、ディレクトリ、ハードドライブ、CD-ROM、キーボード、プリンター、モニター、ターミナル、インタープロセス、ネットワーク。トリックはこれらリソース全てに対して共通のアブストラクションを提供することで、UNIX の父たちは"ファイル"と呼びました。全ての"ファイル"が同じ API を使って扱われることにより、同じ基本的なコマンドセットを使ってディスク、キーボード、ドキュメント、ネットワークデバイスへの読み書きができます。'' |
:''このキーデザイン原理の構成は統一パラダイムの提供による幅広い入出力のアクセスです: ドキュメント、ディレクトリ、ハードドライブ、CD-ROM、キーボード、プリンター、モニター、ターミナル、インタープロセス、ネットワーク。トリックはこれらリソース全てに対して共通のアブストラクションを提供することで、UNIX の父たちは"ファイル"と呼びました。全ての"ファイル"が同じ API を使って扱われることにより、同じ基本的なコマンドセットを使ってディスク、キーボード、ドキュメント、ネットワークデバイスへの読み書きができます。'' |
||
− | [ |
+ | [https://citeseerx.ist.psu.edu/document?repid=rep1&type=pdf&doi=bb95638cdcae4f1a88354734f96a868704bb6684 Extending UNIX File Abstraction for General-Purpose Networking] より: |
− | :''UNIX とその互換オペレーティングシステムで提供されている、基礎的でとてもパワフルで一貫性のあるアブストラクションがファイルアブストラクションです。多くの OS サービスとデバイスインターフェイスはアプリケーションにファイルやファイルシステムをあたえることで実装されています。これによって既存のアプリケーションの新しい利用ができるようになり力を引き出すことができるようになります — 固有の使用目的で設計されたシンプルなツールが、UNIX ファイルアブストラクションを使って、新しい方法で利用されます。cat のような、ファイルの読み込みと標準出力への内容のアウトプットができるシンプルなツールを特別なデバイスファイル、典型的に {{ic|/dev}} ディレクトリ下のファイルを通して、I/O デバイスからの読み書きに使うことが可能なのです。多くのシステムで、録音と再生がそれぞれ次のコマンドで |
+ | :''UNIX とその互換オペレーティングシステムで提供されている、基礎的でとてもパワフルで一貫性のあるアブストラクションがファイルアブストラクションです。多くの OS サービスとデバイスインターフェイスはアプリケーションにファイルやファイルシステムをあたえることで実装されています。これによって既存のアプリケーションの新しい利用ができるようになり力を引き出すことができるようになります — 固有の使用目的で設計されたシンプルなツールが、UNIX ファイルアブストラクションを使って、新しい方法で利用されます。cat のような、ファイルの読み込みと標準出力への内容のアウトプットができるシンプルなツールを特別なデバイスファイル、典型的に {{ic|/dev}} ディレクトリ下のファイルを通して、I/O デバイスからの読み書きに使うことが可能なのです。多くのシステムで、録音と再生がそれぞれ次のコマンドでできます、"{{ic|cat /dev/audio > myfile}}" と "{{ic|cat myfile > /dev/audio}}"。'' |
GNU/Linux において全てのファイルは1つのユーザーと1つのグループによって所有されます。加えて、アクセス許可の3つのタイプが存在します: 読み込み、書き込み、実行です。ファイルの所有ユーザー、所有グループ、(所有権をもっていない)第三者に対してそれぞれ異なるアクセス許可を適用することが可能です。[[ls]] コマンドによってファイルの所有者とパーミッションを確認できます: |
GNU/Linux において全てのファイルは1つのユーザーと1つのグループによって所有されます。加えて、アクセス許可の3つのタイプが存在します: 読み込み、書き込み、実行です。ファイルの所有ユーザー、所有グループ、(所有権をもっていない)第三者に対してそれぞれ異なるアクセス許可を適用することが可能です。[[ls]] コマンドによってファイルの所有者とパーミッションを確認できます: |
||
126行目: | 126行目: | ||
; {{ic|-s}}/{{ic|--shell}}: ユーザのログインシェルへのパス。[[Bash]] 以外のものを指定する場合、そのシェルがインストールされていることを確認してください。新しく作成されたユーザのデフォルトシェルは {{ic|/etc/default/useradd}} で設定できます。 |
; {{ic|-s}}/{{ic|--shell}}: ユーザのログインシェルへのパス。[[Bash]] 以外のものを指定する場合、そのシェルがインストールされていることを確認してください。新しく作成されたユーザのデフォルトシェルは {{ic|/etc/default/useradd}} で設定できます。 |
||
− | {{Warning|ログインできるようにするには、ログインシェルは {{ic|/etc/shells}} に記載されているものでなければなりません。さもないと、[[PAM]] モジュール {{ |
+ | {{Warning|ログインできるようにするには、ログインシェルは {{ic|/etc/shells}} に記載されているものでなければなりません。さもないと、[[PAM]] モジュール {{man|8|pam_shells}} はログイン要求を拒否します。}} |
{{Note|新しく作成されたユーザには、[[#ユーザーを追加する例]] で説明されているように ''passwd'' を使ってパスワードを設定しなければなりません。}} |
{{Note|新しく作成されたユーザには、[[#ユーザーを追加する例]] で説明されているように ''passwd'' を使ってパスワードを設定しなければなりません。}} |
||
142行目: | 142行目: | ||
# useradd -m archie |
# useradd -m archie |
||
+ | 新しく作成したユーザ {{ic|archie}} をパスワードで保護する必要はありませんが、パスワードで保護することが強く推奨されます: |
||
− | {{Tip|新しいアカウントのログインシェルのデフォルト値は、{{ic|useradd --defaults}} を使って確認できます。デフォルトは [[Bash]] です。{{ic|-s}}/{{ic|--shell}} を使って他のシェルを指定できます。有効なログインシェルのリストは {{ic|/etc/shells}} を見てください。}} |
||
− | |||
− | 新しく作成したユーザ {{ic|archie}} をパスワードで保護する必要性はありませんが、パスワードで保護することが強く推奨されます: |
||
# passwd archie |
# passwd archie |
||
159行目: | 157行目: | ||
一時的に GID を変更する必要がある場合、''newgrp'' コマンドを使用することで実行時にユーザのフォルトの GID を他の GID に変更できます。例えば、{{ic|newgrp ''groupname''}} を実行したあと、そのユーザによって作成されたファイルは (再ログインの必要とせずに) {{ic|''groupname''}} の GID と関連付けられます。デフォルトの GID に戻すには、グループ名無しで ''newgrp'' を実行してください。 |
一時的に GID を変更する必要がある場合、''newgrp'' コマンドを使用することで実行時にユーザのフォルトの GID を他の GID に変更できます。例えば、{{ic|newgrp ''groupname''}} を実行したあと、そのユーザによって作成されたファイルは (再ログインの必要とせずに) {{ic|''groupname''}} の GID と関連付けられます。デフォルトの GID に戻すには、グループ名無しで ''newgrp'' を実行してください。 |
||
+ | |||
+ | ==== ユーザーのデフォルト設定を変更する ==== |
||
+ | |||
+ | 新しいアカウントを作成する際に用いられるデフォルト値は {{ic|/etc/default/useradd}} で設定されており、{{ic|useradd --defaults}} コマンドで確認できます。例えば、{{ic|1=SHELL=/usr/bin/''shell''}} を設定すると、デフォルトのシェルをグローバルに変更できます。また、{{ic|-s}}/{{ic|--shell}} オプションを使えば、アカウント毎にシェルを設定できます。{{ic|chsh -l}} を使えば、有効なログインシェルを一覧表示できます。 |
||
+ | |||
+ | {{ic|/etc/skel}} ディレクトリでは、新しく作成したユーザーのホームディレクトリへ追加するファイルを指定することもできます。これは、デスクトップ環境のような動作を実現するために設定ファイルを手動で編集する必要のあるミニマリズムなウィンドウマネージャにおいて便利です。例えば、新しく作成する全ユーザーに対してデフォルトのショートカットをセットアップするには: |
||
+ | |||
+ | # mkdir /etc/skel/.config |
||
+ | # cp ~archie/.config/sxhkd /etc/skel/.config |
||
+ | |||
+ | また、[[ディスプレイマネージャ#セッションとして ~/.xinitrc を実行]] では、全ユーザーに対してディスプレイマネージャで xinitrc をオプションとして追加する方法について説明されています。 |
||
=== システムユーザーを追加する例 === |
=== システムユーザーを追加する例 === |
||
166行目: | 175行目: | ||
以下のコマンドで、シェルへのアクセス権が無く、{{ic|home}} ディレクトリも持たないシステムユーザが作成されます (オプションで、{{ic|-U}} パラメータを追加するとユーザと同じ名前のグループも作成し、ユーザをそのグループに追加します): |
以下のコマンドで、シェルへのアクセス権が無く、{{ic|home}} ディレクトリも持たないシステムユーザが作成されます (オプションで、{{ic|-U}} パラメータを追加するとユーザと同じ名前のグループも作成し、ユーザをそのグループに追加します): |
||
− | # useradd - |
+ | # useradd --system -s /usr/bin/nologin ''username'' |
システムユーザが特定のユーザ ID およびグループ ID を必要とする場合、ユーザの作成時に {{ic|-u}}/{{ic|--uid}} オプションと {{ic|-g}}/{{ic|--gid}} オプションで ID を指定してください: |
システムユーザが特定のユーザ ID およびグループ ID を必要とする場合、ユーザの作成時に {{ic|-u}}/{{ic|--uid}} オプションと {{ic|-g}}/{{ic|--gid}} オプションで ID を指定してください: |
||
− | # useradd - |
+ | # useradd --system -u 850 -g 850 -s /usr/bin/nologin ''username'' |
=== ユーザーのログイン名やホームディレクトリを変更する === |
=== ユーザーのログイン名やホームディレクトリを変更する === |
||
191行目: | 200行目: | ||
# usermod -l ''newname'' ''oldname'' |
# usermod -l ''newname'' ''oldname'' |
||
− | {{Warning|ユーザー名を変更するときは、変更対象のユーザーでログインしていないことを確認してください。新しい tty を開いて (例: {{ic|Ctrl+Alt+F6}}) root としてログインするか、他のユーザから [[一 |
+ | {{Warning|ユーザー名を変更するときは、変更対象のユーザーでログインしていないことを確認してください。新しい tty を開いて (例: {{ic|Ctrl+Alt+F6}}) root としてログインするか、他のユーザから [[アプリケーション一覧/セキュリティ#管理者権限|root に昇格]]してください。''usermod'' を使うことで間違えてユーザー名を変更することを防ぐことができます。}} |
ユーザー名の変更は [[#ユーザー管理の他の例|usermod]] コマンドを使って正しく行えば安全かつ簡単です。ユーザーが同じ名前のグループに属している場合、[[#グループ管理|groupmod]] コマンドで変更できます。 |
ユーザー名の変更は [[#ユーザー管理の他の例|usermod]] コマンドを使って正しく行えば安全かつ簡単です。ユーザーが同じ名前のグループに属している場合、[[#グループ管理|groupmod]] コマンドで変更できます。 |
||
230行目: | 239行目: | ||
ユーザのログインシェルを変更するには: |
ユーザのログインシェルを変更するには: |
||
− | # usermod -s ''/bin/bash'' ''username'' |
+ | # usermod -s ''/usr/bin/bash'' ''username'' |
{{Tip|[[AUR]] のパッケージ {{AUR|adduser}} には ''useradd''、''chfn''、''passwd'' を対話式に行うことができる ''adduser'' スクリプトが入っています。{{Bug|32893}} も参照してください。}} |
{{Tip|[[AUR]] のパッケージ {{AUR|adduser}} には ''useradd''、''chfn''、''passwd'' を対話式に行うことができる ''adduser'' スクリプトが入っています。{{Bug|32893}} も参照してください。}} |
||
236行目: | 245行目: | ||
== ユーザーデータベース == |
== ユーザーデータベース == |
||
− | ローカルユーザの情報はプレーンテキストの {{ic|/etc/passwd}} ファイルに保存されます。このファイル内の各行は1つのユーザアカウントを表しており、7つのフィールドがコン |
+ | ローカルユーザの情報はプレーンテキストの {{ic|/etc/passwd}} ファイルに保存されます。このファイル内の各行は1つのユーザアカウントを表しており、7つのフィールドがコロンで区切られて記述されています。 |
''account:password:UID:GID:GECOS:directory:shell'' |
''account:password:UID:GID:GECOS:directory:shell'' |
||
248行目: | 257行目: | ||
* {{ic|''GECOS''}} はオプションのフィールドで、ユーザの情報を格納するために使用されます。通常、このフィールドには完全なユーザ名が含まれますが、このフィールドは ''finger'' などのサービスによって使用されたり、[[#これらのデータベースに関連した他のツール|chfn]] コマンドによって管理されたりする可能性があります。このフィールドは任意で、空白のままにしておくこともできます。 |
* {{ic|''GECOS''}} はオプションのフィールドで、ユーザの情報を格納するために使用されます。通常、このフィールドには完全なユーザ名が含まれますが、このフィールドは ''finger'' などのサービスによって使用されたり、[[#これらのデータベースに関連した他のツール|chfn]] コマンドによって管理されたりする可能性があります。このフィールドは任意で、空白のままにしておくこともできます。 |
||
* {{ic|''directory''}} は、{{ic|$HOME}} 環境変数を設定するためにログインコマンドによって使用されます。独自のユーザを持ついくつかのサービスは {{ic|/}} を使用しますが、通常ユーザは普通 {{ic|/home}} 下のディレクトリを使用します。 |
* {{ic|''directory''}} は、{{ic|$HOME}} 環境変数を設定するためにログインコマンドによって使用されます。独自のユーザを持ついくつかのサービスは {{ic|/}} を使用しますが、通常ユーザは普通 {{ic|/home}} 下のディレクトリを使用します。 |
||
− | * {{ic|''shell''}} はユーザのデフォルト[[コマンドシェル]]へのパスです。このフィールドはオプションで、デフォルトは {{ic|/bin/bash}} となります。 |
+ | * {{ic|''shell''}} はユーザのデフォルト[[コマンドシェル]]へのパスです。このフィールドはオプションで、デフォルトは {{ic|/usr/bin/bash}} となります。 |
例: |
例: |
||
− | archie:x:1001:1003:Archie,''some comment here'',,:/home/archie:/bin/bash |
+ | archie:x:1001:1003:Archie,''some comment here'',,:/home/archie:/usr/bin/bash |
この例の意味は次のとおりです: ユーザ は {{ic|archie}} で、パスワードは {{ic|/etc/shadow}} に保存されており、UID は 1001 で、プライマリグループは 1003。Archie は完全な名前で、このアカウントに関連付けられたコメントが記入されています。このユーザのホームディレクトリは {{ic|/home/archie}} で、[[Bash]] を使用しています。 |
この例の意味は次のとおりです: ユーザ は {{ic|archie}} で、パスワードは {{ic|/etc/shadow}} に保存されており、UID は 1001 で、プライマリグループは 1003。Archie は完全な名前で、このアカウントに関連付けられたコメントが記入されています。このユーザのホームディレクトリは {{ic|/home/archie}} で、[[Bash]] を使用しています。 |
||
260行目: | 269行目: | ||
# pwck -s |
# pwck -s |
||
− | {{Warning|{{Pkg|filesystem}} パッケージの新しいリリースがインストールされた際に、Arch Linux のデフォルトのファイルが |
+ | {{Warning|{{Pkg|filesystem}} パッケージの新しいリリースがインストールされた際に、Arch Linux のデフォルトのファイルが [[pacnew ファイル]]として作成されます。Pacman が、アクションを促すメッセージを出力しない限り、これらの ''.pacnew'' ファイルは無視/削除できます (そして、そうすべきです)。必要な新しいデフォルトユーザとグループは、必要に応じて {{man|8|systemd-sysusers}} またはパッケージのインストールスクリプトによって追加/再追加されます。}} |
== 自動整合性チェック == |
== 自動整合性チェック == |
||
394行目: | 403行目: | ||
! グループ || 影響を受けるファイル || 目的 |
! グループ || 影響を受けるファイル || 目的 |
||
|- |
|- |
||
− | | audio || {{ic|/dev/audio}}, {{ic|/dev/snd/*}}, {{ic|/dev/rtc0}} || 全てのセッションでのサウンドハードウェアへの直接アクセス。リモートセッションで [[ALSA]] と [[OSS]] を動作させるに |
+ | | audio || {{ic|/dev/audio}}, {{ic|/dev/snd/*}}, {{ic|/dev/rtc0}} || 全てのセッションでのサウンドハードウェアへの直接アクセス。リモートセッションで [[ALSA]] と [[OSS]] を動作させるために未だに必要になりますが ([[ALSA#ユーザー権限]] を参照)、そうするつもりでない場合にはこのグループを使用することは推奨されません。他の特定のディストリビューションとは異なり、このグループは[[リアルタイムプロセス管理#PAM の設定|リアルタイム権限]]を与えるために使用されていません。 |
|- |
|- |
||
| disk || {{ic|/dev/sd[a-zA-Z]*[1-9]*}} || {{ic|optical}}、{{ic|floppy}}、{{ic|storage}} など他のグループによる影響を受けないブロックデバイスへのアクセス。 |
| disk || {{ic|/dev/sd[a-zA-Z]*[1-9]*}} || {{ic|optical}}、{{ic|floppy}}、{{ic|storage}} など他のグループによる影響を受けないブロックデバイスへのアクセス。 |
||
431行目: | 440行目: | ||
| mem || || |
| mem || || |
||
|- |
|- |
||
− | | network || || デフォルトで使用されません。NetworkManager を使用する権限を与える場合などに使えます ([[NetworkManager#PolicyKit パーミッション |
+ | | network || || デフォルトで使用されません。NetworkManager を使用する権限を与える場合などに使えます ([[NetworkManager#PolicyKit のパーミッションをセットアップする]]を参照)。 |
|- |
|- |
||
| power || || |
| power || || |
||
446行目: | 455行目: | ||
{{man|1|getent}} を使用することで特定のレコードを読み出すことができます。 |
{{man|1|getent}} を使用することで特定のレコードを読み出すことができます。 |
||
− | + | $ getent group tty |
|
[[#ユーザーデータベース]]で警告されているように、このようなデータベースを変更する際には、{{ic|passwd}} や {{ic|chfn}} といった特定のユーティリティを使うほうが良いです。それでもやはり、直接編集するほうが良い場合もあります。そのような場合のために {{ic|vipw}} や {{ic|vigr}} が提供されています。これらのツールはデータベースをロックして同時に編集されるのを防ぐので、一般的なテキストエディタよりもこれらの専用のエディターを使うことが強く推奨されます。また、これらのツールは無効なエントリや構文エラーを防止します。Arch Linux ではシャドウデータベースの変更するために {{pkg|util-linux}} の {{ic|vipw -s}} や {{ic|vigr -s}} よりも特定のツール (''chage'' など) の使用を推奨していることに注意してください。{{bug|31414}} も参照してください。 |
[[#ユーザーデータベース]]で警告されているように、このようなデータベースを変更する際には、{{ic|passwd}} や {{ic|chfn}} といった特定のユーティリティを使うほうが良いです。それでもやはり、直接編集するほうが良い場合もあります。そのような場合のために {{ic|vipw}} や {{ic|vigr}} が提供されています。これらのツールはデータベースをロックして同時に編集されるのを防ぐので、一般的なテキストエディタよりもこれらの専用のエディターを使うことが強く推奨されます。また、これらのツールは無効なエントリや構文エラーを防止します。Arch Linux ではシャドウデータベースの変更するために {{pkg|util-linux}} の {{ic|vipw -s}} や {{ic|vigr -s}} よりも特定のツール (''chage'' など) の使用を推奨していることに注意してください。{{bug|31414}} も参照してください。 |
||
+ | {{TranslationStatus|Users and groups|2024-07-28|812768}} |
||
− | |||
− | {{TranslationStatus|Users and groups|2022-10-16|749891}} |
2024年7月28日 (日) 23:11時点における最新版
関連記事
GNU/Linux のユーザーとグループは、アクセス制御のために使われています — つまり、システムのファイル、ディレクトリ、周辺機器へのアクセスのコントロールに使われます。Linux は比較的シンプルかつ粗っぽいアクセス制御メカニズムをデフォルトで提供します。高度な制御については、ACL や ケイパビリティ、PAM#設定方法を見て下さい。
目次
概要
ユーザーとはコンピュータを使う全ての人のことです。ここで、名前がユーザーを表すことを説明しましょう。名前は Mary や Bill という風につけられ、実名のかわりに Dragonlady や Pirate といった名前を使うことができます。重要なのはコンピュータはそれぞれのアカウントに名前をつけていて、人々がコンピュータを使うためのアクセスを得るために名前を使うということです。システムサービスによっては制限・特権ユーザーアカウントを使って動作させることもあります。
特定の方法でアクセスを制限することでセキュリティのためにユーザーの管理が行われます。スーパーユーザー (root) はオペレーティングシステムと設定全てにアクセスすることができます。そのため管理用途だけに使われることが想定されています。特権がないユーザーはいくつかのプログラムによって制御された特権昇格を行うことが可能です。
作成するアカウントにそれぞれ異なる名前を使えば、人々は複数のアカウントを持つことが可能です。さらに、"root" など、使うことができない予約済みの名前も存在します。
ユーザーは"グループ"にまとめることができ、グループに入ることでユーザーはグループで認められた特権的アクセスを利用することができます。
パーミッションと所有権
In UNIX Everything is a File より:
- UNIX オペレーティングシステムはデザイン、インターフェイス、文化と革命を形作った統一のアイデアとコンセプトを具体化しています。おそらくその中で一番重要なマントラが"全てのものはファイルである"であり、UNIX を定義付けるポイントとして広く受け取られています。
- このキーデザイン原理の構成は統一パラダイムの提供による幅広い入出力のアクセスです: ドキュメント、ディレクトリ、ハードドライブ、CD-ROM、キーボード、プリンター、モニター、ターミナル、インタープロセス、ネットワーク。トリックはこれらリソース全てに対して共通のアブストラクションを提供することで、UNIX の父たちは"ファイル"と呼びました。全ての"ファイル"が同じ API を使って扱われることにより、同じ基本的なコマンドセットを使ってディスク、キーボード、ドキュメント、ネットワークデバイスへの読み書きができます。
Extending UNIX File Abstraction for General-Purpose Networking より:
- UNIX とその互換オペレーティングシステムで提供されている、基礎的でとてもパワフルで一貫性のあるアブストラクションがファイルアブストラクションです。多くの OS サービスとデバイスインターフェイスはアプリケーションにファイルやファイルシステムをあたえることで実装されています。これによって既存のアプリケーションの新しい利用ができるようになり力を引き出すことができるようになります — 固有の使用目的で設計されたシンプルなツールが、UNIX ファイルアブストラクションを使って、新しい方法で利用されます。cat のような、ファイルの読み込みと標準出力への内容のアウトプットができるシンプルなツールを特別なデバイスファイル、典型的に
/dev
ディレクトリ下のファイルを通して、I/O デバイスからの読み書きに使うことが可能なのです。多くのシステムで、録音と再生がそれぞれ次のコマンドでできます、"cat /dev/audio > myfile
" と "cat myfile > /dev/audio
"。
GNU/Linux において全てのファイルは1つのユーザーと1つのグループによって所有されます。加えて、アクセス許可の3つのタイプが存在します: 読み込み、書き込み、実行です。ファイルの所有ユーザー、所有グループ、(所有権をもっていない)第三者に対してそれぞれ異なるアクセス許可を適用することが可能です。ls コマンドによってファイルの所有者とパーミッションを確認できます:
$ ls -l /boot/
total 13740 drwxr-xr-x 2 root root 4096 Jan 12 00:33 grub -rw-r--r-- 1 root root 8570335 Jan 12 00:33 initramfs-linux-fallback.img -rw-r--r-- 1 root root 1821573 Jan 12 00:31 initramfs-linux.img -rw-r--r-- 1 root root 1457315 Jan 8 08:19 System.map26 -rw-r--r-- 1 root root 2209920 Jan 8 08:19 vmlinuz-linux
最初の列にファイルのパーミッションが表示されます (例えば、ファイル initramfs-linux.img
のパーミッションは -rw-r--r--
)。3、4列目にはファイルの所有ユーザーとグループがそれぞれ示されます。この例では、全てのファイルは root ユーザーと root グループによって所有されています。
$ ls -l /media/
total 16 drwxrwx--- 1 root vboxsf 16384 Jan 29 11:02 sf_Shared
この例では、sf_Shared
ディレクトリは root ユーザーと vboxsf グループによって所有されています。stat コマンドを使うことでもファイルの所有者とパーミッションを確認することができます:
所有ユーザー:
$ stat -c %U /media/sf_Shared/
root
所有グループ:
$ stat -c %G /media/sf_Shared/
vboxsf
アクセス権限:
$ stat -c %A /media/sf_Shared/
drwxrwx---
アクセス許可は3つのグループの文字で表示され、それぞれ所有ユーザー、所有グループ、第三者のパーミッションを表しています。例えば、-rw-r--r--
はファイルの所有者は読み込みと書き込みが可能で、実行はできない (rw-
) ことを示していて、さらに所有グループに属しているユーザーとその他のユーザーは読み込みしかできない (r--
と r--
) ことを示しています。一方、drwxrwx---
はファイルの所有者と所有グループに属すユーザーが読み込み・書き込み・実行の全てができ (rwx
と rwx
)、他のユーザーはアクセスを拒否される (---
) ことを示しています。一番最初の文字はファイルのタイプです。
あるユーザーやグループによって所有されているファイルを一覧するには find コマンドを使います:
# find / -group groupname
# find / -group groupnumber
# find / -user user
ファイルの所有ユーザーやグループは chown コマンドで変更できます。ファイルのアクセス許可を変更するコマンドは chmod です。
詳しくは chown(1)、chmod(1)、Linux file permissions を見て下さい。
Shadow
Arch Linux のユーザー、グループおよびパスワードの管理ツールは、base メタパッケージ の依存関係である shadow パッケージから取得されます。
ファイル一覧
ファイル | 目的 |
---|---|
/etc/shadow |
セキュアなユーザーアカウント情報 |
/etc/passwd |
ユーザーアカウント情報 |
/etc/gshadow |
グループアカウントの暗号化された情報 |
/etc/group |
ユーザーが属するグループの定義 |
ユーザー管理
現在システムにログインしているユーザーを一覧するには who コマンドを使います。全てのユーザーアカウントとユーザーデータベースに保存されているプロパティを確認するには、root で passwd -Sa
を実行してください。出力されるフォーマットについては passwd(1) の説明を読んでください。
新しいユーザーを追加するときは useradd コマンドを使って下さい:
# useradd -m -G additional_groups -s login_shell username
-m
/--create-home
- ユーザのホームディレクトリを
/home/username
に作成します。このディレクトリにはスケルトンディレクトリ内のファイルが配置されます。作成されるファイルは新しいユーザによって所有されます。 -G
/--groups
- ユーザの所属する補助グループのコンマで区切られたリストです。デフォルトでは、ユーザは主グループ (the initial group) にのみ所属します。
-s
/--shell
- ユーザのログインシェルへのパス。Bash 以外のものを指定する場合、そのシェルがインストールされていることを確認してください。新しく作成されたユーザのデフォルトシェルは
/etc/default/useradd
で設定できます。
初期のログイングループを名前か番号で指定する場合、すでに存在しているグループを参照しなければなりません。指定しない場合、useradd の挙動は /etc/login.defs
内の USERGROUPS_ENAB
変数に依存します。デフォルトの挙動 (USERGROUPS_ENAB yes
) では、ユーザ名と同じ名前のグループを作成します。
特定のサービスのためにユーザアカウントを作成する場合など、ログインシェルが機能してほしくない場合、/usr/bin/nologin
をログインシェルとして指定することで、ログインを丁重に拒否することができます (nologin(8) を見てください)。
サポートされている他のオプションについては useradd(8) を見てください。
ユーザーを追加する例
以下のコマンドは、archie
という名前の新しいユーザを追加し、ホームディレクトリを作成し、グループ、ディレクトリ名、使用されるシェル、それ他のパラメータに関してはすべてデフォルト値を使用します:
# useradd -m archie
新しく作成したユーザ archie
をパスワードで保護する必要はありませんが、パスワードで保護することが強く推奨されます:
# passwd archie
上記の useradd コマンドは、同時に archie
という名前のグループも自動的に作成し、そのグループを archie
のデフォルトのグループとします。ユーザを作成する際に各ユーザに (そのユーザと同じ名前の) 独自のグループを持たせることが推奨されています。
-g
オプションを使うことで別のグループをデフォルトグループにすることもできますが、マルチユーザシステムにおいてすべてのユーザが単一のデフォルトグループ (users
など) を使用することは推奨されていません。その理由は、特定のグループのユーザで書き込みアクセス権を共有する方法は、ユーザの umask 値を 002
に設定するというものですが、これは、あなたが作成したすべてのファイルはデフォルトで常にデフォルトグループによってアクセス可能であることを意味するからです。User Private Groups も参照してください。ユーザが特定のグループのメンバーになる必要がある場合、そのユーザを作成する際にそのグループを補助グループとして指定してください。
推奨されるシナリオ (デフォルトグループの名前がユーザ名と同じ場合) では、デフォルトですべてのファイルはそれらのファイルを作成したユーザのみが書き込み可能です。特定のグループに書き込みアクセスを許可したい場合、そのグループに属している全員に対して共有ファイル/ディレクトリを書き込み可能にすることで可能です。ディレクトリにグループの setgid ビットを設定することで、親ディレクトリを所有するグループに所有グループを自動的に固定することができます:
# chmod g+s our_shared_directory
そうしない場合、ファイル作成者のデフォルトグループ (通常、ユーザ名と同じ名前) が使用されます。
一時的に GID を変更する必要がある場合、newgrp コマンドを使用することで実行時にユーザのフォルトの GID を他の GID に変更できます。例えば、newgrp groupname
を実行したあと、そのユーザによって作成されたファイルは (再ログインの必要とせずに) groupname
の GID と関連付けられます。デフォルトの GID に戻すには、グループ名無しで newgrp を実行してください。
ユーザーのデフォルト設定を変更する
新しいアカウントを作成する際に用いられるデフォルト値は /etc/default/useradd
で設定されており、useradd --defaults
コマンドで確認できます。例えば、SHELL=/usr/bin/shell
を設定すると、デフォルトのシェルをグローバルに変更できます。また、-s
/--shell
オプションを使えば、アカウント毎にシェルを設定できます。chsh -l
を使えば、有効なログインシェルを一覧表示できます。
/etc/skel
ディレクトリでは、新しく作成したユーザーのホームディレクトリへ追加するファイルを指定することもできます。これは、デスクトップ環境のような動作を実現するために設定ファイルを手動で編集する必要のあるミニマリズムなウィンドウマネージャにおいて便利です。例えば、新しく作成する全ユーザーに対してデフォルトのショートカットをセットアップするには:
# mkdir /etc/skel/.config # cp ~archie/.config/sxhkd /etc/skel/.config
また、ディスプレイマネージャ#セッションとして ~/.xinitrc を実行 では、全ユーザーに対してディスプレイマネージャで xinitrc をオプションとして追加する方法について説明されています。
システムユーザーを追加する例
システムユーザーは、異なるユーザのもとでプロセス/デーモンを実行するために使用できます。(chown を使うなどして) ファイルやディレクトリを保護するなど、コンピュータの堅牢化において様々な使用例があります。
以下のコマンドで、シェルへのアクセス権が無く、home
ディレクトリも持たないシステムユーザが作成されます (オプションで、-U
パラメータを追加するとユーザと同じ名前のグループも作成し、ユーザをそのグループに追加します):
# useradd --system -s /usr/bin/nologin username
システムユーザが特定のユーザ ID およびグループ ID を必要とする場合、ユーザの作成時に -u
/--uid
オプションと -g
/--gid
オプションで ID を指定してください:
# useradd --system -u 850 -g 850 -s /usr/bin/nologin username
ユーザーのログイン名やホームディレクトリを変更する
ユーザーのホームディレクトリを変更するには:
# usermod -d /my/new/home -m username
このコマンドの -m
オプションは、自動的に新しいホームディレクトリを作成し、旧ホームディエレクトリ内の内容をそこへ移動します。
ユーザのログイン名を変更するには:
# usermod -l newname oldname
ユーザー名の変更は usermod コマンドを使って正しく行えば安全かつ簡単です。ユーザーが同じ名前のグループに属している場合、groupmod コマンドで変更できます。
または、/etc/passwd
ファイルを直接編集する方法もあります。詳しくは #ユーザーデータベース を見てください。
また、以下のことにも気をつけてください:
- sudo を使用する場合、
/etc/sudoers
を更新して新しいユーザー名を反映させてください (root で visudo コマンドを使用)。 - 個人用の crontab は、
/var/spool/cron
内のユーザーファイルを古い名前から新しい名前に変更し、crontab -e
を開いて相対パスを変更してファイルのパーミッションも調整する必要があります。 ~/.wine/drive_c/users
、~/.local/share/applications/wine/Programs
などの中にある Wine の個人用フォルダ/ファイルのコンテンツは手動で名前を変更/編集する必要があります。- Enigmail など特定の Thunderbird アドオンは再インストールが必要かもしれません。
- ホームディレクトリの絶対パス (つまり
/home/oldname
) を使っているファイル (デスクトップショートカット、シェルスクリプトなど) は、ホームディレクトリの名前の変更を反映させる必要があります。シェルスクリプトでこういう問題が起こらないようにするには、ホームディレクトリを指定するときに~
や$HOME
変数を使いましょう。 - また
/etc/
の設定ファイルで絶対パスを使っている場合は忘れずに編集してください (Samba や CUPS など)。どのファイルを編集すればいいかわからないときは grep コマンドを使います:grep -r old_user *
。
ユーザー管理の他の例
GECOS コメントにユーザ情報を入力するには (フルのユーザ名など)、以下を実行してください:
# chfn username
(この方法では chfn はインタラクティブモードで実行します)。
あるいは、以下のように自由に GECOS コメントを設定することもできます:
# usermod -c "Comment" username
ユーザーのパスワードを期限切れにして、次にログインした時に新しいパスワードを作るよう求めたいときは、次を実行してください:
# chage -d 0 username
userdel コマンドでユーザアカウントを削除できます:
# userdel -r username
userdel の -r
オプションは、ユーザのホームディレクトリとメールスプールも削除します。
ユーザのログインシェルを変更するには:
# usermod -s /usr/bin/bash username
ユーザーデータベース
ローカルユーザの情報はプレーンテキストの /etc/passwd
ファイルに保存されます。このファイル内の各行は1つのユーザアカウントを表しており、7つのフィールドがコロンで区切られて記述されています。
account:password:UID:GID:GECOS:directory:shell
それぞれのフィールドの意味は以下のとおりです:
account
はユーザ名です。このフィールドを空白にすることはできません。標準的な *NIX の命名規則が適用されます。password
はユーザのパスワードです。UID
はユーザ ID の数値です。Arch では、(サービスとは異なる) 一般ユーザの (root の後の) 最初のログイン名の UID はデフォルトで 1000 となります。その後のユーザの UID エントリは 1000 より大きい必要があります。GID
はユーザのプライマリグループ ID の数値です。GID の数値は /etc/group にリストアップされています。GECOS
はオプションのフィールドで、ユーザの情報を格納するために使用されます。通常、このフィールドには完全なユーザ名が含まれますが、このフィールドは finger などのサービスによって使用されたり、chfn コマンドによって管理されたりする可能性があります。このフィールドは任意で、空白のままにしておくこともできます。directory
は、$HOME
環境変数を設定するためにログインコマンドによって使用されます。独自のユーザを持ついくつかのサービスは/
を使用しますが、通常ユーザは普通/home
下のディレクトリを使用します。shell
はユーザのデフォルトコマンドシェルへのパスです。このフィールドはオプションで、デフォルトは/usr/bin/bash
となります。
例:
archie:x:1001:1003:Archie,some comment here,,:/home/archie:/usr/bin/bash
この例の意味は次のとおりです: ユーザ は archie
で、パスワードは /etc/shadow
に保存されており、UID は 1001 で、プライマリグループは 1003。Archie は完全な名前で、このアカウントに関連付けられたコメントが記入されています。このユーザのホームディレクトリは /home/archie
で、Bash を使用しています。
pwck を使うことで、ユーザデータベースの整合性を検証することができます。また、このコマンドはユーザのリストを GID によってソートします (比較の際に便利でしょう):
# pwck -s
自動整合性チェック
pwck
や grpck
を自分で実行する代わりに、Systemd タイマー shadow.timer
は shadow.service
を毎日実行します (shadow.timer
は shadow パッケージの一部であり、このパッケージのインストール時に自動で有効化されます)。shadow.service
は pwck(8) と grpck(8) を実行してパスワードファイルとグループファイルの両方の整合性を検証します。
不整合が報告された場合、グループは vigr(8) コマンドで、ユーザは vipw(8) コマンドで編集できます。これは、これらのコマンドがデータベースが編集されないようロックするという観点で、追加の保護を提供します。デフォルトのテキストエディタは vi ですが、EDITOR
環境変数を設定することで他のエディタを使用できます。
グループ管理
/etc/group
は、システム上のグループを定義するファイルです (詳細は group(5) を見てください)。このファイルの仲間に gshadow
というものもありますが、これはめったに使用されません。詳細は gshadow(5) を見てください。
groups コマンドでグループのメンバーを表示できます:
$ groups user
user
が省略された場合、現在のユーザが属しているグループの名前が表示されます。
id コマンドは追加の詳細情報も出力します (ユーザの UID や関連付けられた GID など):
$ id user
システム上の全てのグループを一覧するには:
$ cat /etc/group
groupadd コマンドで新しいグループを作成できます:
# groupadd group
そしてユーザーをグループに追加するには gpasswd コマンドを使います (エラーについては FS#58262 を見てください):
# gpasswd -a user group
あるいは、usermod でユーザをグループに追加できます (additional_groups
はコンマで区切られたリストに置き換えてください):
# usermod -aG additional_groups username
groupmod コマンドで既存のグループを変更できます。例えば、old_group
グループの名前を new_group
に変更するには:
# groupmod -n new_group old_group
既存のグループを削除するには:
# groupdel group
グループからユーザを削除するには:
# gpasswd -d user group
grpck コマンドを使用することでシステムのグループファイルの整合性を検証できます。
グループ一覧
このセクションでは filesystem パッケージに含まれている主要なグループの用途を説明します。他にもグループは存在し、パッケージがインストールされたときに適当な GID を使って作成されます。詳しくはグループに関連するソフトウェアのページを見てください。
ユーザーグループ
ワークステーション/デスクトップの非 root ユーザはしばしば、ハードウェア周辺機器にアクセスできるようにしたりシステム管理を楽にしたりするために、以下のグループのどれかに追加する必要があります:
グループ | 影響を受けるファイル | 目的 |
---|---|---|
adm | 管理者グループ。一般的に、保護されたログに読み込みアクセスするために使用されます。このグループは journal ファイルへの完全な読み込みアクセス権を持ちます。 | |
ftp | /srv/ftp/ |
FTP サーバにより提供されているファイルへのアクセス。 |
games | /var/games |
一部のゲームソフトウェアへのアクセス。 |
http | /srv/http/ |
HTTP サーバによって提供されているファイルへのアクセス。 |
log | syslog-ng によって作成された /var/log/ にあるログファイルへのアクセス。
| |
rfkill | /dev/rfkill |
ワイヤレスデバイスの電源状態の制御権 (rfkill によって使用されます)。 |
sys | CUPS でのプリンタの管理権。 | |
systemd-journal | /var/log/journal/* |
systemd のログへの読み取り専用アクセスを提供します。adm や wheel の代わりとして使用されます [1]。このグループに属さない場合、ユーザによって生成されたメッセージのみが表示されます。
|
uucp | /dev/ttyS[0-9]+ , /dev/tts/[0-9]+ , /dev/ttyUSB[0-9]+ , /dev/ttyACM[0-9]+ , /dev/rfcomm[0-9]+ |
RS-232 シリアルポートや、それらに接続されているデバイス。 |
wheel | 管理者グループ。一般的に、管理者アクションを実行する権限を与えるために使用されます。このグループは journal ファイルへの完全な読み取りアクセス権と、CUPS でプリンタを管理する権限を持ちます。また、sudo や su ユーティリティへのアクセス権を与えるためにも使用されます (どちらのユーティリティもデフォルトではこのグループを使用しません)。 |
システムグループ
以下のグループはシステムのために使用されます。これらのグループへのユーザの割り当ては、限られた目的においてのみ必要になります:
グループ | 影響を受けるファイル | 目的 |
---|---|---|
dbus | dbus によって内部的に使用されます。 | |
kmem | /dev/port , /dev/mem , /dev/kmem |
|
locate | /usr/bin/locate , /var/lib/locate , /var/lib/mlocate , /var/lib/slocate |
Locate を見てください。 |
lp | /dev/lp[0-9]* , /dev/parport[0-9]* |
パラレルポートのデバイスへのアクセス (プリンタなど)。 |
/usr/bin/mail |
||
nobody | 非特権グループ。 | |
proc | /proc/pid/ |
proc ファイルシステムの hidepid= マウントオプションによって制限されているプロセス情報の取得を許可されているグループ。このグループは gid= マウントオプションによって明示的に設定されなければなりません。
|
root | /* |
完全なシステムの管理と制御 (root, admin)。 |
smmsp | sendmail グループ。 | |
tty | /dev/tty , /dev/vcc , /dev/vc , /dev/ptmx |
|
utmp | /run/utmp , /var/log/btmp , /var/log/wtmp |
systemd 以前のグループ
Arch が systemd に移行する前は、デバイスにアクセスできるようにするためにユーザを以下のグループに手動で追加する必要がありました。この方法は非推奨となっており、現在は udev がデバイスに uaccess
タグを付け、現在どのセッションがアクティブであるかに応じて logind が ACL を使って動的にユーザに権限を割り当てています。この仕組みを機能させるにはセッションが破壊されないようにしなければなりません (一般的なトラブルシューティング#セッションのパーミッションを参照)。
グループによってはユーザーを追加しなくてはいけない例外も存在します: 例えば、ログインしていない状態でユーザーからデバイスにアクセスしたい場合など。ただし、グループにユーザーを追加すると機能が破壊されることもあるので注意してください (例えば audio
グループを使用するとユーザーの高速切り替えが無効化されソフトウェアミキシングができなくなります)。
グループ | 影響を受けるファイル | 目的 |
---|---|---|
audio | /dev/audio , /dev/snd/* , /dev/rtc0 |
全てのセッションでのサウンドハードウェアへの直接アクセス。リモートセッションで ALSA と OSS を動作させるために未だに必要になりますが (ALSA#ユーザー権限 を参照)、そうするつもりでない場合にはこのグループを使用することは推奨されません。他の特定のディストリビューションとは異なり、このグループはリアルタイム権限を与えるために使用されていません。 |
disk | /dev/sd[a-zA-Z]*[1-9]* |
optical 、floppy 、storage など他のグループによる影響を受けないブロックデバイスへのアクセス。
|
floppy | /dev/fd[0-9]* |
フロッピードライブへのアクセス。 |
input | /dev/input/event[0-9]* , /dev/input/mouse[0-9]* |
入力デバイスへのアクセス。systemd 215 で導入されました [2]。 |
kvm | /dev/kvm |
KVM を使用する仮想マシンへのアクセス。 |
optical | /dev/sr[0-9] , /dev/sg[0-9] |
CD や DVD ドライブなどの光学デバイスへのアクセス。 |
scanner | /var/lock/sane |
スキャナーハードウェアへのアクセス。 |
storage | /dev/st[0-9]*[lma]* , /dev/nst[0-9]*[lma]* |
USB ハードドライブ、フラッシュ/ジャンプドライブ、MP3 プレイヤーなどのリームーバブルドライブへのアクセス権を得るために使用されます。ユーザがストレージデバイスをマウントできるようにします。[3]
現在では、カスタムの udev ルールが存在しない場合にテープにダイレクトアクセスするためだけに使用されます [4][5][6][7]。 また、udisks/udisksctl を通して一部のデバイスを操作するために必要です。 |
video | /dev/fb/0 , /dev/misc/agpgart |
ビデオキャプチャデバイス、2D/3D ハードウェアアクセラレーション、フレームバッファへのアクセス (Xは、このグループに属さなくとも使用可能です)。 |
使われなくなったグループ
以下のグループは現在利用されていません:
グループ | 影響を受けるファイル | 目的 |
---|---|---|
bin | なし | 歴史的に存在していました。 |
daemon | ||
lock | ロックファイルのアクセスのために使用されました。gnokiiAUR などがこれを必要とします。 | |
mem | ||
network | デフォルトで使用されません。NetworkManager を使用する権限を与える場合などに使えます (NetworkManager#PolicyKit のパーミッションをセットアップするを参照)。 | |
power | ||
uuidd | ||
users | (/etc/login.defs で USERGROUPS_ENAB no を設定したり、useradd の -N /--no-user-group オプションを使用したりしてユーザを作成する場合など) ユーザープライベートグループを使用しない場合 (通常、推奨されません) のユーザのプライマリグループです。
|
これらのデータベースに関連した他のツール
getent(1) を使用することで特定のレコードを読み出すことができます。
$ getent group tty
#ユーザーデータベースで警告されているように、このようなデータベースを変更する際には、passwd
や chfn
といった特定のユーティリティを使うほうが良いです。それでもやはり、直接編集するほうが良い場合もあります。そのような場合のために vipw
や vigr
が提供されています。これらのツールはデータベースをロックして同時に編集されるのを防ぐので、一般的なテキストエディタよりもこれらの専用のエディターを使うことが強く推奨されます。また、これらのツールは無効なエントリや構文エラーを防止します。Arch Linux ではシャドウデータベースの変更するために util-linux の vipw -s
や vigr -s
よりも特定のツール (chage など) の使用を推奨していることに注意してください。FS#31414 も参照してください。