# Users and Groups (日本語)

関連記事

- DeveloperWiki:UID / GID Database
- polkit
- chmod
- ユーザーネームの変更

GNU/Linux ではユーザーやグループはアクセス制御のために使われています — つまり、システムのファイル、ディレクトリ、周辺機器へのアクセスのコントロールに使われます。Linux は比較的シンプルかつ粗っぽいアクセス制御メカニズムをデフォルトで提供します。高度な制御については、ACL や LDAP Authentication を見て下さい。

## 概要

ユーザーとはコンピュータを使う全ての人のことです。ここで、名前がユーザーを表すことを説明しましょう。名前は Mary や Bill という風につけられ、実名のかわりに Dragonlady や Pirate といった名前を使うことができます。重要なのはコンピュータはそれぞれのアカウントに名前をつけていて、人々がコンピュータを使うためのアクセスを得るために名前を使うということです。システムサービスによっては制限・特権ユーザーアカウントを使って動作させることもあります。

特定の方法でアクセスを制限することでセキュリティのためにユーザーの管理が行われます。スーパーユーザー (root) はオペレーティングシステムと設定全てにアクセスすることができます。そのため管理用途だけに使われることが想定されています。特権がないユーザーは su や sudo などのプログラムを使うことで特権を一時的に昇格することが可能です。

作成するアカウントにそれぞれ異なる名前を使えば、人々は複数のアカウントを持つことが可能です。さらに、"root" など、使うことができない予約済みの名前も存在します。

ユーザーは"グループ"に入れることでグループづけでき、グループに入ることでユーザーはグループで認められた特権的アクセスを利用することができます。

Note: ビギナーはツールを気をつけて使って下さい、自分のアカウント以外の既存の他のユーザーアカウントをいじらないようにしましょう。

## パーミッションと所有権

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 において全てのファイルはユーザーとグループによって所有されます。加えて、アクセス許可の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 [group]

    # find / -user [user]

ファイルの所有ユーザーやグループは `chown` (change owner) コマンドで変更できます。ファイルのアクセス許可を変更するコマンドは `chmod` (change mode) です。

詳しくは man chown, man chmod, や Linux file permissions を見て下さい。

## ファイル一覧

Warning: 以下のファイルを直接編集してはいけません。ロックを正しく使ってデータベースのフォーマットを崩すことを避けるユーティリティが存在します。#ユーザー管理 や #グループ管理 を見て下さい。

ファイル | 目的
--- | ---
`/etc/shadow` | セキュアなユーザーアカウント情報
`/etc/passwd` | ユーザーアカウント情報
`/etc/gshadow` | グループアカウントの暗号化された情報
`/etc/group` | ユーザーが属するグループの定義
`/etc/sudoers` | sudo を実行できるユーザーのリスト
`/home/*` | ホームディレクトリ

## ユーザー管理

現在システムにログインしているユーザーを一覧するには `who` コマンドを使います。

新しいユーザーを追加するときは `useradd` コマンドを使って下さい:

    # useradd -m -g [initial_group] -G [additional_groups] -s [login_shell] [username]

- `-m` を使うとユーザーのホームディレクトリ `/home/[username]` を作成します; ホームディレクトリの中では、root でないユーザーがファイルの書き込み・削除、プログラムのインストールなどができます。
- `-g` でユーザーのイニシャルログイングループのグループ名・ナンバーを定義します; グループ名が存在していなければなりません; グループナンバーが指定された時は、そのナンバーが既存のグループに参照されている必要があります; 指定されなかった場合は、useradd の挙動は `/etc/login.defs` 内の `USERGROUPS_ENAB` に基づきます。
- `-G` はユーザーがメンバーになる追加グループ（のリスト）を指定します; グループはそれぞれカンマで区切り、スペースを入れてはいけません; デフォルトはイニシャルグループにだけユーザーを属させます。
- `-s` ではユーザーのデフォルトログインシェルのパスとファイル名を定義します; ブートプロセスが完了した後、ここに指定したシェルがデフォルトのログインシェルになります; Bash 以外のシェルを使うのなら、その選んだシェルのパッケージをインストールしておいてください。

Warning: ログインシェルは `/etc/shells` に記載されている必要があります。PAM を使うプログラムでは、`pam_shells` モジュールによってチェックされます。

典型的なデスクトップの例として、bash をログインシェルに指定して archie という名前のユーザーを追加:

    # useradd -m -g users -G wheel -s /bin/bash archie

後でユーザーを他のグループに追加するには:

    # usermod -aG [additional_groups] [username]

