4.3. コマンドラインツールの使用
「グラフィカル環境でのユーザーの管理」 で説明されている Users 設定ツール (ユーザーの基本的な管理用) のほかに、表4.1「ユーザーとグループを管理するためのコマンドラインユーティリティー」 に挙げられているユーザーとグループの管理コマンドラインツールを使用できます。
ユーティリティー | 詳細 |
---|---|
| ユーザー ID およびグループ ID を表示します。 |
| ユーザーアカウントを追加、修正、削除する標準ユーティリティーです。 |
| グループを追加、修正、削除する標準ユーティリティーです。 |
|
ユーティリティーは、主に、 |
| パスワード、グループ、関連シャドウファイルを検証するユーティリティーです。 |
| 通常のパスワードをシャドウパスワードに変換する、またはシャドウパスワードから通常のパスワードに変換するユーティリティーです。 |
| pwconv、pwunconv と同様、このユーティリティーは、グループアカウントのシャドウ化された情報を変換するのに使用できます。 |
4.3.1. 新規ユーザーの追加
システムにユーザーを追加するには、root
で次のコマンドを実行します。
useradd
options username
ここで、options は 表4.2「一般的な useradd コマンドラインオプション」 で説明されているコマンドラインオプションです。
デフォルトでは、useradd
コマンドは、ロックされたユーザーアカウントを作成します。アカウントをアンロックするには、root
で次のコマンドを実行して、パスワードを割り当てます。
passwd
username
オプションで、パスワードエージングポリシーを設定できます。詳細は、Red Hat Enterprise Linux 7 セキュリティーガイド の Password Security セクションをご覧ください。
オプション | |
---|---|
| comment にはどの文字列でも使用できます。このオプションは、通常、ユーザーの氏名を指定するのに使用されます。 |
|
デフォルトの |
| YYYY-MM-DD の形式でアカウントを無効にする日付です。 |
|
パスワードが失効してからアカウントが無効になるまでの日数です。 |
| ユーザーのデフォルト (プライマリー) グループ用のグループ名またはグループ番号です。グループは、ここで指定するよりも前に作成されている必要があります。 |
| ユーザーがメンバーとなる追加 (補助、デフォルト以外のもの) のグループ名またはグループ番号のリストで、コンマで区切ります。グループは、ここで指定する前に作成しておく必要があります。 |
| ホームディレクトリーがない場合は、これを作成します。 |
| ホームディレクトリーを作成しません。 |
| ユーザー用のユーザープライベートグループを作成しません。 |
|
|
| UID が 1000 未満でホームディレクトリーがないシステムアカウントを作成します。 |
|
ユーザーのログインシェルです。デフォルトは |
| ユーザーのユーザー 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
コマンドを実行したときに発生する内容を解説したものです。
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
に設定されます。
-
ユーザー名
juan
用の新しい行が/etc/shadow
に作成されます。juan:!!:14798:0:99999:7:::
この行には以下の特徴があります。
-
ユーザー名
juan
で始まります。 /etc/shadow
ファイルのパスワードフィールドには 2 つの感嘆符 (!!
) が表示され、アカウントがロックされていることを示しています。注記暗号化したパスワードを、
-p
フラグを使用して渡す場合は、そのユーザー用に、/etc/shadow
ファイルに新しい行が追加されます。- パスワードは有効期限なしで設定されています。
-
ユーザー名
juan
という名前のグループ用に、新しい行が/etc/group
に作成されます。juan:x:1001:
ユーザーと同じ名前のグループは、ユーザープライベートグループ と呼ばれます。ユーザープライベートグループの詳細は「ユーザープライベートグループ」を参照してください。
/etc/group
に作成した行には、以下の特徴があります。-
グループ名
juan
で始まります。 -
パスワードフィールドには
x
が表示されます。これは、システムがシャドウグループパスワードを使用していることを示しています。 -
GID は、
/etc/passwd
で設定されているjuan
のプライマリーグループに記載されているものと一致します。
-
グループ名
juan
という名前のグループ用の新しい行が/etc/gshadow
に作成されました。juan:!::
この行には以下の特徴があります。
-
グループ名
juan
で始まります。 -
/etc/gshadow
ファイルのパスワードフィールドには 1 つの感嘆符 (!
) が表示され、グループがロックされていることを示しています。 - その他のフィールドはすべて空白です。
-
グループ名
/home
ディレクトリーに、ユーザーjuan
のディレクトリーが作成されます。~]# ls -ld /home/juan drwx------. 4 juan juan 4096 Mar 3 18:23 /home/juan
このディレクトリーは、ユーザー
juan
およびグループjuan
が所有します。このディレクトリーの 読み取り、書き込み、および 実行 の権限は、juan
ユーザーにのみ割り当てられます。その他のパーミッションは拒否されます。(デフォルトユーザー設定を含む)
/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 コマンドラインオプション」 で説明されているコマンドラインオプションです。
オプション | 説明 |
---|---|
|
|
| グループのグループ ID です。一意の番号で 999 より大きい数でなければなりません。 |
|
|
| GID が重複するグループの作成を許可します。 |
| 新規グループ用にこの暗号化されたパスワードを使用します。 |
| 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/
ディレクトリーのファイルを作業する必要があるとします。グループの中には、このディレクトリーのコンテンツの修正を信頼して任せられる人もいますが、全員ではありません。
root
で以下のコマンドを実行して、/opt/myproject/
ディレクトリーを作成します。mkdir /opt/myproject
myproject
グループをシステムに追加します。groupadd myproject
/opt/myproject/
ディレクトリーのコンテンツを、myproject
グループに関連付けます。chown root:myproject /opt/myproject
グループのユーザーがそのディレクトリーにファイルを作成し、setgid ビットを設定できるようにします。
chmod 2775 /opt/myproject
この設定により、ユーザーがファイルを作成するたびに、管理者がファイルのパーミッションを変更しなくても、
myproject
グループの全メンバーが/opt/myproject/
ディレクトリーにファイルを作成および編集できます。パーミッションが正しく設定されていることを確認するには、以下のコマンドを実行します。~]# ls -ld /opt/myproject drwxrwsr-x. 3 root myproject 4096 Mar 3 18:31 /opt/myproject
myproject
グループにユーザーを追加します。usermod -aG myproject username
4.3.5. umask
を使用した、新規ファイルのデフォルト権限の設定
プロセスがファイルを作成すると、そのファイルにはデフォルト権限 (-rw-rw-r--
など) が設定されます。こうした初期権限は、ファイルモード作成マスク (ファイル権限マスク または umask とも呼ばれる) で部分的に定義されます。たとえば、bash の umask は、デフォルトで 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 がいかなる権限も禁止しない 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 の管理
bash
、ksh
、zsh
、tcsh
などのよく使用されるシェルでは、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 コマンドを使用して、umask
が 022
に設定されています。
~]$ 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/bashrc
で umask
コマンドの呼び出し、または UMASK
変数の割り当てを変更します。この例では、デフォルトの umask を 0227
に変更します。
if [ $UID -gt 199 ] && [ “id -gn” = “id -un” ]; then
umask 002
else
umask 227
特定ユーザーのデフォルトシェルの umask での作業
デフォルトでは、新規ユーザーのデフォルトの bash
の umask は、/etc/bashrc
に定義したものに設定されます。
特定ユーザーの bash
umask を変更するには、そのユーザーの $HOME/.bashrc
ファイルで、umask
コマンドの呼び出しを追加します。たとえば、ユーザー john
の bash
の umask を 0227
に変更するには、次のコマンドを実行します。
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