「ユーザーとグループ」の版間の差分
(同期) |
(同期) |
||
(4人の利用者による、間の41版が非表示) | |||
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]] |
||
+ | [[fr:Users and groups]] |
||
− | [[fa:کاربران و گروه ها]] |
||
− | [[ |
+ | [[pt:Users and groups]] |
− | [[it:Users and groups]] |
||
[[ru:Users and groups]] |
[[ru:Users and groups]] |
||
− | [[ |
+ | [[zh-hans:Users and groups]] |
− | [[zh-cn:Users and groups]] |
||
− | [[zh-tw:Users and groups]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
{{Related4|DeveloperWiki:UID / GID Database}} |
{{Related4|DeveloperWiki:UID / GID Database}} |
||
− | {{Related| |
+ | {{Related|Sudo}} |
+ | {{Related|Polkit}} |
||
{{Related|ファイルのパーミッションと属性}} |
{{Related|ファイルのパーミッションと属性}} |
||
− | {{Related| |
+ | {{Related|systemd-homed}} |
+ | {{Related|パスワードリカバリ}} |
||
+ | {{Related|アイデンティティ管理}} |
||
{{Related articles end}} |
{{Related articles end}} |
||
− | GNU/Linux |
+ | GNU/Linux のユーザーとグループは、[[Wikipedia:ja:アクセス制御#コンピュータセキュリティのアクセス制御|アクセス制御]]のために使われています — つまり、システムのファイル、ディレクトリ、周辺機器へのアクセスのコントロールに使われます。Linux は比較的シンプルかつ粗っぽいアクセス制御メカニズムをデフォルトで提供します。高度な制御については、[[ACL]] や [[ケイパビリティ]]、[[PAM#設定方法]]を見て下さい。 |
== 概要 == |
== 概要 == |
||
+ | |||
''ユーザー''とはコンピュータを使う全ての人のことです。ここで、名前がユーザーを表すことを説明しましょう。名前は Mary や Bill という風につけられ、実名のかわりに Dragonlady や Pirate といった名前を使うことができます。重要なのはコンピュータはそれぞれのアカウントに名前をつけていて、人々がコンピュータを使うためのアクセスを得るために名前を使うということです。システムサービスによっては制限・特権ユーザーアカウントを使って動作させることもあります。 |
''ユーザー''とはコンピュータを使う全ての人のことです。ここで、名前がユーザーを表すことを説明しましょう。名前は Mary や Bill という風につけられ、実名のかわりに Dragonlady や Pirate といった名前を使うことができます。重要なのはコンピュータはそれぞれのアカウントに名前をつけていて、人々がコンピュータを使うためのアクセスを得るために名前を使うということです。システムサービスによっては制限・特権ユーザーアカウントを使って動作させることもあります。 |
||
− | 特定の方法でアクセスを制限することでセキュリティのためにユーザーの管理が行われます。スーパーユーザー (root) はオペレーティングシステムと設定全てにアクセスすることができます。そのため管理用途だけに使われることが想定されています。特権がないユーザーは |
+ | 特定の方法でアクセスを制限することでセキュリティのためにユーザーの管理が行われます。[[Wikipedia:ja:スーパーユーザー|スーパーユーザー]] (root) はオペレーティングシステムと設定全てにアクセスすることができます。そのため管理用途だけに使われることが想定されています。特権がないユーザーはいくつかのプログラムによって[[アプリケーション一覧/セキュリティ#管理者権限|制御された特権昇格]]を行うことが可能です。 |
作成するアカウントにそれぞれ異なる名前を使えば、人々は複数のアカウントを持つことが可能です。さらに、"root" など、使うことができない予約済みの名前も存在します。 |
作成するアカウントにそれぞれ異なる名前を使えば、人々は複数のアカウントを持つことが可能です。さらに、"root" など、使うことができない予約済みの名前も存在します。 |
||
− | ユーザーは"グループ"に |
+ | ユーザーは"グループ"にまとめることができ、グループに入ることでユーザーはグループで認められた特権的アクセスを利用することができます。 |
{{Note|ビギナーはツールを気をつけて使って下さい、自分のアカウント以外の''既存の''他のユーザーアカウントをいじらないようにしましょう。}} |
{{Note|ビギナーはツールを気をつけて使って下さい、自分のアカウント以外の''既存の''他のユーザーアカウントをいじらないようにしましょう。}} |
||
== パーミッションと所有権 == |
== パーミッションと所有権 == |
||
+ | |||
− | [http://ph7spot.com/musings/in-unix-everything-is-a-file In UNIX Everything is a File] より: |
||
+ | [https://web.archive.org/web/20190816135930/http://ph7spot.com/musings/in-unix-everything-is-a-file In UNIX Everything is a File] より: |
||
:''UNIX オペレーティングシステムはデザイン、インターフェイス、文化と革命を形作った統一のアイデアとコンセプトを具体化しています。おそらくその中で一番重要なマントラが"全てのものはファイルである"であり、UNIX を定義付けるポイントとして広く受け取られています。'' |
:''UNIX オペレーティングシステムはデザイン、インターフェイス、文化と革命を形作った統一のアイデアとコンセプトを具体化しています。おそらくその中で一番重要なマントラが"全てのものはファイルである"であり、UNIX を定義付けるポイントとして広く受け取られています。'' |
||
37行目: | 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 において全てのファイルはユーザーとグループによって所有されます。加えて、アクセス許可の3つのタイプが存在します: 読み込み、書き込み、 |
+ | GNU/Linux において全てのファイルは1つのユーザーと1つのグループによって所有されます。加えて、アクセス許可の3つのタイプが存在します: 読み込み、書き込み、実行です。ファイルの所有ユーザー、所有グループ、(所有権をもっていない)第三者に対してそれぞれ異なるアクセス許可を適用することが可能です。[[ls]] コマンドによってファイルの所有者とパーミッションを確認できます: |
{{hc|$ ls -l /boot/|total 13740 |
{{hc|$ ls -l /boot/|total 13740 |
||
48行目: | 51行目: | ||
-rw-r--r-- 1 root root 1821573 Jan 12 00:31 initramfs-linux.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 1457315 Jan 8 08:19 System.map26 |
||
− | -rw-r--r-- 1 root root 2209920 Jan 8 08:19 vmlinuz-linux |
+ | -rw-r--r-- 1 root root 2209920 Jan 8 08:19 vmlinuz-linux |
+ | }} |
||
− | 最初の |
+ | 最初の列にファイルのパーミッションが表示されます (例えば、ファイル {{ic|initramfs-linux.img}} のパーミッションは {{ic|-rw-r--r--}})。3、4列目にはファイルの所有ユーザーとグループがそれぞれ示されます。この例では、全てのファイルは ''root'' ユーザーと ''root'' グループによって所有されています。 |
{{hc|$ ls -l /media/|total 16 |
{{hc|$ ls -l /media/|total 16 |
||
− | drwxrwx--- 1 root vboxsf 16384 Jan 29 11:02 sf_Shared |
+ | drwxrwx--- 1 root vboxsf 16384 Jan 29 11:02 sf_Shared |
+ | }} |
||
この例では、{{ic|sf_Shared}} ディレクトリは ''root'' ユーザーと ''vboxsf'' グループによって所有されています。stat コマンドを使うことでもファイルの所有者とパーミッションを確認することができます: |
この例では、{{ic|sf_Shared}} ディレクトリは ''root'' ユーザーと ''vboxsf'' グループによって所有されています。stat コマンドを使うことでもファイルの所有者とパーミッションを確認することができます: |
||
59行目: | 64行目: | ||
所有ユーザー: |
所有ユーザー: |
||
− | {{hc|$ stat -c %U /media/sf_Shared/| |
+ | {{hc|$ stat -c %U /media/sf_Shared/| |
+ | root |
||
+ | }} |
||
所有グループ: |
所有グループ: |
||
− | {{hc|$ stat -c %G /media/sf_Shared/| |
+ | {{hc|$ stat -c %G /media/sf_Shared/| |
+ | vboxsf |
||
+ | }} |
||
アクセス権限: |
アクセス権限: |
||
− | {{hc|$ stat -c %A /media/sf_Shared/| |
+ | {{hc|$ stat -c %A /media/sf_Shared/| |
+ | drwxrwx--- |
||
+ | }} |
||
アクセス許可は3つのグループの文字で表示され、それぞれ所有ユーザー、所有グループ、第三者のパーミッションを表しています。例えば、{{ic|-rw-r--r--}} はファイルの所有者は読み込みと書き込みが可能で、実行はできない ({{ic|rw-}}) ことを示していて、さらに所有グループに属しているユーザーとその他のユーザーは読み込みしかできない ({{ic|r--}} と {{ic|r--}}) ことを示しています。一方、{{ic|drwxrwx---}} はファイルの所有者と所有グループに属すユーザーが読み込み・書き込み・実行の全てができ ({{ic|rwx}} と {{ic|rwx}})、他のユーザーはアクセスを拒否される ({{ic|---}}) ことを示しています。一番最初の文字はファイルのタイプです。 |
アクセス許可は3つのグループの文字で表示され、それぞれ所有ユーザー、所有グループ、第三者のパーミッションを表しています。例えば、{{ic|-rw-r--r--}} はファイルの所有者は読み込みと書き込みが可能で、実行はできない ({{ic|rw-}}) ことを示していて、さらに所有グループに属しているユーザーとその他のユーザーは読み込みしかできない ({{ic|r--}} と {{ic|r--}}) ことを示しています。一方、{{ic|drwxrwx---}} はファイルの所有者と所有グループに属すユーザーが読み込み・書き込み・実行の全てができ ({{ic|rwx}} と {{ic|rwx}})、他のユーザーはアクセスを拒否される ({{ic|---}}) ことを示しています。一番最初の文字はファイルのタイプです。 |
||
− | あるユーザーやグループによって所有されているファイルを一覧するには |
+ | あるユーザーやグループによって所有されているファイルを一覧するには [[find]] コマンドを使います: |
− | # find / -group |
+ | # find / -group ''groupname'' |
− | # find / - |
+ | # find / -group ''groupnumber'' |
+ | # find / -user ''user'' |
||
− | ファイルの所有ユーザーやグループは {{ic|chown}} (change owner) コマンドで変更できます。ファイルのアクセス許可を変更するコマンドは {{ic|chmod}} (change mode) です。 |
||
+ | ファイルの所有ユーザーやグループは [[chown]] コマンドで変更できます。ファイルのアクセス許可を変更するコマンドは [[chmod]] です。 |
||
− | 詳しくは [http://linux.die.net/man/1/chown man chown], [http://linux.die.net/man/1/chmod man chmod], や [http://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions Linux file permissions] を見て下さい。 |
||
+ | 詳しくは {{man|1|chown}}、{{man|1|chmod}}、[https://www.linux.com/tutorials/understanding-linux-file-permissions Linux file permissions] を見て下さい。 |
||
− | ==ファイル一覧== |
||
+ | |||
− | {{Warning|以下のファイルを直接編集してはいけません。ロックを正しく使ってデータベースのフォーマットを崩すことを避けるユーティリティが存在します。[[#ユーザー管理]] や [[#グループ管理]] を見て下さい。}} |
||
+ | == Shadow == |
||
+ | |||
+ | Arch Linux のユーザー、グループおよびパスワードの管理ツールは、{{Pkg|base}} [[メタパッケージ]] の依存関係である {{Pkg|shadow}} パッケージから取得されます。 |
||
+ | |||
+ | == ファイル一覧 == |
||
+ | |||
+ | {{Warning|以下のファイルを直接編集しないでください。ロックを正しく使ってデータベースのフォーマットを崩すことを避けるユーティリティが存在します。[[#ユーザー管理]] や [[#グループ管理]] を見て下さい。}} |
||
{| class="wikitable" |
{| class="wikitable" |
||
94行目: | 112行目: | ||
|- |
|- |
||
| {{ic|/etc/group}} || ユーザーが属するグループの定義 |
| {{ic|/etc/group}} || ユーザーが属するグループの定義 |
||
− | |- |
||
− | | {{ic|/etc/sudoers}} || sudo を実行できるユーザーのリスト |
||
− | |- |
||
− | | {{ic|/home/*}} || ホームディレクトリ |
||
|} |
|} |
||
== ユーザー管理 == |
== ユーザー管理 == |
||
− | 現在システムにログインしているユーザーを一覧するには |
+ | 現在システムにログインしているユーザーを一覧するには ''who'' コマンドを使います。全てのユーザーアカウントと[[#ユーザーデータベース|ユーザーデータベース]]に保存されているプロパティを確認するには、root で {{ic|passwd -Sa}} を実行してください。出力されるフォーマットについては {{man|1|passwd}} の説明を読んでください。 |
− | 新しいユーザーを追加するときは |
+ | 新しいユーザーを追加するときは ''useradd'' コマンドを使って下さい: |
− | # useradd -m |
+ | # useradd -m -G ''additional_groups'' -s ''login_shell'' ''username'' |
− | + | ; {{ic|-m}}/{{ic|--create-home}}: ユーザのホームディレクトリを {{ic|/home/''username''}} に作成します。このディレクトリにはスケルトンディレクトリ内のファイルが配置されます。作成されるファイルは新しいユーザによって所有されます。 |
|
+ | ; {{ic|-G}}/{{ic|--groups}}: ユーザの所属する補助グループのコンマで区切られたリストです。デフォルトでは、ユーザは主グループ (the initial group) にのみ所属します。 |
||
− | * {{ic|-g}} でユーザーのイニシャルログイングループのグループ名・ナンバーを定義します; グループ名が存在していなければなりません; グループナンバーが指定された時は、そのナンバーが既存のグループに参照されている必要があります; 指定されなかった場合は、useradd の挙動は {{ic|/etc/login.defs}} 内の {{ic|USERGROUPS_ENAB}} に基づきます。デフォルトの挙動 ({{ic|USERGROUPS_ENAB yes}}) ではユーザー名と同じ名前でグループを作成し、{{ic|GID}} は {{ic|UID}} と同じになります。 |
||
− | + | ; {{ic|-s}}/{{ic|--shell}}: ユーザのログインシェルへのパス。[[Bash]] 以外のものを指定する場合、そのシェルがインストールされていることを確認してください。新しく作成されたユーザのデフォルトシェルは {{ic|/etc/default/useradd}} で設定できます。 |
|
− | * {{ic|-s}} ではユーザーのデフォルトログインシェルのパスとファイル名を定義します; ブートプロセスが完了した後、ここに指定したシェルがデフォルトのログインシェルになります; [[Bash]] 以外のシェルを使うのなら、その選んだシェルのパッケージをインストールしておいてください。 |
||
− | {{Warning|ログインシェルは {{ic|/etc/shells}} に記載されている |
+ | {{Warning|ログインできるようにするには、ログインシェルは {{ic|/etc/shells}} に記載されているものでなければなりません。さもないと、[[PAM]] モジュール {{man|8|pam_shells}} はログイン要求を拒否します。}} |
− | {{Note|新しく作成 |
+ | {{Note|新しく作成されたユーザには、[[#ユーザーを追加する例]] で説明されているように ''passwd'' を使ってパスワードを設定しなければなりません。}} |
+ | 初期のログイングループを名前か番号で指定する場合、すでに存在しているグループを参照しなければなりません。指定しない場合、''useradd'' の挙動は {{ic|/etc/login.defs}} 内の {{ic|USERGROUPS_ENAB}} 変数に依存します。デフォルトの挙動 ({{ic|USERGROUPS_ENAB yes}}) では、ユーザ名と同じ名前のグループを作成します。 |
||
− | {{Tip|特定のサービス用にユーザーを作成する必要がある場合、シェルには {{ic|/usr/bin/nologin}} を使って下さい。詳しくは {{man|8|nologin}} を参照。}} |
||
+ | |||
+ | 特定のサービスのためにユーザアカウントを作成する場合など、ログインシェルが機能してほしくない場合、{{ic|/usr/bin/nologin}} をログインシェルとして指定することで、ログインを丁重に拒否することができます ({{man|8|nologin}} を見てください)。 |
||
+ | |||
+ | サポートされている他のオプションについては {{man|8|useradd}} を見てください。 |
||
=== ユーザーを追加する例 === |
=== ユーザーを追加する例 === |
||
− | + | 以下のコマンドは、{{ic|archie}} という名前の新しいユーザを追加し、ホームディレクトリを作成し、グループ、ディレクトリ名、使用されるシェル、それ他のパラメータに関してはすべてデフォルト値を使用します: |
|
− | # useradd -m |
+ | # useradd -m archie |
+ | 新しく作成したユーザ {{ic|archie}} をパスワードで保護する必要はありませんが、パスワードで保護することが強く推奨されます: |
||
− | {{Tip|ユーザーをグループに追加するのに躊躇する必要はありません。特定のアプリケーションをインストールしたり、何らかの設定をする場合など、必要に応じてユーザーをグループに追加する機会があるはずです。}} |
||
− | 新しく作成したユーザー {{ic|archie}} にパスワードを設定する必要は必ずしもありませんが、設定することを強く推奨します: |
||
# passwd archie |
# passwd archie |
||
+ | 上記の ''useradd'' コマンドは、同時に {{ic|archie}} という名前のグループも自動的に作成し、そのグループを {{ic|archie}} のデフォルトのグループとします。ユーザを作成する際に各ユーザに (そのユーザと同じ名前の) 独自のグループを持たせることが推奨されています。 |
||
− | {{Tip|シェルのデフォルト値は Bash です ({{ic|useradd -D}}) で確認できます)。Bash 以外のシェルを使用するのでないかぎり {{ic|-s}} オプションは省略してもかまいません。}} |
||
+ | {{ic|-g}} オプションを使うことで別のグループをデフォルトグループにすることもできますが、マルチユーザシステムにおいてすべてのユーザが単一のデフォルトグループ ([[#使われなくなったグループ|{{ic|users}}]] など) を使用することは推奨されていません。その理由は、特定のグループのユーザで書き込みアクセス権を共有する方法は、ユーザの [[umask]] 値を {{ic|002}} に設定するというものですが、これは、あなたが作成したすべてのファイルはデフォルトで常にデフォルトグループによってアクセス可能であることを意味するからです。[https://web.archive.org/web/20210724233134/https://security.ias.edu/node/441 User Private Groups] も参照してください。ユーザが特定のグループのメンバーになる必要がある場合、そのユーザを作成する際にそのグループを補助グループとして指定してください。 |
||
− | 上記の ''useradd'' コマンドは {{ic|archie}} という名前のグループも自動的に作成し、ユーザー {{ic|archie}} の UID と同じ GID が設定されます。そしてログイン時に {{ic|archie}} のデフォルトグループになります。ユーザーを追加するときは各ユーザーにグループを作るのが推奨されています (ユーザー名と同じグループ名、UID と同じ GID)。 |
||
+ | 推奨されるシナリオ (デフォルトグループの名前がユーザ名と同じ場合) では、デフォルトですべてのファイルはそれらのファイルを作成したユーザのみが書き込み可能です。特定のグループに書き込みアクセスを許可したい場合、そのグループに属している全員に対して共有ファイル/ディレクトリを書き込み可能にすることで可能です。ディレクトリにグループの [[ファイルのパーミッションと属性|setgid]] ビットを設定することで、親ディレクトリを所有するグループに所有グループを自動的に固定することができます: |
||
− | {{ic|users}} など別のグループをデフォルトにすることもできます: |
||
+ | # chmod g+s ''our_shared_directory'' |
||
− | # useradd -m -g users -G wheel -s /bin/bash archie |
||
+ | そうしない場合、ファイル作成者のデフォルトグループ (通常、ユーザ名と同じ名前) が使用されます。 |
||
− | ただし、マルチユーザーシステムではデフォルトグループを使用するのは推奨されていません。大抵、ホームディレクトリをプレイベートにしながら特定のユーザーのグループと書き込みアクセスを共有する方法としてユーザーの [[umask]] の値は {{ic|002}} に設定されており、デフォルトグループ (上の例なら {{ic|users}}) は作成したファイル全てへの書き込み権限をデフォルトで持つことになります。ユーザー名と同じ名前のグループによって所有されている、ユーザーのホームディレクトリは他のシステムユーザーには読み取り専用になり、共有ファイル・フォルダは適当なグループに入っているメンバーによってデフォルトで書き込み可能になります。ディレクトリにグループのスティッキービットを設定することで、親ディレクトリを所有するグループに所有グループを自動的に固定することができます: |
||
+ | 一時的に GID を変更する必要がある場合、''newgrp'' コマンドを使用することで実行時にユーザのフォルトの GID を他の GID に変更できます。例えば、{{ic|newgrp ''groupname''}} を実行したあと、そのユーザによって作成されたファイルは (再ログインの必要とせずに) {{ic|''groupname''}} の GID と関連付けられます。デフォルトの GID に戻すには、グループ名無しで ''newgrp'' を実行してください。 |
||
− | # chmod g+s ''our_shared_directory'' |
||
+ | ==== ユーザーのデフォルト設定を変更する ==== |
||
− | そうでない場合、ファイル作成者のデフォルトグループ (通常はユーザー名と同じです) が使われます。 |
||
+ | 新しいアカウントを作成する際に用いられるデフォルト値は {{ic|/etc/default/useradd}} で設定されており、{{ic|useradd --defaults}} コマンドで確認できます。例えば、{{ic|1=SHELL=/usr/bin/''shell''}} を設定すると、デフォルトのシェルをグローバルに変更できます。また、{{ic|-s}}/{{ic|--shell}} オプションを使えば、アカウント毎にシェルを設定できます。{{ic|chsh -l}} を使えば、有効なログインシェルを一覧表示できます。 |
||
− | 一時的に GID を変更する必要がある場合、''newgrp'' コマンドを使ってユーザーのデフォルト GID を他の GID に変更できます。例えば、{{ic|newgrp ''groupname''}} を実行するとユーザーによって作成されたファイルの GID は {{ic|''groupname''}} になります。ログインしなおす必要はありません。デフォルト GID に戻すには、グループ名を何も付けずに ''newgrp'' を実行してください。 |
||
+ | {{ic|/etc/skel}} ディレクトリでは、新しく作成したユーザーのホームディレクトリへ追加するファイルを指定することもできます。これは、デスクトップ環境のような動作を実現するために設定ファイルを手動で編集する必要のあるミニマリズムなウィンドウマネージャにおいて便利です。例えば、新しく作成する全ユーザーに対してデフォルトのショートカットをセットアップするには: |
||
− | === ユーザー管理の他の例 === |
||
+ | # mkdir /etc/skel/.config |
||
− | ユーザーのログイン名を変更するには: |
||
+ | # cp ~archie/.config/sxhkd /etc/skel/.config |
||
+ | また、[[ディスプレイマネージャ#セッションとして ~/.xinitrc を実行]] では、全ユーザーに対してディスプレイマネージャで xinitrc をオプションとして追加する方法について説明されています。 |
||
− | # usermod -l ''newname'' ''oldname'' |
||
+ | |||
+ | === システムユーザーを追加する例 === |
||
+ | |||
+ | システムユーザーは、異なるユーザのもとでプロセス/デーモンを実行するために使用できます。([[chown]] を使うなどして) ファイルやディレクトリを保護するなど、コンピュータの堅牢化において様々な使用例があります。 |
||
+ | |||
+ | 以下のコマンドで、シェルへのアクセス権が無く、{{ic|home}} ディレクトリも持たないシステムユーザが作成されます (オプションで、{{ic|-U}} パラメータを追加するとユーザと同じ名前のグループも作成し、ユーザをそのグループに追加します): |
||
+ | |||
+ | # useradd --system -s /usr/bin/nologin ''username'' |
||
+ | |||
+ | システムユーザが特定のユーザ ID およびグループ ID を必要とする場合、ユーザの作成時に {{ic|-u}}/{{ic|--uid}} オプションと {{ic|-g}}/{{ic|--gid}} オプションで ID を指定してください: |
||
+ | |||
+ | # useradd --system -u 850 -g 850 -s /usr/bin/nologin ''username'' |
||
+ | |||
+ | === ユーザーのログイン名やホームディレクトリを変更する === |
||
ユーザーのホームディレクトリを変更するには: |
ユーザーのホームディレクトリを変更するには: |
||
156行目: | 187行目: | ||
# usermod -d /my/new/home -m ''username'' |
# usermod -d /my/new/home -m ''username'' |
||
− | {{ic|-m}} オプション |
+ | このコマンドの {{ic|-m}} オプションは、自動的に新しいホームディレクトリを作成し、旧ホームディエレクトリ内の内容をそこへ移動します。 |
− | {{Tip| |
+ | {{Tip|旧ホームディレクトリから新しいホームディレクトリへのリンクを作成することもできます。こうすることで、パスがハードコードされているプログラムがファイルを見つけれられるようになります。 |
+ | # ln -s /my/new/home/ /my/old/home |
||
− | ユーザーを他のグループに追加するには: |
||
− | # usermod -aG [additional_groups] [username] |
||
+ | {{ic|/my/old/home}} の末尾に {{ic|/}} が'''存在しない'''ことを確認してください。 |
||
− | {{Warning|上の {{ic|usermod}} コマンドで {{ic|-a}} オプションを外した場合、ユーザーは {{ic|[additional_groups]}} 以外の全てのグループから削除されます (言い換えるとユーザーは {{ic|[additional_groups]}} のグループのメンバーだけになるということです)。}} |
||
+ | }} |
||
+ | ユーザのログイン名を変更するには: |
||
− | また、gpasswd を使うことも可能です。ただし一度に追加(もしくは削除)できるグループは一つだけになります。 |
||
− | # gpasswd --add [username] [group] |
||
+ | # usermod -l ''newname'' ''oldname'' |
||
− | ''GECOS'' (例: フルネーム) のユーザー情報を入力するには: |
||
+ | {{Warning|ユーザー名を変更するときは、変更対象のユーザーでログインしていないことを確認してください。新しい tty を開いて (例: {{ic|Ctrl+Alt+F6}}) root としてログインするか、他のユーザから [[アプリケーション一覧/セキュリティ#管理者権限|root に昇格]]してください。''usermod'' を使うことで間違えてユーザー名を変更することを防ぐことができます。}} |
||
− | # chfn [username] |
||
+ | ユーザー名の変更は [[#ユーザー管理の他の例|usermod]] コマンドを使って正しく行えば安全かつ簡単です。ユーザーが同じ名前のグループに属している場合、[[#グループ管理|groupmod]] コマンドで変更できます。 |
||
− | (インタラクティブモードで {{ic|chfn}} が起動します)。 |
||
+ | または、{{ic|/etc/passwd}} ファイルを直接編集する方法もあります。詳しくは [[#ユーザーデータベース]] を見てください。 |
||
− | ユーザーのパスワードを設定するには: |
||
+ | また、以下のことにも気をつけてください: |
||
− | # passwd [username] |
||
+ | * [[sudo]] を使用する場合、{{ic|/etc/sudoers}} を更新して新しいユーザー名を反映させてください (root で ''visudo'' コマンドを使用)。 |
||
− | ユーザーのパスワードを期限切れにして、次にログインした時に新しいパスワードを作るよう求めたいときは、次を実行してください: |
||
+ | * 個人用の [[cron#Crontab のフォーマット|crontab]] は、{{ic|/var/spool/cron}} 内のユーザーファイルを古い名前から新しい名前に変更し、{{ic|crontab -e}} を開いて相対パスを変更してファイルのパーミッションも調整する必要があります。 |
||
+ | * {{ic|~/.wine/drive_c/users}}、{{ic|~/.local/share/applications/wine/Programs}} などの中にある [[Wine]] の個人用フォルダ/ファイルのコンテンツは手動で名前を変更/編集する必要があります。 |
||
+ | * [https://www.enigmail.net/index.php/en/ Enigmail] など特定の Thunderbird アドオンは再インストールが必要かもしれません。 |
||
+ | * ホームディレクトリの絶対パス (つまり {{ic|/home/oldname}}) を使っているファイル (デスクトップショートカット、シェルスクリプトなど) は、ホームディレクトリの名前の変更を反映させる必要があります。シェルスクリプトでこういう問題が起こらないようにするには、ホームディレクトリを指定するときに {{Ic|~}} や {{Ic|$HOME}} 変数を使いましょう。 |
||
+ | * また {{ic|/etc/}} の設定ファイルで絶対パスを使っている場合は忘れずに編集してください (Samba や CUPS など)。どのファイルを編集すればいいかわからないときは grep コマンドを使います: {{ic|grep -r ''old_user'' *}}。 |
||
+ | === ユーザー管理の他の例 === |
||
− | # chage -d 0 [username] |
||
+ | [[#ユーザーデータベース|GECOS]] コメントにユーザ情報を入力するには (フルのユーザ名など)、以下を実行してください: |
||
− | ユーザーアカウントは {{ic|userdel}} コマンドで削除できます。 |
||
− | # |
+ | # chfn ''username'' |
+ | (この方法では ''chfn'' はインタラクティブモードで実行します)。 |
||
− | {{ic|-r}} オプションはユーザーのホームディレクトリとメールスプールも削除します。 |
||
+ | あるいは、以下のように自由に GECOS コメントを設定することもできます: |
||
− | {{Tip|[[AUR]] のパッケージ {{AUR|adduser}} には ''useradd'', ''chfn'', ''passwd'' を対話式に行うことができる ''adduser'' スクリプトが入っています。{{Bug|32893}} を参照。}} |
||
+ | # usermod -c "Comment" ''username'' |
||
− | === ユーザー名を変更するときのヒント === |
||
+ | ユーザーのパスワードを期限切れにして、次にログインした時に新しいパスワードを作るよう求めたいときは、次を実行してください: |
||
− | {{Warning|ユーザー名を変更するときは、変更対象のユーザーでログインしていないことを確認してください。新しい tty を開いて ({{ic|Ctrl+Alt+F1}})、root または他のユーザーでログインするか su で root になってください。usermod を使うことで間違えてユーザー名を変更することを防ぐことができます。}} |
||
+ | # chage -d 0 ''username'' |
||
− | ユーザー名の変更は [[#ユーザー管理の他の例|usermod]] コマンドを使って正しく行えば安全・簡単です。ユーザーが同じ名前のグループに属している場合、[[#グループ管理|groupmod]] コマンドで変更できます。 |
||
+ | ''userdel'' コマンドでユーザアカウントを削除できます: |
||
− | また、{{ic|/etc/passwd}} ファイルを直接編集する方法もあります。詳しくは[[#ユーザーデータベース|ユーザーデータベース]]を見てください。 |
||
+ | # userdel -r ''username'' |
||
− | Also keep in mind the following notes: |
||
+ | ''userdel'' の {{ic|-r}} オプションは、ユーザのホームディレクトリとメールスプールも削除します。 |
||
− | *[[sudo]] を使用する場合 {{ic|/etc/sudoers}} を更新して新しいユーザー名を反映させてください (root で visudo コマンドを使用)。 |
||
− | *個人用の [[cron#Crontab のフォーマット|crontab]] は {{ic|/var/spool/cron}} のユーザーファイルを古い名前から新しい名前に変更して、{{ic|crontab -e}} を開いて相対パスを変更してファイルのパーミッションも調整します。 |
||
− | * [[Wine]] の個人用フォルダ・ファイルコンテンツ {{ic|~/.wine/drive_c/users}}, {{ic|~/.local/share/applications/wine/Programs}} は手動で名前を変更・編集する必要があります。 |
||
− | *Firefox における[[Firefox#スペルチェック用の辞書|スペルチェックの有効化]]は再度行って下さい。そうしないとユーザーの名前を変更後、スペルチェックが実行されません。 |
||
− | *[http://enigmail.mozdev.org/home/index.php Enigmail] など特定の Thunderbird アドオンは再インストールが必要です。 |
||
− | *ホームディレクトリの絶対パス ({{ic|/home/oldname}}) を使っているファイル (デスクトップショートカット, シェルスクリプトなど) は新しいホームを使うように修正する必要があります。シェルスクリプトではこういう問題が起こらないように、ホームディレクトリを指定するときは {{Ic|~}} や {{Ic|$HOME}} 変数を使いましょう。 |
||
− | *また {{ic|/etc}} の設定ファイルで絶対パスを使っている場合は忘れずに編集してください (Samba や CUPS など)。どのファイルを編集すればいいかわからないときは grep コマンドを使います: {{ic|grep -r {old_user} *}}。 |
||
+ | ユーザのログインシェルを変更するには: |
||
− | === ユーザーデータベース === |
||
+ | # usermod -s ''/usr/bin/bash'' ''username'' |
||
− | ローカルユーザー情報は {{ic|/etc/passwd}} ファイルに保存されます。システム内の全てのユーザーアカウントを一覧するには: |
||
+ | {{Tip|[[AUR]] のパッケージ {{AUR|adduser}} には ''useradd''、''chfn''、''passwd'' を対話式に行うことができる ''adduser'' スクリプトが入っています。{{Bug|32893}} も参照してください。}} |
||
− | $ cat /etc/passwd |
||
+ | == ユーザーデータベース == |
||
− | 一行毎にアカウントが表示され、そのフォーマットは: |
||
+ | ローカルユーザの情報はプレーンテキストの {{ic|/etc/passwd}} ファイルに保存されます。このファイル内の各行は1つのユーザアカウントを表しており、7つのフィールドがコロンで区切られて記述されています。 |
||
− | account:password:UID:GID:GECOS:directory:shell |
||
+ | ''account:password:UID:GID:GECOS:directory:shell'' |
||
− | それぞれの意味: |
||
− | *{{ic|account}} はユーザーの名前 |
||
− | *{{ic|password}} はユーザーのパスワード |
||
− | *{{ic|UID}} は数字のユーザー ID |
||
− | *{{ic|GID}} はユーザーの数字のプライマリーグループ ID |
||
− | *{{ic|GECOS}} は任意のフィールドでユーザーの情報を格納します; 通常ユーザーのフルネームを含めます |
||
− | *{{ic|directory}} はユーザーの {{ic|$HOME}} ディレクトリ |
||
− | *{{ic|shell}} はユーザーのコマンドインタプリタ (デフォルトは {{ic|/bin/sh}}) |
||
+ | それぞれのフィールドの意味は以下のとおりです: |
||
− | {{Note|1=Arch Linux は''暗号化した''パスワードを使っています。{{ic|passwd}} ファイルは誰からも読めるようになっており、(ハッシュ化されているかどうかにかかわらず)パスワードをこのファイルに保存するのは安全ではありません。代わりに、{{ic|password}} にはハッシュ化されたパスワードがアクセスが制限されたファイル {{ic|/etc/shadow}} に保存されていることを示すプレースホルダ文字 ({{ic|x}}) が入ります。}} |
||
+ | |||
+ | * {{ic|''account''}} はユーザ名です。このフィールドを空白にすることはできません。標準的な *NIX の命名規則が適用されます。 |
||
+ | * {{ic|''password''}} はユーザのパスワードです。{{Warning|1={{ic|passwd}} ファイルは全ユーザが読むことができます。なので、パスワード (ハッシュ化されているものなど) をこのファイルに保存することは安全ではありません。代わりに、Arch Linux では[[セキュリティ#パスワードのハッシュ|シャドウパスワード]]が使用されます。この場合、{{ic|password}} フィールドにはプレースホルダー文字 ({{ic|x}}) が代わりに記入され、アクセスが制限されている {{ic|/etc/shadow}} ファイルにハッシュ化されたパスワードが保存されていることを示します。そのような理由により、パスワードの変更には必ず '''passwd''' コマンドを使用することが推奨されます。}} |
||
+ | * {{ic|''UID''}} はユーザ ID の数値です。Arch では、(サービスとは異なる) 一般ユーザの (root の後の) 最初のログイン名の UID はデフォルトで 1000 となります。その後のユーザの UID エントリは 1000 より大きい必要があります。 |
||
+ | * {{ic|''GID''}} はユーザのプライマリグループ ID の数値です。GID の数値は [[#グループ管理|/etc/group]] にリストアップされています。 |
||
+ | * {{ic|''GECOS''}} はオプションのフィールドで、ユーザの情報を格納するために使用されます。通常、このフィールドには完全なユーザ名が含まれますが、このフィールドは ''finger'' などのサービスによって使用されたり、[[#これらのデータベースに関連した他のツール|chfn]] コマンドによって管理されたりする可能性があります。このフィールドは任意で、空白のままにしておくこともできます。 |
||
+ | * {{ic|''directory''}} は、{{ic|$HOME}} 環境変数を設定するためにログインコマンドによって使用されます。独自のユーザを持ついくつかのサービスは {{ic|/}} を使用しますが、通常ユーザは普通 {{ic|/home}} 下のディレクトリを使用します。 |
||
+ | * {{ic|''shell''}} はユーザのデフォルト[[コマンドシェル]]へのパスです。このフィールドはオプションで、デフォルトは {{ic|/usr/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]] を使用しています。 |
||
+ | |||
+ | ''pwck'' を使うことで、ユーザデータベースの整合性を検証することができます。また、このコマンドはユーザのリストを GID によってソートします (比較の際に便利でしょう): |
||
− | ''pwck'' コマンドを使うことでユーザーデータベースの整合性を確認できます。GID でユーザーリストをソートすることができるため、比較する際にも有用です: |
||
# pwck -s |
# pwck -s |
||
− | + | {{Warning|{{Pkg|filesystem}} パッケージの新しいリリースがインストールされた際に、Arch Linux のデフォルトのファイルが [[pacnew ファイル]]として作成されます。Pacman が、アクションを促すメッセージを出力しない限り、これらの ''.pacnew'' ファイルは無視/削除できます (そして、そうすべきです)。必要な新しいデフォルトユーザとグループは、必要に応じて {{man|8|systemd-sysusers}} またはパッケージのインストールスクリプトによって追加/再追加されます。}} |
|
+ | |||
+ | == 自動整合性チェック == |
||
+ | |||
+ | {{ic|pwck}} や {{ic|grpck}} を自分で実行する代わりに、[[Systemd/タイマー|Systemd タイマー]] {{ic|shadow.timer}} は {{ic|shadow.service}} を毎日実行します ({{ic|shadow.timer}} は {{Pkg|shadow}} パッケージの一部であり、このパッケージのインストール時に自動で有効化されます)。{{ic|shadow.service}} は {{man|8|pwck}} と {{man|8|grpck}} を実行してパスワードファイルとグループファイルの両方の整合性を検証します。 |
||
+ | |||
+ | 不整合が報告された場合、グループは {{man|8|vigr}} コマンドで、ユーザは {{man|8|vipw}} コマンドで編集できます。これは、これらのコマンドがデータベースが編集されないようロックするという観点で、追加の保護を提供します。デフォルトのテキストエディタは vi ですが、{{ic|EDITOR}} [[環境変数]]を設定することで他のエディタを使用できます。 |
||
== グループ管理 == |
== グループ管理 == |
||
− | {{ic|/etc/group}} |
+ | {{ic|/etc/group}} は、システム上のグループを定義するファイルです (詳細は {{man|5|group}} を見てください)。このファイルの仲間に {{ic|gshadow}} というものもありますが、これはめったに使用されません。詳細は {{man|5|gshadow}} を見てください。 |
− | + | ''groups'' コマンドでグループのメンバーを表示できます: |
|
− | $ groups |
+ | $ groups ''user'' |
− | {{ic|user}} |
+ | {{ic|''user''}} が省略された場合、現在のユーザが属しているグループの名前が表示されます。 |
− | + | ''id'' コマンドは追加の詳細情報も出力します (ユーザの UID や関連付けられた GID など): |
|
− | $ id |
+ | $ id ''user'' |
システム上の全てのグループを一覧するには: |
システム上の全てのグループを一覧するには: |
||
252行目: | 295行目: | ||
$ cat /etc/group |
$ cat /etc/group |
||
− | + | ''groupadd'' コマンドで新しいグループを作成できます: |
|
− | # groupadd |
+ | # groupadd ''group'' |
+ | {{Note|ユーザが現在ログイン中の場合、変更を適用するために一度ログアウトし、その後ログインし直す必要があります。}} |
||
− | そしてユーザーをグループに追加するには {{ic|gpasswd}} コマンドを使います: |
||
+ | そしてユーザーをグループに追加するには ''gpasswd'' コマンドを使います (エラーについては {{Bug|58262}} を見てください): |
||
− | # gpasswd -a [user] [group] |
||
+ | # gpasswd -a ''user'' ''group'' |
||
− | 既存のグループは {{ic|groupmod}} で修正します。例えば gid を変更せずに {{ic|old_group}} グループの名前を {{ic|new_group}} に変更するには ({{ic|old_group}} によって所有されていたファイルは全て {{ic|new_group}} によって所有されるようになります): |
||
+ | あるいは、''usermod'' でユーザをグループに追加できます ({{ic|''additional_groups''}} はコンマで区切られたリストに置き換えてください): |
||
− | # groupmod -n [new_group] [old_group] |
||
+ | # usermod -aG ''additional_groups'' ''username'' |
||
− | {{Note|上記のコマンドでグループ名は変更されますが、グループの GID は変更されません。}} |
||
+ | {{Warning|上記の ''usermod'' コマンドで {{ic|-a}} オプションを使用しない場合、ユーザは {{ic|''additional_groups''}} に含まれれていないグループすべてから削除されます (つまり、ユーザの属するグループは {{ic|''additional_groups''}} に含まれているグループだけになるということです)。}} |
||
− | グループを削除するには: |
||
+ | ''groupmod'' コマンドで既存のグループを変更できます。例えば、{{ic|''old_group''}} グループの名前を {{ic|''new_group''}} に変更するには: |
||
− | # groupdel [group] |
||
+ | # groupmod -n ''new_group'' ''old_group'' |
||
− | グループからユーザーを外すには: |
||
+ | {{Note|このコマンドはグループの名前を変更しますが、GID の数値は変更しません。なので、{{ic|''old_group''}} によって以前所有されていたすべてのファイルは、{{ic|''new_group''}} によって所有されるようになります。}} |
||
− | # gpasswd -d [user] [group] |
||
+ | 既存のグループを削除するには: |
||
− | グループに追加・削除したいユーザーがログイン中の場合、一度ログアウトしないと変更が適用されません。 |
||
+ | # groupdel ''group'' |
||
− | ''grpck'' コマンドを使うことでシステムのグループファイルの整合性を確認できます。 |
||
+ | グループからユーザを削除するには: |
||
− | {{Pkg|filesystem}} パッケージにアップデートがあると ''.pacnew'' ファイルが作られます。[[#ユーザーデータベース|ユーザーデータベース]]の ''.pacnew'' ファイルと同じように、必要なグループはインストールスクリプトによって追加されるため、無視・削除してかまいません。 |
||
+ | |||
+ | # gpasswd -d ''user'' ''group'' |
||
+ | |||
+ | ''grpck'' コマンドを使用することでシステムのグループファイルの整合性を検証できます。 |
||
+ | |||
+ | {{Warning|{{Pkg|filesystem}} パッケージの新しいリリースがインストールされた際に、Arch Linux のデフォルトのファイルが ''.pacnew'' ファイルとして作成されます。Pacman が、アクションを促すメッセージを出力しない限り、これらの ''.pacnew'' ファイルは無視/削除できます (そして、そうすべきです)。必要な新しいデフォルトユーザとグループは、必要に応じて {{man|8|systemd-sysusers}} またはパッケージのインストールスクリプトによって追加/再追加されます。}} |
||
== グループ一覧 == |
== グループ一覧 == |
||
− | このセクションでは |
+ | このセクションでは {{Pkg|filesystem}} パッケージに含まれている主要なグループの用途を説明します。他にもグループは存在し、パッケージがインストールされたときに[[en2:DeveloperWiki:UID / GID Database|適当な GID]] を使って作成されます。詳しくはグループに関連するソフトウェアのページを見てください。 |
{{Note|パッケージを削除しても、自動的に作成されたユーザーやグループ (UID/GID) は削除されません。これは仕様であり、たとえ既にソフトウェアがアンインストールされていても、使用していたときに作成されたファイルがセキュリティ上のリスクにならないようにするための挙動です。}} |
{{Note|パッケージを削除しても、自動的に作成されたユーザーやグループ (UID/GID) は削除されません。これは仕様であり、たとえ既にソフトウェアがアンインストールされていても、使用していたときに作成されたファイルがセキュリティ上のリスクにならないようにするための挙動です。}} |
||
288行目: | 337行目: | ||
=== ユーザーグループ === |
=== ユーザーグループ === |
||
− | ワークステーション/デスクトップユーザ |
+ | ワークステーション/デスクトップの非 root ユーザはしばしば、ハードウェア周辺機器にアクセスできるようにしたりシステム管理を楽にしたりするために、以下のグループのどれかに追加する必要があります: |
{| class="wikitable" |
{| class="wikitable" |
||
− | ! グループ || 影響 |
+ | ! グループ || 影響を受けるファイル || 目的 |
− | |- |
||
− | | adm || || 管理者グループ。{{ic|wheel}} と類似。 |
||
|- |
|- |
||
+ | | adm || || 管理者グループ。一般的に、保護されたログに読み込みアクセスするために使用されます。このグループは [[journal]] ファイルへの完全な読み込みアクセス権を持ちます。 |
||
− | | ftp || {{ic|/srv/ftp/}} || [[Wikipedia:FTP|FTP]] サーバーが供給するファイルへのアクセス。 |
||
|- |
|- |
||
− | | |
+ | | ftp || {{ic|/srv/ftp/}} || [[アプリケーション一覧/インターネット#FTP サーバー|FTP サーバ]]により提供されているファイルへのアクセス。 |
|- |
|- |
||
− | | |
+ | | games || {{ic|/var/games}} || 一部のゲームソフトウェアへのアクセス。 |
|- |
|- |
||
− | | |
+ | | http || {{ic|/srv/http/}} || [[アプリケーション一覧/インターネット#ウェブサーバー|HTTP サーバ]]によって提供されているファイルへのアクセス。 |
|- |
|- |
||
+ | | log || || [[syslog-ng]] によって作成された {{ic|/var/log/}} にあるログファイルへのアクセス。 |
||
− | | rfkill || {{ic|/dev/rfkill}} || 無線デバイスのパワーステートをコントロールする権限 ({{Pkg|rfkill}} が使用)。 |
||
|- |
|- |
||
+ | | rfkill || {{ic|/dev/rfkill}} || ワイヤレスデバイスの電源状態の制御権 ([[rfkill]] によって使用されます)。 |
||
− | | sys || || [[CUPS]] のプリンターを管理する権限。 |
||
|- |
|- |
||
+ | | sys || || [[CUPS]] でのプリンタの管理権。 |
||
− | | systemd-journal || {{ic|/var/log/journal/*}} || systemd ログへの読み取りアクセスを与えるために {{ic|adm}} や {{ic|wheel}} の代わりとして使われます [https://cgit.freedesktop.org/systemd/systemd/tree/README?id=fdbbf0eeda929451e2aaf34937a72f03a225e315#n190]。他の場合、ユーザーが生成したメッセージだけ表示されます。 |
||
|- |
|- |
||
+ | | systemd-journal || {{ic|/var/log/journal/*}} || systemd のログへの読み取り専用アクセスを提供します。{{ic|adm}} や {{ic|wheel}} の代わりとして使用されます [https://github.com/systemd/systemd/blob/19aadacf92ad86967ffb678e37b2ff9e83cb9480/README#L161]。このグループに属さない場合、ユーザによって生成されたメッセージのみが表示されます。 |
||
− | | users || || 標準のユーザーグループ。 |
||
|- |
|- |
||
− | | uucp || {{ic|/dev/ttyS[0-9]+}}, {{ic|/dev/tts/[0-9]+}}, {{ic|/dev/ttyUSB[0-9]+}}, {{ic|/dev/ttyACM[0-9]+}}, {{ic|/dev/rfcomm[0-9]+}} || RS-232 シリアルポートや接続され |
+ | | uucp || {{ic|/dev/ttyS[0-9]+}}, {{ic|/dev/tts/[0-9]+}}, {{ic|/dev/ttyUSB[0-9]+}}, {{ic|/dev/ttyACM[0-9]+}}, {{ic|/dev/rfcomm[0-9]+}} || [[Wikipedia:ja:RS-232|RS-232]] シリアルポートや、それらに接続されているデバイス。 |
|- |
|- |
||
− | | wheel || || 管理 |
+ | | wheel || || 管理者グループ。一般的に、管理者アクションを実行する権限を与えるために使用されます。このグループは [[journal]] ファイルへの完全な読み取りアクセス権と、[[CUPS]] でプリンタを管理する権限を持ちます。また、[[sudo]] や [[su]] ユーティリティへのアクセス権を与えるためにも使用されます (どちらのユーティリティもデフォルトではこのグループを使用しません)。 |
|} |
|} |
||
=== システムグループ === |
=== システムグループ === |
||
− | 以下のグループはシステムのために使 |
+ | 以下のグループはシステムのために使用されます。これらのグループへのユーザの割り当ては、限られた目的においてのみ必要になります: |
{| class="wikitable" |
{| class="wikitable" |
||
− | ! グループ || 影響 |
+ | ! グループ || 影響を受けるファイル || 目的 |
|- |
|- |
||
| dbus || || {{Pkg|dbus}} によって内部的に使用されます。 |
| dbus || || {{Pkg|dbus}} によって内部的に使用されます。 |
||
327行目: | 374行目: | ||
| kmem || {{ic|/dev/port}}, {{ic|/dev/mem}}, {{ic|/dev/kmem}} || |
| kmem || {{ic|/dev/port}}, {{ic|/dev/mem}}, {{ic|/dev/kmem}} || |
||
|- |
|- |
||
− | | locate || {{ic|/usr/bin/locate}}, {{ic|/var/lib/locate}}, {{ic|/var/lib/mlocate}}, {{ic|/var/lib/slocate}} || [[ |
+ | | locate || {{ic|/usr/bin/locate}}, {{ic|/var/lib/locate}}, {{ic|/var/lib/mlocate}}, {{ic|/var/lib/slocate}} || [[Locate]] を見てください。 |
|- |
|- |
||
− | | lp || {{ic|/dev/lp[0-9]*}}, {{ic|/dev/parport[0-9]* |
+ | | lp || {{ic|/dev/lp[0-9]*}}, {{ic|/dev/parport[0-9]*}} || パラレルポートのデバイスへのアクセス (プリンタなど)。 |
|- |
|- |
||
| mail || {{ic|/usr/bin/mail}} || |
| mail || {{ic|/usr/bin/mail}} || |
||
335行目: | 382行目: | ||
| nobody || || 非特権グループ。 |
| nobody || || 非特権グループ。 |
||
|- |
|- |
||
− | | proc || {{ic|/proc/''pid''/}} || [https:// |
+ | | proc || {{ic|/proc/''pid''/}} || [https://docs.kernel.org/filesystems/proc.html proc ファイルシステム]の {{ic|1=hidepid=}} マウントオプションによって制限されているプロセス情報の取得を許可されているグループ。このグループは {{ic|1=gid=}} マウントオプションによって明示的に設定されなければなりません。 |
|- |
|- |
||
− | | root || {{ic|/*}} || 完全なシステム管理と |
+ | | root || {{ic|/*}} || 完全なシステムの管理と制御 (root, admin)。 |
|- |
|- |
||
− | | smmsp || || [[ |
+ | | smmsp || || [[sendmail]] グループ。 |
|- |
|- |
||
| tty || {{ic|/dev/tty}}, {{ic|/dev/vcc}}, {{ic|/dev/vc}}, {{ic|/dev/ptmx}} || |
| tty || {{ic|/dev/tty}}, {{ic|/dev/vcc}}, {{ic|/dev/vc}}, {{ic|/dev/ptmx}} || |
||
|- |
|- |
||
| utmp || {{ic|/run/utmp}}, {{ic|/var/log/btmp}}, {{ic|/var/log/wtmp}} || |
| utmp || {{ic|/run/utmp}}, {{ic|/var/log/btmp}}, {{ic|/var/log/wtmp}} || |
||
+ | |- |
||
|} |
|} |
||
=== systemd 以前のグループ === |
=== systemd 以前のグループ === |
||
− | + | Arch が [[systemd]] に移行する前は、デバイスにアクセスできるようにするためにユーザを以下のグループに手動で追加する必要がありました。この方法は非推奨となっており、現在は [[udev]] がデバイスに {{ic|uaccess}} [https://github.com/systemd/systemd/blob/main/rules.d/70-uaccess.rules.in タグ]を付け、現在どのセッションがアクティブであるかに応じて ''logind'' が [[ACL]] を使って動的にユーザに権限を割り当てています。この仕組みを機能させるにはセッションが破壊されないようにしなければなりません ([[一般的なトラブルシューティング#セッションのパーミッション]]を参照)。 |
|
− | グループによってはユーザーを追加しなくてはいけない例外も存在します: 例えば、ログインしていない状態でユーザーからデバイスにアクセスしたい場合など。ただし、グループにユーザーを追加すると機能が破壊されることもあるので注意してください (例えば{{ic|audio}} グループを使用するとユーザーの高速切り替えが無効化されソフトウェアミキシングができなくなります)。 |
+ | グループによってはユーザーを追加しなくてはいけない例外も存在します: 例えば、ログインしていない状態でユーザーからデバイスにアクセスしたい場合など。ただし、グループにユーザーを追加すると機能が破壊されることもあるので注意してください (例えば {{ic|audio}} グループを使用するとユーザーの高速切り替えが無効化されソフトウェアミキシングができなくなります)。 |
{| class="wikitable" |
{| class="wikitable" |
||
− | ! グループ || 影響 |
+ | ! グループ || 影響を受けるファイル || 目的 |
|- |
|- |
||
− | | audio || {{ic|/dev/audio}}, {{ic|/dev/snd/*}}, {{ic|/dev/rtc0}} || 全てのセッションでのサウンドハードウェアへの直接アクセス。リモートセッションで [[ |
+ | | audio || {{ic|/dev/audio}}, {{ic|/dev/snd/*}}, {{ic|/dev/rtc0}} || 全てのセッションでのサウンドハードウェアへの直接アクセス。リモートセッションで [[ALSA]] と [[OSS]] を動作させるために未だに必要になりますが ([[ALSA#ユーザー権限]] を参照)、そうするつもりでない場合にはこのグループを使用することは推奨されません。他の特定のディストリビューションとは異なり、このグループは[[リアルタイムプロセス管理#PAM の設定|リアルタイム権限]]を与えるために使用されていません。 |
|- |
|- |
||
− | | disk || {{ic|/dev/sd[a- |
+ | | disk || {{ic|/dev/sd[a-zA-Z]*[1-9]*}} || {{ic|optical}}、{{ic|floppy}}、{{ic|storage}} など他のグループによる影響を受けないブロックデバイスへのアクセス。 |
|- |
|- |
||
− | | floppy || {{ic|/dev/fd[0-9]}} || フロッピー |
+ | | floppy || {{ic|/dev/fd[0-9]*}} || フロッピードライブへのアクセス。 |
|- |
|- |
||
− | | input || {{ic|/dev/input/event[0-9]*}}, {{ic|/dev/input/mouse[0-9]*}} || 入力デバイスへのアクセス。systemd 215 で導入されました [ |
+ | | input || {{ic|/dev/input/event[0-9]*}}, {{ic|/dev/input/mouse[0-9]*}} || 入力デバイスへのアクセス。systemd 215 で導入されました [https://lists.freedesktop.org/archives/systemd-commits/2014-June/006343.html]。 |
|- |
|- |
||
| kvm || {{ic|/dev/kvm}} || [[KVM]] を使用する仮想マシンへのアクセス。 |
| kvm || {{ic|/dev/kvm}} || [[KVM]] を使用する仮想マシンへのアクセス。 |
||
|- |
|- |
||
− | | optical || {{ic|/dev/sr[0-9]}}, {{ic|/dev/sg[0-9]}} || CD や DVD ドライブなど |
+ | | optical || {{ic|/dev/sr[0-9]}}, {{ic|/dev/sg[0-9]}} || CD や DVD ドライブなどの光学デバイスへのアクセス。 |
− | |- |
||
− | | power || || [[Pm-utils]] (サスペンド, ハイバネート...) などの電源管理コントロールを使う権限。 |
||
|- |
|- |
||
| scanner || {{ic|/var/lock/sane}} || スキャナーハードウェアへのアクセス。 |
| scanner || {{ic|/var/lock/sane}} || スキャナーハードウェアへのアクセス。 |
||
|- |
|- |
||
− | | storage || || USB ハードドライブ、フラッシュ |
+ | | storage || {{ic|/dev/st[0-9]*[lma]*}}, {{ic|/dev/nst[0-9]*[lma]*}} || USB ハードドライブ、フラッシュ/ジャンプドライブ、MP3 プレイヤーなどのリームーバブルドライブへのアクセス権を得るために使用されます。ユーザがストレージデバイスをマウントできるようにします。[https://lists.archlinux.org/archives/list/arch-dev-public@lists.archlinux.org/thread/7ITKMBKKHUB4SUN5SCS7FLSTEILKGIJH/#IEZCAXRIBMXGOMMW7C4Z3ADED32W24ZI] |
+ | 現在では、カスタムの udev ルールが存在しない場合にテープにダイレクトアクセスするためだけに使用されます [https://github.com/archlinux/svntogit-packages/blob/packages/systemd/trunk/0001-Use-Arch-Linux-device-access-groups.patch][https://github.com/archlinux/svntogit-packages/commit/26af78b6ad554dbd00615600edc7d53164ef8dee][https://github.com/systemd/systemd/blame/aaaf42cb44d4fcd598fca441a11856f3e8dd06d8/rules.d/50-udev-default.rules.in#L69][https://elixir.bootlin.com/linux/v5.5.6/source/include/scsi/scsi_proto.h#L251]。 |
||
− | |- |
||
+ | |||
− | | sys || || [[CUPS]] でプリンターを管理する権限。 |
||
+ | また、[[Udisks|udisks/udisksctl]] を通して一部のデバイスを操作するために必要です。 |
||
|- |
|- |
||
− | | video || {{ic|/dev/fb/0}}, {{ic|/dev/misc/agpgart}} || ビデオキャプチャデバイス |
+ | | video || {{ic|/dev/fb/0}}, {{ic|/dev/misc/agpgart}} || ビデオキャプチャデバイス、2D/3D ハードウェアアクセラレーション、フレームバッファへのアクセス ([[X]]は、このグループに''属さなくとも''使用可能です)。 |
|} |
|} |
||
=== 使われなくなったグループ === |
=== 使われなくなったグループ === |
||
+ | |||
以下のグループは現在利用されていません: |
以下のグループは現在利用されていません: |
||
{| class="wikitable" |
{| class="wikitable" |
||
− | ! グループ || 影響 |
+ | ! グループ || 影響を受けるファイル || 目的 |
|- |
|- |
||
− | | bin || |
+ | | bin || なし || 歴史的に存在していました。 |
|- |
|- |
||
| daemon || || |
| daemon || || |
||
|- |
|- |
||
+ | | lock || || ロックファイルのアクセスのために使用されました。{{AUR|gnokii}} などがこれを必要とします。 |
||
− | | lock || || |
||
|- |
|- |
||
| mem || || |
| mem || || |
||
|- |
|- |
||
− | | network || || デフォルトで使用されません。NetworkManager を使用する権限を与える場合などに使えます ([[NetworkManager#PolicyKit パーミッション |
+ | | network || || デフォルトで使用されません。NetworkManager を使用する権限を与える場合などに使えます ([[NetworkManager#PolicyKit のパーミッションをセットアップする]]を参照)。 |
|- |
|- |
||
| power || || |
| power || || |
||
|- |
|- |
||
| uuidd || || |
| uuidd || || |
||
+ | |- |
||
+ | | users || || ({{ic|/etc/login.defs}} で {{ic|USERGROUPS_ENAB no}} を設定したり、''useradd'' の {{ic|-N}}/{{ic|--no-user-group}} オプションを使用したりしてユーザを作成する場合など) ユーザープライベートグループを使用しない場合 (通常、推奨されません) のユーザのプライマリグループです。 |
||
|} |
|} |
||
+ | |||
+ | == これらのデータベースに関連した他のツール == |
||
+ | |||
+ | {{Accuracy|Arch Linux は本当に {{ic|vipw -s}} や {{ic|vigr -s}} よりも ''chage'' を推奨しているのか?}} |
||
+ | |||
+ | {{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}} も参照してください。 |
||
+ | |||
+ | {{TranslationStatus|Users and groups|2024-07-28|812768}} |
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 も参照してください。