Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

4.3. コマンドラインツールの使用

「グラフィカル環境でのユーザーの管理」 で説明されている Users 設定ツール (ユーザーの基本的な管理用) のほかに、表4.1「ユーザーとグループを管理するためのコマンドラインユーティリティー」 に挙げられているユーザーとグループの管理コマンドラインツールを使用できます。

表4.1 ユーザーとグループを管理するためのコマンドラインユーティリティー

ユーティリティー詳細

id

ユーザー ID およびグループ ID を表示します。

useraddusermoduserdel

ユーザーアカウントを追加、修正、削除する標準ユーティリティーです。

groupaddgroupmodgroupdel

グループを追加、修正、削除する標準ユーティリティーです。

gpasswd

ユーティリティーは、主に、newgrp コマンドが使用する /etc/gshadow ファイルでグループパスワードの修正に使用されます。

pwckgrpck

パスワード、グループ、関連シャドウファイルを検証するユーティリティーです。

pwconvpwunconv

通常のパスワードをシャドウパスワードに変換する、またはシャドウパスワードから通常のパスワードに変換するユーティリティーです。

grpconvgrpunconv

pwconv、pwunconv と同様、このユーティリティーは、グループアカウントのシャドウ化された情報を変換するのに使用できます。

4.3.1. 新規ユーザーの追加

システムにユーザーを追加するには、root で次のコマンドを実行します。

useradd options username

ここで、options表4.2「一般的な useradd コマンドラインオプション」 で説明されているコマンドラインオプションです。

デフォルトでは、useradd コマンドは、ロックされたユーザーアカウントを作成します。アカウントをアンロックするには、root で次のコマンドを実行して、パスワードを割り当てます。

passwd username

オプションで、パスワードエージングポリシーを設定できます。詳細は、Red Hat Enterprise Linux 7 セキュリティーガイドPassword Security セクションをご覧ください。

表4.2 一般的な useradd コマンドラインオプション

オプション 

-c 'comment'

comment にはどの文字列でも使用できます。このオプションは、通常、ユーザーの氏名を指定するのに使用されます。

-d home_directory

デフォルトの /home/username/ の代わりに使用するホームディレクトリーです。

-e date

YYYY-MM-DD の形式でアカウントを無効にする日付です。

-f days

パスワードが失効してからアカウントが無効になるまでの日数です。0 にすると、パスワードが失効した直後にアカウントが無効になります。-1 にすると、パスワードが失効してもアカウントは無効になりません。

-g group_name

ユーザーのデフォルト (プライマリー) グループ用のグループ名またはグループ番号です。グループは、ここで指定するよりも前に作成されている必要があります。

-G group_list

ユーザーがメンバーとなる追加 (補助、デフォルト以外のもの) のグループ名またはグループ番号のリストで、コンマで区切ります。グループは、ここで指定する前に作成しておく必要があります。

-m

ホームディレクトリーがない場合は、これを作成します。

-M

ホームディレクトリーを作成しません。

-N

ユーザー用のユーザープライベートグループを作成しません。

-p password

crypt を使用してパスワードを暗号化しました。

-r

UID が 1000 未満でホームディレクトリーがないシステムアカウントを作成します。

-s

ユーザーのログインシェルです。デフォルトは /bin/bash に設定されています。

-u uid

ユーザーのユーザー ID です。一意の番号で 999 より大きい数でなければなりません。

重要

Red Hat Enterprise Linux 7 では、システムユーザーおよび通常のユーザーのデフォルトの ID 範囲が変更になりました。以前はシステムユーザーに UID 1 ~ 499 が使用され、それよりも上の値が通常のユーザーに使用されていました。変更後は、システムユーザーのデフォルト範囲が 1 ~ 999 になりました。この変更により、既存のユーザーの UID と GID に 500 ~ 999 を使用している場合に Red Hat Enterprise Linux 7 に移行すると、問題が発生する場合があります。UID と GID のデフォルトの範囲は /etc/login.defs ファイルで変更できます。

プロセスの説明

