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

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

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

ユーティリティー詳細
idユーザーおよびグループの ID を表示します。
useradd, usermod, userdelユーザーアカウントを追加、修正、削除する標準ユーティリティーです。
groupadd, groupmod, groupdelグループを追加、修正、削除する標準ユーティリティーです。
gpasswdnewgrp コマンドで使用する /etc/gshadow ファイル内のグループパスワードの修正に使用するユーティリティーです。
pwck, grpckパスワード、グループ、関連シャドウファイルを検証するユーティリティーです。
pwconv, pwunconv通常のパスワードをシャドウパスワードに変換する、または逆にシャドウパスワードから通常のパスワードに変換するユーティリティーです。
grpconvgrpunconvpwconv、pwunconv と同様、このユーティリティーは、グループアカウントのシャドウ化された情報を変換するのに使用できます。

4.3.1. 新規ユーザーの追加

システムにユーザーを追加するには、root でシェルプロンプトに以下を入力します。
useradd [options] username
ここでの options表4.2「一般的な useradd コマンドラインオプション」 の説明にあるコマンドラインオプションです。
デフォルトでは、useradd コマンドはロックされたユーザーアカウントを作成します。アカウントのロックを解除するには、root で以下のコマンドを実行し、パスワードを割り当てます。
passwd username
オプションで、パスワードエージングポリシーを設定できます。『Red Hat Enterprise Linux 7 セキュリティーガイド』 の 「パスワードのセキュリティー」 を参照してください。

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

オプション
-c 'comment'comment にはどの文字列でも使用できます。このオプションは、通常、ユーザーの氏名を指定するのに使用されます。
-d home_directoryデフォルトの /home/username/ の代わりに使用するホームディレクトリーです。
-e dateYYYY-MM-DD の形式でアカウントを無効にする日付です。
-f daysパスワードが失効してからアカウントが無効になるまでの日数です。0 を指定すると、パスワードが失効した直後にアカウントが無効になります。-1 を指定すると、パスワードが失効してもアカウントは無効になりません。
-g group_nameユーザーのデフォルト (プライマリー) グループ用のグループ名またはグループ番号です。グループはここで指定するよりも前に作成されている必要があります。
-G group_listユーザーがメンバーとなる追加 (補助、デフォルト以外) のグループ名またはグループ番号の一覧で、コンマで区切ります。グループはここで指定するよりも前に作成されている必要があります。
-mホームディレクトリーがない場合は、これを作成します。
-Mホームディレクトリーを作成しません。
-Nユーザー用のユーザープライベートグループを作成しません。
-p passwordcrypt で暗号化されたパスワードです。
-rUID が 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. /etc/passwd に、juan の新しい行が作成されます。
    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. /etc/shadow に、juan 用の新しい行が作成されます。
    juan:!!:14798:0:99999:7:::
    この行には以下の特徴があります。
    • ユーザー名 juan で始まっています。
    • /etc/shadow ファイルのパスワードフィールドに 2 つの感嘆符 (!!) が表示され、これがアカウントをロックします。

      注記

      -p フラグを使用して暗号化されたパスワードを渡した場合は、/etc/shadow ファイル内の、このユーザー用に新たに作成された行に置かれます。
    • パスワードは有効期限なしで設定されています。
  3. /etc/group に、juan という名前のグループ用に新しい行が作成されます。
    juan:x:1001:
    ユーザーと同じ名前のグループは、ユーザープライベートグループ と呼ばれます。ユーザープライベートグループの詳細は 「ユーザープライベートグループ」 を参照してください。
    /etc/group に作成された行には、以下の特徴があります。
    • グループ名 juan で始まります。
    • パスワードフィールドに x が表示され、システムがシャドウグループパスワードを使用していることを示しています。
    • GID は、/etc/passwd 内の juan の プライマリーグループに対する GID と一致します。
  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-uniqueGID が重複するグループの作成を許可します。
-p, --password password新規グループ用にこの暗号化されたパスワードを使用します。
-rGID が 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 は、標準のファイル権限に対応するビットで構成されています。たとえば、umask0137 の場合、その数字は次のような意味になります。
  • 0 = 意味なし、必ず 0 になります (umask は特別なビットに影響しません)
  • 1 = オーナーの権限 (実行ビット) が設定されます
  • 3 = グループの権限 (実行および書き込みビット) が設定されます
  • 7 = その他の人の権限 (実行、書き込み、読み取りビット) が設定されます
umask は 2 進法、8 進法、またはシンボリック表示で表されます。たとえば、8 進法の 0137 はシンボリック表示では u=rw-,g=r--,o=--- となります。シンボリック表示は 8 進法表示と逆に、禁止権限ではなく許可された権限を示します。

umask の仕組み

umask はファイルに禁止権限を設定します (どの権限を設定できないかを指定します)。
  • umask にビットを設定すると、ファイルの設定は解除されます。
  • umask にビットが設定されていないと、他の要素にもよりますが、ファイルで設定できます。
以下の図は、umask 0137 が新しいファイルの作成にどのように影響するのかを示しています。
ファイルの作成時に umask を適用

図4.3 ファイルの作成時に 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 の管理

bashksh, zshtcsh などの一般的なシェルでは、umask シェル ビルトイン を使用して umask を管理します。シェルから開始するプロセスは umask を継承します。

現在のマスクの表示

8 進法で現在の umask を表示するには、以下のコマンドを実行します。
~]$ 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 の設定

シンボリック表示を使用して、umask0337 に設定するには、以下のコマンドを実行します。
~]$ umask -S u=r,g=r,o=

デフォルトシェル umask での作業

シェルには通常、デフォルトの umask が設定されている設定ファイルがあります。bash の場合、そのファイルは /etc/bashrc です。bash のデフォルトの umask を表示するには、以下を実行します。
~]$ grep -i -B 1 umask /etc/bashrc
出力では、umaskumask コマンドまたは 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 での作業

デフォルトで、新しいユーザーの bash umask は、/etc/bashrc で定義されたものになっています。
特定のユーザーの bashumask を変更するには、そのユーザーの $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