「ユーザーとグループ」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(同期)
 
(同じ利用者による、間の9版が非表示)
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]]
24行目: 23行目:
 
''ユーザー''とはコンピュータを使う全ての人のことです。ここで、名前がユーザーを表すことを説明しましょう。名前は Mary や Bill という風につけられ、実名のかわりに Dragonlady や Pirate といった名前を使うことができます。重要なのはコンピュータはそれぞれのアカウントに名前をつけていて、人々がコンピュータを使うためのアクセスを得るために名前を使うということです。システムサービスによっては制限・特権ユーザーアカウントを使って動作させることもあります。
 
''ユーザー''とはコンピュータを使う全ての人のことです。ここで、名前がユーザーを表すことを説明しましょう。名前は Mary や Bill という風につけられ、実名のかわりに Dragonlady や Pirate といった名前を使うことができます。重要なのはコンピュータはそれぞれのアカウントに名前をつけていて、人々がコンピュータを使うためのアクセスを得るために名前を使うということです。システムサービスによっては制限・特権ユーザーアカウントを使って動作させることもあります。
   
特定の方法でアクセスを制限することでセキュリティのためにユーザーの管理が行われます。[[Wikipedia:ja:スーパーユーザー|スーパーユーザー]] (root) はオペレーティングシステムと設定全てにアクセスすることができます。そのため管理用途だけに使われることが想定されています。特権がないユーザーは [[su]] や [[sudo]] のプログラムを使うことで、[[一般的な推奨事項#セキュリティ|制御された特権昇格]]を行うことが可能です。
+
特定の方法でアクセスを制限することでセキュリティのためにユーザーの管理が行われます。[[Wikipedia:ja:スーパーユーザー|スーパーユーザー]] (root) はオペレーティングシステムと設定全てにアクセスすることができます。そのため管理用途だけに使われることが想定されています。特権がないユーザーはいくつかのプログラムによって[[アプリケーション覧/セキュリティ#管理者権限|制御された特権昇格]]を行うことが可能です。
   
 
作成するアカウントにそれぞれ異なる名前を使えば、人々は複数のアカウントを持つことが可能です。さらに、"root" など、使うことができない予約済みの名前も存在します。
 
作成するアカウントにそれぞれ異なる名前を使えば、人々は複数のアカウントを持つことが可能です。さらに、"root" など、使うことができない予約済みの名前も存在します。
40行目: 39行目:
 
:''このキーデザイン原理の構成は統一パラダイムの提供による幅広い入出力のアクセスです: ドキュメント、ディレクトリ、ハードドライブ、CD-ROM、キーボード、プリンター、モニター、ターミナル、インタープロセス、ネットワーク。トリックはこれらリソース全てに対して共通のアブストラクションを提供することで、UNIX の父たちは"ファイル"と呼びました。全ての"ファイル"が同じ API を使って扱われることにより、同じ基本的なコマンドセットを使ってディスク、キーボード、ドキュメント、ネットワークデバイスへの読み書きができます。''
 
:''このキーデザイン原理の構成は統一パラダイムの提供による幅広い入出力のアクセスです: ドキュメント、ディレクトリ、ハードドライブ、CD-ROM、キーボード、プリンター、モニター、ターミナル、インタープロセス、ネットワーク。トリックはこれらリソース全てに対して共通のアブストラクションを提供することで、UNIX の父たちは"ファイル"と呼びました。全ての"ファイル"が同じ API を使って扱われることにより、同じ基本的なコマンドセットを使ってディスク、キーボード、ドキュメント、ネットワークデバイスへの読み書きができます。''
   
[http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.597.4699&rep=rep1&type=pdf Extending UNIX File Abstraction for General-Purpose Networking] より:
+
[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 デバイスからの読み書きに使うことが可能なのです。多くのシステムで、録音と再生がそれぞれ次のコマンドで出来ます、"{{ic|cat /dev/audio > myfile}}" と "{{ic|cat myfile > /dev/audio}}"。''
 
:''UNIX とその互換オペレーティングシステムで提供されている、基礎的でとてもパワフルで一貫性のあるアブストラクションがファイルアブストラクションです。多くの OS サービスとデバイスインターフェイスはアプリケーションにファイルやファイルシステムをあたえることで実装されています。これによって既存のアプリケーションの新しい利用ができるようになり力を引き出すことができるようになります — 固有の使用目的で設計されたシンプルなツールが、UNIX ファイルアブストラクションを使って、新しい方法で利用されます。cat のような、ファイルの読み込みと標準出力への内容のアウトプットができるシンプルなツールを特別なデバイスファイル、典型的に {{ic|/dev}} ディレクトリ下のファイルを通して、I/O デバイスからの読み書きに使うことが可能なのです。多くのシステムで、録音と再生がそれぞれ次のコマンドで出来ます、"{{ic|cat /dev/audio > myfile}}" と "{{ic|cat myfile > /dev/audio}}"。''
116行目: 115行目:
 
== ユーザー管理 ==
 
== ユーザー管理 ==
   
現在システムにログインしているユーザーを一覧するには {{ic|who}} コマンドを使います。全てのユーザーアカウントと[[#ユーザーデータベース|ユーザーデータベース]]に保存されているプロパティを確認するには、root で {{ic|passwd -Sa}} を実行してください。出力されるフォーマットについては {{man|1|passwd}} の説明を読んでください。
+
現在システムにログインしているユーザーを一覧するには ''who'' コマンドを使います。全てのユーザーアカウントと[[#ユーザーデータベース|ユーザーデータベース]]に保存されているプロパティを確認するには、root で {{ic|passwd -Sa}} を実行してください。出力されるフォーマットについては {{man|1|passwd}} の説明を読んでください。
   
新しいユーザーを追加するときは {{ic|useradd}} コマンドを使って下さい:
+
新しいユーザーを追加するときは ''useradd'' コマンドを使って下さい:
   
# useradd -m -g [initial_group] -G [additional_groups] -s [login_shell] [username]
+
# useradd -m -G ''additional_groups'' -s ''login_shell'' ''username''
   
* {{ic|-m}} を使うとユーザのホームディレクトリ {{ic|/home/[username]}} 作成します。ホームディレクトリの中で、root でないユーザーがファイルの書き込み・削除、プログラムのンストーなどができます。
+
; {{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|-G}} ユーザーがメンバーになる追加グループ(ト)を指定しま; グループはれぞれカマで区切り、スを入れてけません; デフォルトはイニャルグープにだけユーザーを属させます。
+
; {{ic|-s}}/{{ic|--shell}}: ユーザのロインシェ。[[Bash]] 以外のものを指定する場合、のシェルがインスルされていることを確認してください。新しく作成されたユーザのデフォルトシは {{ic|/etc/default/useradd}} で設定できます。
* {{ic|-s}} ではユーザーのデフォルトログインシェルのパスとファイル名を定義します; ブートプロセスが完了した後、ここに指定したシェルがデフォルトのログインシェルになります; [[Bash]] 以外のシェルを使うのなら、その選んだシェルのパッケージをインストールしておいてください。
 
   
{{Warning|ログインシェルは {{ic|/etc/shells}} に記載されている必要がありま。[[PAM]] を使うプログラムでは、{{ic|pam_shell}} モジュールによってチェックされます。}}
+
{{Warning|ログインできるようにするには、ログインシェルは {{ic|/etc/shells}} に記載されているものでなければなりませんさもないと、[[PAM]] モジュール {{ic|pam_shell}} はログイン要求を拒否します。}}
   
{{Note|新しく作成たユーザにはパスワードを設定する必要があります。[[#ユーザー管理の他の|下]]で説明されているように ''passwd'' を使。}}
+
{{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}} という名前の新しいユーザを追加しBash ログインシェルに指定し、{{ic|wheel}} グループに追加するには以下のコマンドを使ます (詳しくは [[#ユーザーグループ]] を参照):
+
以下のコマンドは、{{ic|archie}} という名前の新しいユーザを追加し、ホームディレクトリ作成し、グループ、ディレクトリ名、使用されシェル、それ他のパラメータ関してすべてデフォルト値を使用します:
   
# useradd -m -G wheel -s /bin/bash archie
+
# useradd -m archie
   
  +
新しく作成したユーザ {{ic|archie}} をパスワードで保護する必要はありませんが、パスワードで保護することが強く推奨されます:
{{Tip|ユーザーをグループに追加するのに躊躇する必要はありません。特定のアプリケーションをインストールしたり、何らかの設定をする場合など、必要に応じてユーザーをグループに追加する機会があるはずです。}}
 
   
新しく作成したユーザー {{ic|archie}} にパスワードを設定する必要は必ずしもありませんが、設定することを強く推奨します:
 
 
# passwd archie
 
# passwd archie
   
上記の ''useradd'' コマンドは {{ic|archie}} という名前のグループも自動的に作成し、ユーザー {{ic|archie}} UID と同じ GID が設定されます。そしてロイン時に {{ic|archie}} のデフォルトグループになります。ユーザ追加するときは各ユーザーグループをが推奨されています (ユーザー名と同じグループ名、UID と同じ GID)
+
上記の ''useradd'' コマンドは、同時に {{ic|archie}} という名前のグループも自動的に作成し、のグループを {{ic|archie}} のデフォルトグループとします。ユーザを作成する際に各ユーザに (そのユザと同じ名前の) 独自のグループを持たせことが推奨されています。
   
  +
{{ic|-g}} オプションを使うことで別のグループをデフォルトグループにすることもできますが、マルチユーザシステムにおいてすべてのユーザが単一のデフォルトグループ ([[#使われなくなったグループ|{{ic|users}}]] など) を使用することは推奨されていません。その理由は、特定のグループのユーザで書き込みアクセス権を共有する方法は、ユーザの [[umask]] 値を {{ic|002}} に設定するというものですが、これは、あなたが作成したすべてのファイルはデフォルトで常にデフォルトグループによってアクセス可能であることを意味するからです。[https://web.archive.org/web/20210724233134/https://security.ias.edu/node/441 User Private Groups] も参照してください。ユーザが特定のグループのメンバーになる必要がある場合、そのユーザを作成する際にそのグループを補助グループとして指定してください。
{{ic|users}} など別のグループをデフォルトにすることもできます:
 
   
  +
推奨されるシナリオ (デフォルトグループの名前がユーザ名と同じ場合) では、デフォルトですべてのファイルはそれらのファイルを作成したユーザのみが書き込み可能です。特定のグループに書き込みアクセスを許可したい場合、そのグループに属している全員に対して共有ファイル/ディレクトリを書き込み可能にすることで可能です。ディレクトリにグループの [[ファイルのパーミッションと属性|setgid]] ビットを設定することで、親ディレクトリを所有するグループに所有グループを自動的に固定することができます:
# useradd -m -g users -G wheel -s /bin/bash archie
 
 
ただし、マルチユーザーシステムではデフォルトグループを使用するのは推奨されていません。大抵、ホームディレクトリをプレイベートにしながら特定のユーザーのグループと書き込みアクセスを共有する方法としてユーザーの [[umask]] の値は {{ic|002}} に設定されており、デフォルトグループ (上の例なら {{ic|users}}) は作成したファイル全てへの書き込み権限をデフォルトで持つことになります。ユーザー名と同じ名前のグループによって所有されている、ユーザーのホームディレクトリは他のシステムユーザーには読み取り専用になり、共有ファイル・フォルダは適当なグループに入っているメンバーによってデフォルトで書き込み可能になります。ディレクトリにグループのスティッキービットを設定することで、親ディレクトリを所有するグループに所有グループを自動的に固定することができます:
 
   
 
# chmod g+s ''our_shared_directory''
 
# chmod g+s ''our_shared_directory''
   
そうない場合、ファイル作成者のデフォルトグループ (通常ユーザ名と同じです) が使れます。
+
そうない場合、ファイル作成者のデフォルトグループ (通常ユーザ名と同じ名前) が使用されます。
  +
  +
一時的に GID を変更する必要がある場合、''newgrp'' コマンドを使用することで実行時にユーザのフォルトの GID を他の GID に変更できます。例えば、{{ic|newgrp ''groupname''}} を実行したあと、そのユーザによって作成されたファイルは (再ログインの必要とせずに) {{ic|''groupname''}} の GID と関連付けられます。デフォルトの GID に戻すには、グループ名無しで ''newgrp'' を実行してください。
  +
  +
==== ユーザーのデフォルト設定を変更する ====
  +
  +
新しいアカウントを作成する際に用いられるデフォルト値は {{ic|/etc/default/useradd}} で設定されており、{{ic|useradd --defaults}} コマンドで確認できます。例えば、{{ic|1=SHELL=/usr/bin/zsh}} を設定すると、デフォルトのシェルをグローバルに (zsh へ) 変更できます。また、{{ic|-s}}/{{ic|--shell}} オプションを使えば、アカウント毎にシェルを設定できます。{{ic|chsh -l}} を使えば、有効なログインシェルを一覧表示できます。
  +
  +
{{ic|/etc/skel}} ディレクトリでは、新しく作成したユーザーのホームディレクトリへ追加するファイルを指定することもできます。これは、デスクトップ環境のような動作を実現するために設定ファイルを手動で編集する必要のあるミニマリズムなウィンドウマネージャにおいて便利です。例えば、新しく作成する全ユーザーに対してデフォルトのショートカットをセットアップするには:
  +
  +
# mkdir /etc/skel/.config
  +
# cp ~archie/.config/sxhkd /etc/skel/.config
   
  +
また、[[ディスプレイマネージャ#セッションとして ~/.xinitrc を実行]] では、全ユーザーに対してディスプレイマネージャで xinitrc をオプションとして追加する方法について説明されています。
一時的に GID を変更する必要がある場合、''newgrp'' コマンドを使ってユーザーのデフォルト GID を他の GID に変更できます。例えば、{{ic|newgrp ''groupname''}} を実行するとユーザーによって作成されたファイルの GID は {{ic|''groupname''}} になります。ログインしなおす必要はありません。デフォルト GID に戻すには、グループ名を何も付けずに ''newgrp'' を実行してください。
 
   
 
=== システムユーザーを追加する例 ===
 
=== システムユーザーを追加する例 ===
164行目: 174行目:
 
以下のコマンドで、シェルへのアクセス権が無く、{{ic|home}} ディレクトリも持たないシステムユーザが作成されます (オプションで、{{ic|-U}} パラメータを追加するとユーザと同じ名前のグループも作成し、ユーザをそのグループに追加します):
 
以下のコマンドで、シェルへのアクセス権が無く、{{ic|home}} ディレクトリも持たないシステムユーザが作成されます (オプションで、{{ic|-U}} パラメータを追加するとユーザと同じ名前のグループも作成し、ユーザをそのグループに追加します):
   
# useradd -r -s /usr/bin/nologin ''username''
+
# 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 -r -u 850 -g 850 -s /usr/bin/nologin ''username''
+
# useradd --system -u 850 -g 850 -s /usr/bin/nologin ''username''
   
 
=== ユーザーのログイン名やホームディレクトリを変更する ===
 
=== ユーザーのログイン名やホームディレクトリを変更する ===
176行目: 186行目:
 
# usermod -d /my/new/home -m ''username''
 
# usermod -d /my/new/home -m ''username''
   
  +
このコマンドの {{ic|-m}} オプションは、自動的に新しいホームディレクトリを作成し、旧ホームディエレクトリ内の内容をそこへ移動します。
The {{ic|-m}} option also automatically creates the new directory and moves the content there.
 
   
  +
{{Tip|旧ホームディレクトリから新しいホームディレクトリへのリンクを作成することもできます。こうすることで、パスがハードコードされているプログラムがファイルを見つけれられるようになります。
{{Tip|You can create a link from the user's former home directory to the new one. Doing this will allow programs to find files that have hardcoded paths.
 
   
 
# ln -s /my/new/home/ /my/old/home
 
# ln -s /my/new/home/ /my/old/home
   
  +
{{ic|/my/old/home}} の末尾に {{ic|/}} が'''存在しない'''ことを確認してください。
Make sure there is '''no''' trailing {{ic|/}} on {{ic|/my/old/home}}.
 
 
}}
 
}}
   
  +
ユーザのログイン名を変更するには:
To change a user's login name:
 
   
 
# usermod -l ''newname'' ''oldname''
 
# usermod -l ''newname'' ''oldname''
   
{{Warning|ユーザー名を変更するときは、変更対象のユーザーでログインしていないことを確認してください。新しい tty を開いて ({{ic|Ctrl+Alt+F1}})root または他のユーザーでログインするか su で root になってください。usermod を使うことで間違えてユーザー名を変更することを防ぐことができます。}}
+
{{Warning|ユーザー名を変更するときは、変更対象のユーザーでログインしていないことを確認してください。新しい tty を開いて (例: {{ic|Ctrl+Alt+F6}}) root としてログインするか、他のユーザから [[アプリケーション一覧/セキュリティ#管理者権限|root に昇格]]してください。''usermod'' を使うことで間違えてユーザー名を変更することを防ぐことができます。}}
   
ユーザー名の変更は [[#ユーザー管理の他の例|usermod]] コマンドを使って正しく行えば安全簡単です。ユーザーが同じ名前のグループに属している場合、[[#グループ管理|groupmod]] コマンドで変更できます。
+
ユーザー名の変更は [[#ユーザー管理の他の例|usermod]] コマンドを使って正しく行えば安全かつ簡単です。ユーザーが同じ名前のグループに属している場合、[[#グループ管理|groupmod]] コマンドで変更できます。
   
また、{{ic|/etc/passwd}} ファイルを直接編集する方法もあります。詳しくは[[#ユーザーデータベース|ユーザーデータベース]]を見てください。
+
また、{{ic|/etc/passwd}} ファイルを直接編集する方法もあります。詳しくは [[#ユーザーデータベース]] を見てください。
   
  +
また、以下のことにも気をつけてください:
Also keep in mind the following notes:
 
   
*[[sudo]] を使用する場合 {{ic|/etc/sudoers}} を更新して新しいユーザー名を反映させてください (root で visudo コマンドを使用)。
+
* [[sudo]] を使用する場合{{ic|/etc/sudoers}} を更新して新しいユーザー名を反映させてください (root で ''visudo'' コマンドを使用)。
*個人用の [[cron#Crontab のフォーマット|crontab]] は {{ic|/var/spool/cron}} のユーザーファイルを古い名前から新しい名前に変更し、{{ic|crontab -e}} を開いて相対パスを変更してファイルのパーミッションも調整ます。
+
* 個人用の [[cron#Crontab のフォーマット|crontab]] は{{ic|/var/spool/cron}} のユーザーファイルを古い名前から新しい名前に変更し、{{ic|crontab -e}} を開いて相対パスを変更してファイルのパーミッションも調整する必要があります。
* [[Wine]] の個人用フォルダ・ファイルコンテンツ {{ic|~/.wine/drive_c/users}}, {{ic|~/.local/share/applications/wine/Programs}} は手動で名前を変更編集する必要があります。
+
* {{ic|~/.wine/drive_c/users}}{{ic|~/.local/share/applications/wine/Programs}} などの中にある [[Wine]] の個人用フォルダ/ファイルのコンテンツは手動で名前を変更/編集する必要があります。
  +
* [https://www.enigmail.net/index.php/en/ Enigmail] など特定の Thunderbird アドオンは再インストールが必要かもしれません。
*Firefox における[[Firefox#スペルチェック用の辞書|スペルチェックの有効化]]は再度行って下さい。そうしないとユーザーの名前を変更後、スペルチェックが実行されません。
 
  +
* ホームディレクトリの絶対パス (つまり {{ic|/home/oldname}}) を使っているファイル (デスクトップショートカット、シェルスクリプトなど) は、ホームディレクトリの名前の変更を反映させる必要があります。シェルスクリプトでこういう問題が起こらないようにするには、ホームディレクトリを指定するときに {{Ic|~}} や {{Ic|$HOME}} 変数を使いましょう。
*[http://enigmail.mozdev.org/home/index.php Enigmail] など特定の Thunderbird アドオンは再インストールが必要です。
 
  +
* また {{ic|/etc/}} の設定ファイルで絶対パスを使っている場合は忘れずに編集してください (Samba や CUPS など)。どのファイルを編集すればいいかわからないときは grep コマンドを使います: {{ic|grep -r ''old_user'' *}}。
*ホームディレクトリの絶対パス ({{ic|/home/oldname}}) を使っているファイル (デスクトップショートカット, シェルスクリプトなど) は新しいホームを使うように修正する必要があります。シェルスクリプトではこういう問題が起こらないように、ホームディレクトリを指定するときは {{Ic|~}} や {{Ic|$HOME}} 変数を使いましょう。
 
*また {{ic|/etc}} の設定ファイルで絶対パスを使っている場合は忘れずに編集してください (Samba や CUPS など)。どのファイルを編集すればいいかわからないときは grep コマンドを使います: {{ic|grep -r {old_user} *}}。
 
   
 
=== ユーザー管理の他の例 ===
 
=== ユーザー管理の他の例 ===
   
  +
[[#ユーザーデータベース|GECOS]] コメントにユーザ情報を入力するには (フルのユーザ名など)、以下を実行してください:
ユーザーのログイン名を変更するには:
 
   
# usermod -l ''newname'' ''oldname''
+
# chfn ''username''
   
  +
(この方法では ''chfn'' はインタラクティブモードで実行します)。
ユーザーのホームディレクトリを変更するには:
 
   
  +
あるいは、以下のように自由に GECOS コメントを設定することもできます:
# usermod -d /my/new/home -m ''username''
 
   
  +
# usermod -c "Comment" ''username''
{{ic|-m}} オプションを付けると自動的に新しいディレクトリが作成され中身が移動します。
 
   
  +
ユーザーのパスワードを期限切れにして、次にログインした時に新しいパスワードを作るよう求めたいときは、次を実行してください:
{{Tip|古いホームディレクトリから新しいホームディレクトリにリンクを貼ることもできます。次のコマンドを実行することでパスがハードコードされている場合でもプログラムからファイルを認識できるようになります ({{ic|/my/old/home}} の末尾に {{ic|/}} を付けないように注意してください): {{ic|# ln -s /my/new/home/ /my/old/home}}。}}
 
   
  +
# chage -d 0 ''username''
ユーザーを他のグループに追加するには:
 
# usermod -aG [additional_groups] [username]
 
   
  +
''userdel'' コマンドでユーザアカウントを削除できます:
{{Warning|上の {{ic|usermod}} コマンドで {{ic|-a}} オプションを外した場合、ユーザーは {{ic|[additional_groups]}} 以外の全てのグループから削除されます (言い換えるとユーザーは {{ic|[additional_groups]}} のグループのメンバーだけになるということです)。}}
 
 
また、gpasswd を使うことも可能です。ただし一度に追加(もしくは削除)できるグループは一つだけになります。
 
# gpasswd --add [username] [group]
 
 
''GECOS'' (例: フルネーム) のユーザー情報を入力するには:
 
 
# chfn [username]
 
 
(インタラクティブモードで {{ic|chfn}} が起動します)。
 
 
ユーザーのパスワードを設定するには:
 
 
# passwd [username]
 
 
ユーザーのパスワードを期限切れにして、次にログインした時に新しいパスワードを作るよう求めたいときは、次を実行してください:
 
   
# chage -d 0 [username]
+
# userdel -r ''username''
   
  +
''userdel'' の {{ic|-r}} オプションは、ユーザのホームディレクトリとメールスプールも削除します。
ユーザーアカウントは {{ic|userdel}} コマンドで削除できます。
 
   
  +
ユーザのログインシェルを変更するには:
# userdel -r [username]
 
   
  +
# usermod -s ''/usr/bin/bash'' ''username''
{{ic|-r}} オプションはユーザーのホームディレクトリとメールスプールも削除します。
 
   
{{Tip|[[AUR]] のパッケージ {{AUR|adduser}} には ''useradd'', ''chfn'', ''passwd'' を対話式に行うことができる ''adduser'' スクリプトが入っています。{{Bug|32893}} 参照。}}
+
{{Tip|[[AUR]] のパッケージ {{AUR|adduser}} には ''useradd''''chfn''''passwd'' を対話式に行うことができる ''adduser'' スクリプトが入っています。{{Bug|32893}} 参照してください。}}
   
 
== ユーザーデータベース ==
 
== ユーザーデータベース ==
   
ローカルユーザの情報はプレーンテキストの {{ic|/etc/passwd}} ファイルに保存されます。このファイル内の各行は1つのユーザアカウントを表しており、7つのフィールドがコンで区切られて記述されています。
+
ローカルユーザの情報はプレーンテキストの {{ic|/etc/passwd}} ファイルに保存されます。このファイル内の各行は1つのユーザアカウントを表しており、7つのフィールドがコンで区切られて記述されています。
   
 
''account:password:UID:GID:GECOS:directory:shell''
 
''account:password:UID:GID:GECOS:directory:shell''
263行目: 256行目:
 
* {{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]] を使用しています。
275行目: 268行目:
 
# pwck -s
 
# pwck -s
   
{{Warning|{{Pkg|filesystem}} パッケージの新しいリリースがインストールされた際に、Arch Linux のデフォルトのファイルが ''.pacnew'' ファイルとして作成されます。Pacman が、アクションを促すメッセージを出力しない限り、これらの ''.pacnew'' ファイルは無視/削除できます (そして、そうすべきです)。必要な新しいデフォルトユーザとグループは、必要に応じて {{man|8|systemd-sysusers}} またはパッケージのインストールスクリプトによって追加/再追加されます。}}
+
{{Warning|{{Pkg|filesystem}} パッケージの新しいリリースがインストールされた際に、Arch Linux のデフォルトのファイルが [[pacnew ファイル]]として作成されます。Pacman が、アクションを促すメッセージを出力しない限り、これらの ''.pacnew'' ファイルは無視/削除できます (そして、そうすべきです)。必要な新しいデフォルトユーザとグループは、必要に応じて {{man|8|systemd-sysusers}} またはパッケージのインストールスクリプトによって追加/再追加されます。}}
   
 
== 自動整合性チェック ==
 
== 自動整合性チェック ==
366行目: 359行目:
 
| 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]] シリアルポートや、それらに接続されているデバイス。
 
| 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 || || 管理者グループ。一般的に、管理者アクションを実行する権限を与えるために使用されます。このグループは [[journal]] ファイルへの完全な読み取りアクセス権と、[[CUPS]] でプリンタを管理する権限を持ちます。また、[[sudo]] や [[su]] ユーティリへのアクセス権を与えるためにも使用されます (どちらのユーティリティもデフォルトではこのグループを使用しません)。
+
| wheel || || 管理者グループ。一般的に、管理者アクションを実行する権限を与えるために使用されます。このグループは [[journal]] ファイルへの完全な読み取りアクセス権と、[[CUPS]] でプリンタを管理する権限を持ちます。また、[[sudo]] や [[su]] ユーティリティへのアクセス権を与えるためにも使用されます (どちらのユーティリティもデフォルトではこのグループを使用しません)。
 
|}
 
|}
   
446行目: 439行目:
 
| mem || ||
 
| mem || ||
 
|-
 
|-
| network || || デフォルトで使用されません。NetworkManager を使用する権限を与える場合などに使えます ([[NetworkManager#PolicyKit パーミッションの設定]]を参照)。
+
| network || || デフォルトで使用されません。NetworkManager を使用する権限を与える場合などに使えます ([[NetworkManager#PolicyKit パーミッションをセットアップする]]を参照)。
 
|-
 
|-
 
| power || ||
 
| power || ||
461行目: 454行目:
 
{{man|1|getent}} を使用することで特定のレコードを読み出すことができます。
 
{{man|1|getent}} を使用することで特定のレコードを読み出すことができます。
   
% getent group tty
+
$ 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-03-08|801331}}

2024年3月8日 (金) 17:58時点における最新版

関連記事

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--- はファイルの所有者と所有グループに属すユーザーが読み込み・書き込み・実行の全てができ (rwxrwx)、他のユーザーはアクセスを拒否される (---) ことを示しています。一番最初の文字はファイルのタイプです。

あるユーザーやグループによって所有されているファイルを一覧するには 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 で設定できます。
警告: ログインできるようにするには、ログインシェルは /etc/shells に記載されているものでなければなりません。さもないと、PAM モジュール pam_shell はログイン要求を拒否します。
ノート: 新しく作成されたユーザには、#ユーザーを追加する例 で説明されているように passwd を使ってパスワードを設定しなければなりません。

初期のログイングループを名前か番号で指定する場合、すでに存在しているグループを参照しなければなりません。指定しない場合、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/zsh を設定すると、デフォルトのシェルをグローバルに (zsh へ) 変更できます。また、-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 オプションは、自動的に新しいホームディレクトリを作成し、旧ホームディエレクトリ内の内容をそこへ移動します。

ヒント: 旧ホームディレクトリから新しいホームディレクトリへのリンクを作成することもできます。こうすることで、パスがハードコードされているプログラムがファイルを見つけれられるようになります。
# ln -s /my/new/home/ /my/old/home

/my/old/home の末尾に /存在しないことを確認してください。

ユーザのログイン名を変更するには:

# usermod -l newname oldname
警告: ユーザー名を変更するときは、変更対象のユーザーでログインしていないことを確認してください。新しい tty を開いて (例: Ctrl+Alt+F6) root としてログインするか、他のユーザから root に昇格してください。usermod を使うことで間違えてユーザー名を変更することを防ぐことができます。

ユーザー名の変更は 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
ヒント: AUR のパッケージ adduserAUR には useraddchfnpasswd を対話式に行うことができる adduser スクリプトが入っています。FS#32893 も参照してください。

ユーザーデータベース

ローカルユーザの情報はプレーンテキストの /etc/passwd ファイルに保存されます。このファイル内の各行は1つのユーザアカウントを表しており、7つのフィールドがコロンで区切られて記述されています。

account:password:UID:GID:GECOS:directory:shell

それぞれのフィールドの意味は以下のとおりです:

  • account はユーザ名です。このフィールドを空白にすることはできません。標準的な *NIX の命名規則が適用されます。
  • password はユーザのパスワードです。
    警告: passwd ファイルは全ユーザが読むことができます。なので、パスワード (ハッシュ化されているものなど) をこのファイルに保存することは安全ではありません。代わりに、Arch Linux ではシャドウパスワードが使用されます。この場合、password フィールドにはプレースホルダー文字 (x) が代わりに記入され、アクセスが制限されている /etc/shadow ファイルにハッシュ化されたパスワードが保存されていることを示します。そのような理由により、パスワードの変更には必ず passwd コマンドを使用することが推奨されます。
  • 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
警告: filesystem パッケージの新しいリリースがインストールされた際に、Arch Linux のデフォルトのファイルが pacnew ファイルとして作成されます。Pacman が、アクションを促すメッセージを出力しない限り、これらの .pacnew ファイルは無視/削除できます (そして、そうすべきです)。必要な新しいデフォルトユーザとグループは、必要に応じて systemd-sysusers(8) またはパッケージのインストールスクリプトによって追加/再追加されます。

自動整合性チェック

pwckgrpck を自分で実行する代わりに、Systemd タイマー shadow.timershadow.service を毎日実行します (shadow.timershadow パッケージの一部であり、このパッケージのインストール時に自動で有効化されます)。shadow.servicepwck(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
警告: 上記の usermod コマンドで -a オプションを使用しない場合、ユーザは additional_groups に含まれれていないグループすべてから削除されます (つまり、ユーザの属するグループは additional_groups に含まれているグループだけになるということです)。

groupmod コマンドで既存のグループを変更できます。例えば、old_group グループの名前を new_group に変更するには:

# groupmod -n new_group old_group
ノート: このコマンドはグループの名前を変更しますが、GID の数値は変更しません。なので、old_group によって以前所有されていたすべてのファイルは、new_group によって所有されるようになります。

既存のグループを削除するには:

# groupdel group

グループからユーザを削除するには:

# gpasswd -d user group

grpck コマンドを使用することでシステムのグループファイルの整合性を検証できます。

警告: filesystem パッケージの新しいリリースがインストールされた際に、Arch Linux のデフォルトのファイルが .pacnew ファイルとして作成されます。Pacman が、アクションを促すメッセージを出力しない限り、これらの .pacnew ファイルは無視/削除できます (そして、そうすべきです)。必要な新しいデフォルトユーザとグループは、必要に応じて systemd-sysusers(8) またはパッケージのインストールスクリプトによって追加/再追加されます。

グループ一覧

このセクションでは filesystem パッケージに含まれている主要なグループの用途を説明します。他にもグループは存在し、パッケージがインストールされたときに適当な GID を使って作成されます。詳しくはグループに関連するソフトウェアのページを見てください。

ノート: パッケージを削除しても、自動的に作成されたユーザーやグループ (UID/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 のログへの読み取り専用アクセスを提供します。admwheel の代わりとして使用されます [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 でプリンタを管理する権限を持ちます。また、sudosu ユーティリティへのアクセス権を与えるためにも使用されます (どちらのユーティリティもデフォルトではこのグループを使用しません)。

システムグループ

以下のグループはシステムのために使用されます。これらのグループへのユーザの割り当ては、限られた目的においてのみ必要になります:

グループ 影響を受けるファイル 目的
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]* パラレルポートのデバイスへのアクセス (プリンタなど)。
mail /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 タグを付け、現在どのセッションがアクティブであるかに応じて logindACL を使って動的にユーザに権限を割り当てています。この仕組みを機能させるにはセッションが破壊されないようにしなければなりません (一般的なトラブルシューティング#セッションのパーミッションを参照)。

グループによってはユーザーを追加しなくてはいけない例外も存在します: 例えば、ログインしていない状態でユーザーからデバイスにアクセスしたい場合など。ただし、グループにユーザーを追加すると機能が破壊されることもあるので注意してください (例えば audio グループを使用するとユーザーの高速切り替えが無効化されソフトウェアミキシングができなくなります)。

グループ 影響を受けるファイル 目的
audio /dev/audio, /dev/snd/*, /dev/rtc0 全てのセッションでのサウンドハードウェアへの直接アクセス。リモートセッションで ALSAOSS を動作させるにはいまだに必要になります (ALSA#ユーザー権限 を見てください)。ユーザーにリアルタイムプロセスの権限を与えるために JACK でも使われています。
disk /dev/sd[a-zA-Z]*[1-9]* opticalfloppystorage など他のグループによる影響を受けないブロックデバイスへのアクセス。
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.defsUSERGROUPS_ENAB no を設定したり、useradd-N/--no-user-group オプションを使用したりしてユーザを作成する場合など) ユーザープライベートグループを使用しない場合 (通常、推奨されません) のユーザのプライマリグループです。

これらのデータベースに関連した他のツール

この記事またはセクションの正確性には問題があります。
理由: Arch Linux は本当に vipw -svigr -s よりも chage を推奨しているのか? (議論: トーク:ユーザーとグループ#)

getent(1) を使用することで特定のレコードを読み出すことができます。

$ getent group tty

#ユーザーデータベースで警告されているように、このようなデータベースを変更する際には、passwdchfn といった特定のユーティリティを使うほうが良いです。それでもやはり、直接編集するほうが良い場合もあります。そのような場合のために vipwvigr が提供されています。これらのツールはデータベースをロックして同時に編集されるのを防ぐので、一般的なテキストエディタよりもこれらの専用のエディターを使うことが強く推奨されます。また、これらのツールは無効なエントリや構文エラーを防止します。Arch Linux ではシャドウデータベースの変更するために util-linuxvipw -svigr -s よりも特定のツール (chage など) の使用を推奨していることに注意してください。FS#31414 も参照してください。

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