以下の手順は、シャドウパスワードが有効なシステムで useradd juan コマンドを実行したときに発生する内容を解説したものです。

  1. juan 用の新しい行が /etc/passwd に作成されます。

    juan:x:1001:1001::/home/juan:/bin/bash

    この行には以下の特徴があります。

    • ユーザー名 juan で始まります。
    • パスワードフィールドには x が表示されます。これは、システムがシャドウパスワードを使用していることを示しています。
    • 999 より大きい UID が作成されます。Red Hat Enterprise Linux 7 では、1000 未満の UID は、システムが使用するために予約されています。1000 未満の UID をユーザーに割り当てないでください。
    • 999 より大きい GID が作成されます。Red Hat Enterprise Linux 7 では、1000 未満の GID は、システムが使用するために予約されています。1000 未満の GID はユーザーに割り当てないでください。
    • オプションの GECOS 情報は空白のままになっています。GECOS フィールドは、氏名や電話番号などユーザーの追加情報を提供するために使用されます。
    • juan のホームディレクトリーが、/home/juan/ に設定されます。
    • デフォルトシェルは /bin/bash に設定されます。
  2. juan 用の新しい行が /etc/shadow に作成されます。

    juan:!!:14798:0:99999:7:::

    この行には以下の特徴があります。

    • ユーザー名 juan で始まります。
    • /etc/shadow ファイルのパスワードフィールドには 2 つの感嘆符 (!!) が表示され、アカウントがロックされていることを示しています。

      注記

      暗号化したパスワードを、-p フラグを使用して渡す場合は、そのユーザー用に、/etc/shadow ファイルに新しい行が追加されます。

    • パスワードは有効期限なしで設定されています。
  3. juan という名前のグループ用に、新しい行が /etc/group に作成されます。

    juan:x:1001:

    ユーザーと同じ名前のグループは、ユーザープライベートグループ と呼ばれます。ユーザープライベートグループの詳細は「ユーザープライベートグループ」を参照してください。

    /etc/group に作成した行には、以下の特徴があります。

    • グループ名 juan で始まります。
    • パスワードフィールドには x が表示されます。これは、システムがシャドウグループパスワードを使用していることを示しています。
    • GID は、/etc/passwd で設定されている juan のプライマリーグループに記載されているものと一致します。
  4. juan という名前のグループ用の新しい行が /etc/gshadow に作成されました。

    juan:!::

    この行には以下の特徴があります。

    • グループ名 juan で始まります。
    • /etc/gshadow ファイルのパスワードフィールドには 1 つの感嘆符 (!) が表示され、グループがロックされていることを示しています。
    • その他のフィールドはすべて空白です。
  5. /home ディレクトリーに、ユーザー juan のディレクトリーが作成されます。

    ~]# ls -ld /home/juan
    drwx------. 4 juan juan 4096 Mar 3 18:23 /home/juan

    このディレクトリーは、ユーザー juan およびグループ juan が所有します。このディレクトリーの 読み取り書き込み、および 実行 の権限は、juan ユーザーにのみ割り当てられます。その他のパーミッションは拒否されます。

  6. (デフォルトユーザー設定を含む) /etc/skel/ ディレクトリーが、新しい /home/juan/ ディレクトリーにコピーされます。

    ~]# ls -la /home/juan
    total 28
    drwx------. 4 juan juan 4096 Mar 3 18:23 .
    drwxr-xr-x. 5 root root 4096 Mar 3 18:23 ..
    -rw-r--r--. 1 juan juan  18 Jun 22 2010 .bash_logout
    -rw-r--r--. 1 juan juan 176 Jun 22 2010 .bash_profile
    -rw-r--r--. 1 juan juan 124 Jun 22 2010 .bashrc
    drwxr-xr-x. 4 juan juan 4096 Nov 23 15:09 .mozilla

この時点では、juan という名前のロックされたアカウントがシステムに存在します。このアカウントをアクティブにするには、管理者が passwd コマンドを使用して、このアカウントにパスワードを割り当てる必要があります。オプションでパスワードエージングのガイドラインを設定することもできます (詳細は Red Hat Enterprise Linux 7 セキュリティーガイドパスワードセキュリティー を参照)。

4.3.2. 新規グループの追加

システムに新しいグループを追加するには、root で次のコマンドを実行します。

groupadd options group_name

ここで、options表4.3「一般的な groupadd コマンドラインオプション」 で説明されているコマンドラインオプションです。

表4.3 一般的な groupadd コマンドラインオプション

オプション詳細

-f, --force

-g gid を使用し、gid が存在していると、groupadd により、そのグループに別の一意の gid を選択します。

-g gid

グループのグループ ID です。一意の番号で 999 より大きい数でなければなりません。

-K, --key key=value

/etc/login.defs のデフォルトを上書きします。

-o--non-unique

GID が重複するグループの作成を許可します。

-p, --password password

新規グループ用にこの暗号化されたパスワードを使用します。