また、gpasswd を使うことも可能です。ただし一度に追加（もしくは削除）できるグループは一つだけになります。

    # gpasswd --add [username] [group]

Warning: 上の `usermod` コマンドで `-a` オプションを外した場合、ユーザーは `[additional_groups]` 以外の全てのグループから削除されます (言い換えるとユーザーは `[additional_groups]` のグループのメンバーだけになるということです)。

GECOS (例: フルネーム) のユーザー情報を入力するには:

    # chfn [username]

(インタラクティブモードで `chfn` が起動します)。

ユーザーのパスワードを設定するには:

    # passwd [username]

ユーザーのパスワードを期限切れにして、次にログインした時に新しいパスワードを作るよう求めたいときは、次を実行してください:

    # chage -d 0 [username]

ユーザーアカウントは `userdel` コマンドで削除できます。

    # userdel -r [username]

`-r` オプションはユーザーのホームディレクトリとメールスプールも削除します。

### ユーザーデータベース

ローカルユーザー情報は `/etc/passwd` ファイルに保存されます。システム内の全てのユーザーアカウントを一覧するには:

    $ cat /etc/passwd

一行毎にアカウントが表示され、そのフォーマットは:

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

それぞれの意味:

- `account` はユーザーの名前
- `password` はユーザーのパスワード
- `UID` は数字のユーザー ID
- `GID` はユーザーの数字のプライマリーグループ ID
- `GECOS` は任意のフィールドでユーザーの情報を格納します; 通常ユーザーのフルネームを含めます
- `directory` はユーザーの `$HOME` ディレクトリ
- `shell` はユーザーのコマンドインタプリタ (デフォルトは `/bin/sh`)

Note: Arch Linux は暗号化したパスワードを使っています。`passwd` ファイルは誰からも読めるようになっており、（ハッシュ化されているかどうかにかかわらず）パスワードをこのファイルに保存するのは安全ではありません。代わりに、`password` にはハッシュ化されたパスワードがアクセスが制限されたファイル `/etc/shadow` に保存されていることを示すプレースホルダ文字 (`x`) が入ります。

## グループ管理

`/etc/group` がシステム上のグループを定義するファイルです (詳しくは `man group`)。

`groups` コマンドでグループのメンバーを表示できます:

    $ groups [user]

`user` を省略すると、現在使っているユーザーのグループ名が表示されます。

`id` コマンドはユーザーの UID や関連付けられた GID などの詳細情報を表示します:

    $ id [user]

システム上の全てのグループを一覧するには:

    $ cat /etc/group

`groupadd` コマンドで新しいグループを作成できます:

    # groupadd [group]

そしてユーザーをグループに追加するには `gpasswd` コマンドを使います:

    # gpasswd -a [user] [group]

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

    # groupdel [group]

グループからユーザーを外すには:

    # gpasswd -d [user] [group]

グループに追加・削除したいユーザーがログイン中の場合、一度ログアウトしないと変更が適用されません。

## グループ一覧

### ユーザーグループ

Note:

