ユーザーとグループ

提供: ArchWiki
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

テンプレート:Related articles start (日本語)

  • DeveloperWiki:UID / GID Database
  • polkit
  • ファイルのパーミッションと属性
  • ユーザーネームの変更
  • GNU/Linux ではユーザーやグループはアクセス制御のために使われています — つまり、システムのファイル、ディレクトリ、周辺機器へのアクセスのコントロールに使われます。Linux は比較的シンプルかつ粗っぽいアクセス制御メカニズムをデフォルトで提供します。高度な制御については、ACLLDAP Authentication を見て下さい。

    概要

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

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

    作成するアカウントにそれぞれ異なる名前を使えば、人々は複数のアカウントを持つことが可能です。さらに、"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--- はファイルの所有者と所有グループに属すユーザーが読み込み・書き込み・実行の全てができ (rwxrwx)、他のユーザーはアクセスを拒否される (---) ことを示しています。一番最初の文字はファイルのタイプです。

    あるユーザーやグループによって所有されているファイルを一覧するには 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) ではユーザー名と同じ名前でグループを作成し、GIDUID と同じになります。
    • -G はユーザーがメンバーになる追加グループ(のリスト)を指定します; グループはそれぞれカンマで区切り、スペースを入れてはいけません; デフォルトはイニシャルグループにだけユーザーを属させます。
    • -s ではユーザーのデフォルトログインシェルのパスとファイル名を定義します; ブートプロセスが完了した後、ここに指定したシェルがデフォルトのログインシェルになります; Bash 以外のシェルを使うのなら、その選んだシェルのパッケージをインストールしておいてください。
    警告: ログインシェルは /etc/shells に記載されている必要があります。PAM を使うプログラムでは、pam_shells モジュールによってチェックされます。
    ノート: 新しく作成したユーザーにはパスワードを設定する必要があります。で説明されているように passwd を使います。
    ヒント: 特定のサービス用にユーザーを作成する必要がある場合、シェルには /usr/bin/nologin を使って下さい。

    ユーザーを追加する例

    典型的なデスクトップシステムでは、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]
    
    警告: 上の usermod コマンドで -a オプションを外した場合、ユーザーは [additional_groups] 以外の全てのグループから削除されます (言い換えるとユーザーは [additional_groups] のグループのメンバーだけになるということです)。

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

    # chfn [username]
    

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

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

    # passwd [username]
    

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

    # chage -d 0 [username]
    

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

    # userdel -r [username]
    

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

    ヒント: AUR のパッケージ adduserAUR, adduser-defaultsAUR, adduser-debAUR には useradd, chfn, passwd を対話式に行うことができる adduser スクリプトが入っています。FS#32893 を参照。

    ユーザーデータベース

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

    $ cat /etc/passwd
    

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

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

    それぞれの意味:

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

    既存のグループは 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 管理作業用グループ、通常 sudosu コマンドに権限をわたすのに使われます (デフォルトではどちらも 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
    mail /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 全てのセッションでのサウンドハードウェアへの直接アクセス (ALSAOSS の両方で必要)。ローカルセッションはサウンドを再生したりミキサーを操作することができます。
    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 は使えます)。ローカルセッションはハードウェアアクセラレーションやビデオキャプチャが利用できます。