-r

GID が 1000 未満のシステムグループを作成します。

4.3.3. 既存グループへの既存ユーザーの追加

usermod ユーティリティーを使用して、既存のユーザーを既存のグループに追加します。

usermod のさまざまなオプションは、ユーザーのプライマリーグループと補助グループにさまざまな影響を与えます。

ユーザーのプライマリーグループを上書きするには、root で以下のコマンドを実行します。

~]# usermod -g group_name user_name

ユーザーの補助グループを上書きするには、root で以下のコマンドを実行します。

~]# usermod -G group_name1,group_name2,... user_name

この場合、ユーザーの補助グループは、すべて新しいグループに置き換えられます。

ユーザーの補助グループにグループを追加するには、root で以下のコマンドのいずれかを実行します。

~]# usermod -aG group_name1,group_name2,... user_name
~]# usermod --append -G group_name1,group_name2,... user_name

この場合は、新しいグループが、ユーザーの現在の補助グループに追加されます。

4.3.4. グループディレクトリーの作成

システム管理者は、通常、主要なプロジェクトに対してそれぞれグループを作成し、そのプロジェクトのファイルにアクセスする必要がある場合に、そのユーザーをグループに割り当てる傾向があります。こうした従来型のスキームの場合は、誰かがファイルを作成すると、そのユーザーが属するプライマリーグループにそのファイルが関連付けられるため、ファイル管理は困難になります。このため、1 人のユーザーが複数のプロジェクトに関わっている場合に、正しいファイルを正しいグループに関連付けることは難しくなります。一方、UPG スキームを使用すると、グループは setgid ビットセットを持つディレクトリーに作成されたファイルに自動的に割り当てられます。setgid ビットにより、共通のディレクトリーを共有するグループプロジェクトを非常に簡単に管理できます。ユーザーがディレクトリー内で作成するすべてのファイルは、ディレクトリーを所有するグループが所有するためです。

たとえば、あるグループが /opt/myproject/ ディレクトリーのファイルを作業する必要があるとします。グループの中には、このディレクトリーのコンテンツの修正を信頼して任せられる人もいますが、全員ではありません。

  1. root で以下のコマンドを実行して、/opt/myproject/ ディレクトリーを作成します。

    mkdir /opt/myproject
  2. myproject グループをシステムに追加します。

    groupadd myproject
  3. /opt/myproject/ ディレクトリーのコンテンツを、myproject グループに関連付けます。

    chown root:myproject /opt/myproject
  4. グループのユーザーがそのディレクトリーにファイルを作成し、setgid ビットを設定できるようにします。

    chmod 2775 /opt/myproject

    この設定により、ユーザーがファイルを作成するたびに、管理者がファイルのパーミッションを変更しなくても、myproject グループの全メンバーが /opt/myproject/ ディレクトリーにファイルを作成および編集できます。パーミッションが正しく設定されていることを確認するには、以下のコマンドを実行します。

    ~]# ls -ld /opt/myproject
    drwxrwsr-x. 3 root myproject 4096 Mar 3 18:31 /opt/myproject
  5. myproject グループにユーザーを追加します。

    usermod -aG myproject username

4.3.5. umask を使用した、新規ファイルのデフォルト権限の設定

プロセスがファイルを作成すると、そのファイルにはデフォルト権限 (-rw-rw-r-- など) が設定されます。こうした初期権限は、ファイルモード作成マスク (ファイル権限マスク または umask とも呼ばれる) で部分的に定義されます。たとえば、bashumask は、デフォルトで 0022 となるなど、すべてのプロセスにそれぞれの umask が設定されています。プロセスの umask は変更できます。

umask を設定するもの

umask は、標準のファイル権限に対応するビットで設定されています。たとえば、umask 0137 の場合、その数字は次のような意味になります。

  • 0 = 意味なし。必ず 0 になります (umask は特別なビットに影響しません)。
  • 1 = オーナーの権限。実行ビットが設定されます。
  • 3 = グループの権限。実行ビットおよび書き込みビットが設定されます。
  • 7 = その他のユーザーの権限。実行ビット、書き込みビット、読み取りビットが設定されます。

umask では 2 進法、8 進法、またはシンボリック表示が使用できます。たとえば、8 進法の 0137 はシンボリック表示では u=rw-,g=r--,o=--- となります。シンボリック表示は 8 進法表示とは異なり、禁止権限ではなく、許可された権限を示します。

umask の仕組み