- logind セッションが壊されない限り、サウンド、3D、プリント、マウントなど普通のデスクトップで使うために必要なグループはありません (General Troubleshooting#Session permissions を見て確認してください)。

ワークステーション/デスクトップユーザーはしばしば root でないユーザーを以下のグループに追加することで周辺機器やハードウェアのアクセスを許可したりシステム管理を楽にします:

グループ | 影響があるファイル | 目的
--- | --- | ---
camera |  | デジタルカメラのアクセス。
floppy | `/dev/fd[0-9]` | フロッピーディスクのアクセス。
games | `/var/games` | ゲームソフトウェアへのアクセス。
locate | `/usr/bin/locate`, `/var/lib/locate`, `/var/lib/mlocate`, `/var/lib/slocate` | updatedb コマンドを使う権利。
networkmanager |  | NetworkManager でワイヤレス接続するユーザーに必要。Arch ではこのグループはデフォルトで含まれていないので手動で追加する必要があります。
rfkill | `/dev/rfkill` | 無線デバイスのパワーステートをコントロールする権限 (rfkill が使用)。
users |  | 標準のユーザーグループ。
uucp | `/dev/ttyS[0-9]`, `/dev/tts/[0-9]` | モデムやハンドヘルド、RS-232 シリアルポートなどのシリアル・USB デバイス。
wheel |  | 管理作業用グループ、通常 sudo や su コマンドに権限をわたすのに使われます (デフォルトではどちらも wheel を使いません、`/etc/pam.d/su` や `/etc/pam.d/su-l` で設定ができます)。

### システムグループ

以下のグループはシステムのために使われるものです。駆け出しの Arch ユーザーには使う必要がありません:

Note:

- 以下のグループには arch が systemd に移行する前、使用する必要があったものがあります。Systemd (日本語)#追加情報 を見て下さい。

グループ | 影響があるファイル | 目的
--- | --- | ---
audio | `/dev/audio`, `/dev/snd/*`, `/dev/rtc0` | 全てのセッションでのサウンドハードウェアへの直接アクセス (ALSA と OSS によって必要)。ローカルセッションはすでにサウンドを再生したりミキサーを操作することができます。
avahi |  |
bin | なし | 歴史的な要因で残っているグループ
clamav | `/var/lib/clamav/*`, `/var/log/clamav/*` | Clam AntiVirus によって使われます。
daemon |  |
dbus | `/var/run/dbus/*` |
disk | `/dev/sda[1-9]`, `/dev/sdb[1-9]` | optical, floppy, storage など他のグループによる影響を受けないブロックデバイスへのアクセス
ftp | `/srv/ftp` | Proftpd などの FTP サーバーによって使われます
fuse |  | ユーザーマウントを許可するために fuse によって使われます。
gdm | X server authorization directory (ServAuthDir) | GDM グループ。
http |  |
kmem | `/dev/port`, `/dev/mem`, `/dev/kmem` |
log | `/var/log/*` | `/var/log` のログファイルへのアクセス
lp | `/etc/cups`, `/var/log/cups`, `/var/cache/cups`, `/var/spool/cups` | プリンターハードウェアへのアクセス; プリンタージョブの管理を有効にします。
mail | `/usr/bin/mail` |
mem |  |
mpd | `/var/lib/mpd/*`, `/var/log/mpd/*`, `/var/run/mpd/*`, 任意の音楽ディレクトリ | MPD グループ。
network |  | NetworkManager を使うときなどにネットワーク設定を変更する権限。
nobody |  | 非特権グループ。
ntp | `/var/lib/ntp/*` | NTPd グループ。
optical | `/dev/sr[0-9]`, `/dev/sg[0-9]` | CD や DVD ドライブなどオプティカルドライブへのアクセス。
policykit |  | PolicyKit グループ。
power |  | Pm-utils (サスペンド, ハイバネート...) などの電源管理コントロールを使う権限。
root | `/*` | 完全なシステム管理とコントロール (root, admin)。
scanner | `/var/lock/sane` | スキャナーハードウェアへのアクセス。
smmsp |  | sendmail グループ。
storage |  | USB ハードドライブ、フラッシュ・ジャンプドライブ、MP3 プレイヤーなどリムーバルドライブへのアクセス; ストレージデバイスのマウントを有効にする。
sys |  | CUPS でプリンターを管理する権限。
systemd-journal | `/var/log/journal/*` | systemd の完全なログへのアクセス。これがないと、ユーザーが生成したメッセージだけが表示されまう。
tty | `/dev/tty`, `/dev/vcc`, `/dev/vc`, `/dev/ptmx` | Eg. to acces `/dev/ACMx`
vboxsf | 仮想マシンの共有フォルダ | VirtualBox によって使われます。
video | `/dev/fb/0`, `/dev/misc/agpgart` | ビデオキャプチャデバイスや、2D/3D ハードウェアアクセラレーション、フレームバッファへのアクセス (このグループに属さなくても X は使えます)。ローカルセッションはすでにハードウェアアクセラレーションやビデオキャプチャが利用できます。

### ソフトウェアグループ

以下のグループはメンバーに特定のソフトウェアの利用を許可します:

グループ | 影響のあるファイル | 目的
--- | --- | ---
adbusers | `/dev/` 下のデバイスノード | Android Debugging Bridge にアクセスする権限。
cdemu | `/dev/vhba_ctl` | cdemu ドライブエミュレーションを使う権限。
thinkpad | `/dev/misc/nvram` | ThinkPad ユーザーによって tpb などのツールのアクセスのために使われます。
vboxusers | `/dev/vboxdrv` | VirtualBox ソフトウェアを使う権利。
vmware |  | VMware ソフトウェアを使う権限。
ssh |  | このグループのメンバーだけをログイン可能にするよう Sshd を設定できます。
wireshark |  | Wireshark でパケットをキャプチャする権限。

### 使われなくなったグループ

以下のグループは現在利用されていません:

グループ | 目的
--- | ---
stb-admin | system-tools-backends にアクセスする権限
kvm | root 以外のユーザーが KVM を使って仮想マシンにアクセスできるようにするために `kvm` グループが使われていました。udev ルールに取って代わって廃止され、自動的に行われるようになっています。

Category:

- Security (日本語)