ユーザーとグループ
GNU/Linux ではユーザーやグループはアクセス制御のために使われています — つまり、システムのファイル、ディレクトリ、周辺機器へのアクセスのコントロールに使われます。Linux は比較的シンプルかつ粗っぽいアクセス制御メカニズムをデフォルトで提供します。高度な制御については、ACL や LDAP Authentication を見て下さい。
目次
概要
ユーザーとはコンピュータを使う全ての人のことです。ここで、名前がユーザーを表すことを説明しましょう。名前は Mary や Bill という風につけられ、実名のかわりに Dragonlady や Pirate といった名前を使うことができます。重要なのはコンピュータはそれぞれのアカウントに名前をつけていて、人々がコンピュータを使うためのアクセスを得るために名前を使うということです。システムサービスによっては制限・特権ユーザーアカウントを使って動作させることもあります。
特定の方法でアクセスを制限することでセキュリティのためにユーザーの管理が行われます。スーパーユーザー (root) はオペレーティングシステムと設定全てにアクセスすることができます。そのため管理用途だけに使われることが想定されています。特権がないユーザーは su や sudo などのプログラムを使うことで特権を一時的に昇格することが可能です。
作成するアカウントにそれぞれ異なる名前を使えば、人々は複数のアカウントを持つことが可能です。さらに、"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 において全てのファイルはユーザーとグループによって所有されます。加えて、アクセス許可の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 を見て下さい。
ファイル一覧
ファイル | 目的 |
---|---|
/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
に基づきます。デフォルトの挙動 (USERGROUPS_ENAB yes
) ではユーザー名と同じ名前でグループを作成し、GID
はUID
と同じになります。-G
はユーザーがメンバーになる追加グループ(のリスト)を指定します; グループはそれぞれカンマで区切り、スペースを入れてはいけません; デフォルトはイニシャルグループにだけユーザーを属させます。-s
ではユーザーのデフォルトログインシェルのパスとファイル名を定義します; ブートプロセスが完了した後、ここに指定したシェルがデフォルトのログインシェルになります; Bash 以外のシェルを使うのなら、その選んだシェルのパッケージをインストールしておいてください。
ユーザーを追加する例
典型的なデスクトップシステムでは、archie
という名前の新しいユーザーを追加して、Bash をログインシェルに指定し、wheel
グループに追加するには以下のコマンドを使います (詳しくは #ユーザーグループ を参照):
# useradd -m -G wheel -s /bin/bash archie
このコマンドは archie
という名前のグループも自動的に作成し、ユーザー archie
の UID と同じ GID が設定されます。そしてログイン時に archie
のデフォルトグループになります。ユーザーを追加するときは各ユーザーにグループを作るのが推奨されています (ユーザー名と同じグループ名、UID と同じ GID)。
users
など別のグループをデフォルトにすることもできます:
# useradd -m -g users -G wheel -s /bin/bash archie
ただし、マルチユーザーシステムでは推奨されていません。大抵、ホームディレクトリをプレイベートにしながら特定のユーザーのグループと書き込みアクセスを共有する方法としてユーザーの umask の値は 002
に設定されており、デフォルトグループ (上の例なら users
) は作成したファイル全てへの書き込み権限をデフォルトで持つことになります。ユーザー名と同じ名前のグループによって所有されている、ユーザーのホームディレクトリは他のシステムユーザーには読み取り専用になり、共有ファイル・フォルダは適当なグループに入っているメンバーによってデフォルトで書き込み可能になります。ディレクトリにグループのスティッキービットを設定することで、親ディレクトリを所有するグループに所有グループを自動的に固定することができます:
# chmod g+s our_shared_directory
そうでない場合、ファイル作成者のデフォルトグループ (通常はユーザー名と同じです) が使われます。
ユーザー管理の他の例
ユーザーを他のグループに追加するには:
# usermod -aG [additional_groups] [username]
また、gpasswd を使うことも可能です。ただし一度に追加(もしくは削除)できるグループは一つだけになります。
# gpasswd --add [username] [group]
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
は数字のユーザー IDGID
はユーザーの数字のプライマリーグループ IDGECOS
は任意のフィールドでユーザーの情報を格納します; 通常ユーザーのフルネームを含めますdirectory
はユーザーの$HOME
ディレクトリshell
はユーザーのコマンドインタプリタ (デフォルトは/bin/sh
)
グループ管理
/etc/group
がシステム上のグループを定義するファイルです (詳しくは man group
)。
groups
コマンドでグループのメンバーを表示できます:
$ groups [user]
user
を省略すると、現在使っているユーザーのグループ名が表示されます。
id
コマンドはユーザーの UID や関連付けられた GID などの詳細情報を表示します:
$ id [user]
システム上の全てのグループを一覧するには:
$ cat /etc/group
groupadd
コマンドで新しいグループを作成できます:
# groupadd [group]
そしてユーザーをグループに追加するには gpasswd
コマンドを使います:
# gpasswd -a [user] [group]
既存のグループは groupmod
で修正します。例えば gid を変更せずに old_group
グループの名前を new_group
に変更するには (old_group
によって所有されていたファイルは全て new_group
によって所有されるようになります):
# groupmod -n [new_group] [old_group]
グループを削除するには:
# groupdel [group]
グループからユーザーを外すには:
# gpasswd -d [user] [group]
グループに追加・削除したいユーザーがログイン中の場合、一度ログアウトしないと変更が適用されません。
グループ一覧
ユーザーグループ
ワークステーション/デスクトップユーザーはしばしば root でないユーザーを以下のグループに追加することで周辺機器やハードウェアのアクセスを許可したりシステム管理を楽にします:
グループ | 影響があるファイル | 目的 |
---|---|---|
games | /var/games |
ゲームソフトウェアへのアクセス。 |
rfkill | /dev/rfkill |
無線デバイスのパワーステートをコントロールする権限 (rfkill が使用)。 |
users | 標準のユーザーグループ。 | |
uucp | /dev/ttyS[0-9] , /dev/tts/[0-9] , /dev/ttyACM[0-9] |
モデムやハンドヘルド、RS-232 シリアルポートなどのシリアル・USB デバイス。 |
wheel | 管理作業用グループ、通常 sudo や su コマンドに権限をわたすのに使われます (デフォルトではどちらも wheel を使いません、/etc/pam.d/su や /etc/pam.d/su-l で設定ができます)。journal ファイルへの完全な読み込みアクセスを取得するのにも使うことができます。
|
システムグループ
以下のグループはシステムのために使われるものです。駆け出しの Arch ユーザーには使う必要がありません:
グループ | 影響があるファイル | 目的 |
---|---|---|
bin | なし | 歴史的な要因で残っているグループ。 |
daemon | ||
dbus | dbus によって内部的に使用されます。 | |
ftp | /srv/ftp |
Proftpd などの FTP サーバーによって使われます。 |
fuse | ユーザーマウントを許可するために fuse によって使われます。 | |
http | ||
kmem | /dev/port , /dev/mem , /dev/kmem |
|
/usr/bin/mail |
||
mem | ||
nobody | 非特権グループ。 | |
polkitd | polkit グループ。 | |
root | /* |
完全なシステム管理とコントロール (root, admin)。 |
smmsp | sendmail グループ。 | |
systemd-journal | /var/log/journal/* |
systemd の完全なログへのアクセス。これがないと、ユーザーが生成したメッセージだけが表示されます。 |
tty | /dev/tty , /dev/vcc , /dev/vc , /dev/ptmx |
例: /dev/ACMx へのアクセス。
|
ソフトウェアグループ
以下のグループは特定のソフトウェアによって使われます。内部的に使用される場合もあり、その場合、ユーザーをグループに追加してはいけません。詳しくはソフトウェアのページを見て下さい。
グループ | 影響のあるファイル | 目的 |
---|---|---|
adbusers | /dev/ 下のデバイスノード |
Android Debugging Bridge にアクセスする権限。 |
avahi | ||
bumblebee | /run/bumblebee.socket |
Bumblebee で NVIDIA Optimus GPU を利用してアプリケーションを起動する権限。 |
cdemu | /dev/vhba_ctl |
CDemu ドライブエミュレーションを使う権限。 |
clamav | /var/lib/clamav/* , /var/log/clamav/* |
Clam AntiVirus によって使われます。 |
gdm | X サーバーの認証ディレクトリ (ServAuthDir) | GDM グループ。 |
locate | /usr/bin/locate , /var/lib/locate , /var/lib/mlocate , /var/lib/slocate |
updatedb コマンドを使う権利。 |
mpd | /var/lib/mpd/* , /var/log/mpd/* , /var/run/mpd/* , 任意の音楽ディレクトリ |
MPD グループ。 |
networkmanager | NetworkManager でワイヤレス接続するユーザーに必要。Arch ではこのグループはデフォルトで含まれていないので手動で追加する必要があります。 | |
ntp | /var/lib/ntp/* |
NTPd グループ。 |
thinkpad | /dev/misc/nvram |
ThinkPad ユーザーによって tpb などのツールのアクセスのために使われます。 |
vboxsf | 仮想マシンの共有フォルダ | VirtualBox によって使われます。 |
vboxusers | /dev/vboxdrv |
VirtualBox ソフトウェアを使う権利。 |
vmware | VMware ソフトウェアを使う権限。 | |
wireshark | Wireshark でパケットをキャプチャする権限。 |
使われなくなったグループ
以下のグループは現在利用されていません:
グループ | 目的 |
---|---|
log | syslog-ng によって作成された /var/log のログファイルへのアクセス。
|
ssh | このグループのメンバーだけをログイン可能にするよう Sshd を設定できます。 |
stb-admin | system-tools-backends にアクセスする権限。 |
kvm | 以前は root 以外のユーザーが KVM を使って仮想マシンにアクセスできるようにするために kvm グループが使われていました。udev ルールに取って代わって廃止され、自動的に行われるようになっています。
|
systemd 以前のグループ
以下のグループは arch が systemd に移行したことで必要なくなったグループです。logind セッションが破壊されないかぎり、必要になることはありません (一般的なトラブルシューティング#セッションのパーミッションを参照)。グループに追加すると逆に機能不全に陥る可能性もあります。詳しくは SysVinit#systemd への移行 を見て下さい。
グループ | 影響のあるファイル | 目的 |
---|---|---|
audio | /dev/audio , /dev/snd/* , /dev/rtc0 |
全てのセッションでのサウンドハードウェアへの直接アクセス (ALSA と OSS の両方で必要)。ローカルセッションはサウンドを再生したりミキサーを操作することができます。 |
camera | デジタルカメラへのアクセス。 | |
disk | /dev/sda[1-9] , /dev/sdb[1-9] |
optical, floppy, storage など他のグループによる影響を受けないブロックデバイスへのアクセス。 |
floppy | /dev/fd[0-9] |
フロッピーディスクへのアクセス。 |
lp | /etc/cups , /var/log/cups , /var/cache/cups , /var/spool/cups , /dev/parport[0-9] |
プリンターハードウェアへのアクセス。プリンタージョブの管理を有効にします。 |
network | NetworkManager を使うときなどにネットワーク設定を変更する権限。 | |
optical | /dev/sr[0-9] , /dev/sg[0-9] |
CD や DVD ドライブなど光学ディスクドライブへのアクセス。 |
power | Pm-utils (サスペンド, ハイバネート...) などの電源管理コントロールを使う権限。 | |
scanner | /var/lock/sane |
スキャナーハードウェアへのアクセス。 |
storage | USB ハードドライブ、フラッシュ・ジャンプドライブ、MP3 プレイヤーなどリムーバルドライブへのアクセス。ユーザーによるストレージデバイスのマウントを有効にします。 | |
sys | CUPS でプリンターを管理する権限。 | |
video | /dev/fb/0 , /dev/misc/agpgart |
ビデオキャプチャデバイスや、2D/3D ハードウェアアクセラレーション、フレームバッファへのアクセス (このグループに属さなくても X は使えます)。ローカルセッションはハードウェアアクセラレーションやビデオキャプチャが利用できます。 |