umask は、ファイルに パーミッションを付与するのを禁止する ようにします。

  • umask に設定しているビットは、ファイルには設定されません。
  • umask に設定していないビットは、他の要素にもよりますが、ファイルに設定されます。

以下の図は、umask 0137 が新しいファイルの作成にどのように影響するかを示しています。

図4.3 ファイルの作成時に umask を適用

ユーザーグループ umask の例
重要

セキュリティー上の理由から、レギュラーファイルにはデフォルトで実行権限が設定されていません。したがって、umask がいかなる権限も禁止しない 0000 であっても、新しいレギュラーファイルは実行権限を持ちません。ただし、ディレクトリーは実行権限を持つ状態で作成できます。

[john@server tmp]$ umask 0000
[john@server tmp]$ touch file
[john@server tmp]$ mkdir directory
[john@server tmp]$ ls -lh .
total 0
drwxrwxrwx. 2 john john 40 Nov 2 13:17 directory
-rw-rw-rw-. 1 john john 0 Nov 2 13:17 file

4.3.5.1. シェルで umask の管理

bashkshzshtcsh などのよく使用されるシェルでは、umask は、umask シェルの builtin を使用して管理されます。シェルから起動したプロセスは、その umask を継承します。

現在のマスクの表示

現在の umask を 8 進法で表示するには、以下のコマンドを実行します。

~]$ umask
0022

現在の umask をシンボリック表示で表示するには、以下のコマンドを実行します。

~]$ umask -S
u=rwx,g=rx,o=rx
umask を使用したシェルにおけるマスクの設定

8 進法を使用して、現行シェルセッションに umask を設定するには、以下のコマンドを実行します。

~]$ umask octal_mask

octal_mask を、0 から 7 の 4 桁以下の数値に置き換えます。3 桁以下の数値を指定すると、頭に 0 が付いた 4 桁の数値として権限が設定されます。たとえば、入力したコマンドが umask 7 であれば、そのコマンドの数値は 0007 として解釈されます。

例4.1 8 進法を使用した umask の設定

新しいファイルで、オーナーとグループに書き込み権限と実行権限を持たせず、その他のユーザーにはいかなる権限も持たせないようにするには、以下を実行します。

~]$ umask 0337

もしくは、簡潔に次のコマンドを実行します。

~]$ umask 337

シンボリック表記法を使用して、現行シェルセッションの umask を設定するには、以下のコマンドを実行します。

~]$ umask -S symbolic_mask

例4.2 シンボリック表示を使用した umask の設定

シンボリック表記法を使用して umask 0337 を設定するには、次のコマンドを実行します。

~]$ umask -S u=r,g=r,o=
デフォルトシェルの umask での作業

シェルには、通常、デフォルトの umask が設定されている設定ファイルがあります。bash の場合は /etc/bashrc です。デフォルトの bash の umask を表示するには、以下のコマンドを実行します。

~]$ grep -i -B 1 umask /etc/bashrc

出力では、umask の設定が、umask コマンドまたは UMASK 変数のいずれかを使用して行われていることが示されます。以下の例では、umask コマンドを使用して、umask022 に設定されています。

~]$ grep -i -B 1 umask /etc/bashrc
  # By default, we want umask to get set. This sets it for non-login shell.
--
  if [ $UID -gt 199 ] && [ “id -gn” = “id -un” ]; then
    umask 002
  else
    umask 022

bash のデフォルト umask を変更するには、/etc/bashrcumask コマンドの呼び出し、または UMASK 変数の割り当てを変更します。この例では、デフォルトの umask0227 に変更します。

  if [ $UID -gt 199 ] && [ “id -gn” = “id -un” ]; then
    umask 002
  else
    umask 227
特定ユーザーのデフォルトシェルの umask での作業

デフォルトでは、新規ユーザーのデフォルトの bashumask は、/etc/bashrc に定義したものに設定されます。

特定ユーザーの bash umask を変更するには、そのユーザーの $HOME/.bashrc ファイルで、umask コマンドの呼び出しを追加します。たとえば、ユーザー johnbashumask0227 に変更するには、次のコマンドを実行します。

john@server ~]$ echo 'umask 227' >> /home/john/.bashrc
新しく作成されたホームディレクトリーのデフォルト権限設定

作成したユーザーホームディレクトリーの権限を変更するには、/etc/login.defs ファイルで UMASK 変数を変更します。

# The permission mask is initialized to this value. If not specified,
# the permission mask will be initialized to 022.
UMASK 077