8.27. Shadow-4.14.5

Shadow パッケージはセキュアなパスワード管理を行うプログラムを提供します。

概算ビルド時間: 0.1 SBU
必要ディスク容量: 49 MB

8.27.1. Shadow のインストール

[注記]

注記

もっと強力なパスワードを利用したい場合は https://www.linuxfromscratch.org/blfs/view/12.1/postlfs/cracklib.html にて示している Cracklib パッケージを参照してください。 Cracklib パッケージは Shadow パッケージよりも前にインストールします。 その場合 Shadow パッケージの configure スクリプトでは --with-libcrack パラメーターをつけて実行する必要があります。

groups コマンドとその man ページをインストールしないようにします。 これは Coreutils パッケージにて、より良いバージョンが提供されているからです。 また 「Man-pages-6.06」 にてインストールされている man ページはインストールしないようにします。

sed -i 's/groups$(EXEEXT) //' src/Makefile.in
find man -name Makefile.in -exec sed -i 's/groups\.1 / /'   {} \;
find man -name Makefile.in -exec sed -i 's/getspnam\.3 / /' {} \;
find man -name Makefile.in -exec sed -i 's/passwd\.5 / /'   {} \;

パスワード暗号化に関して、デフォルトの crypt 手法ではなく、より強力な YESCRYPT 手法を用いることにします。 こうしておくと 8文字以上のパスワード入力が可能となります。 メールボックスを収めるディレクトリとして Shadow ではデフォルトで /var/spool/mail ディレクトリを利用していますが、これは古いものであるため /var/mail ディレクトリに変更します。 また PATH から /bin/sbin を削除します。 これらは /usr からのシンボリックリンクであるからです。

[注記]

注記

何らかの理由により PATH に対して /bin/sbin を含めたい場合は、LFS ビルドが完成した後に .bashrc において PATH を設定してください。

sed -e 's:#ENCRYPT_METHOD DES:ENCRYPT_METHOD YESCRYPT:' \
    -e 's:/var/spool/mail:/var/mail:'                   \
    -e '/PATH=/{s@/sbin:@@;s@/bin:@@}'                  \
    -i etc/login.defs
[注記]

注記

Cracklib のサポートを含めて Shadow をビルドする場合は以下を実行します。

sed -i 's:DICTPATH.*:DICTPATH\t/lib/cracklib/pw_dict:' etc/login.defs

Shadow をコンパイルするための準備をします。

touch /usr/bin/passwd
./configure --sysconfdir=/etc   \
            --disable-static    \
            --with-{b,yes}crypt \
            --without-libbsd    \
            --with-group-name-max-length=32

configure オプションの意味

touch /usr/bin/passwd

プログラムの中には /usr/bin/passwd のパスがそのままハードコーディングされているものがあります。 それがまだ存在していない場合には、インストールスクリプトが間違った場所に作り出してしまいます。

--with-{b,yes}crypt

これはシェルによって 2 つのスイッチ、つまり --with-bcrypt--with-yescrypt に展開されます。 パスワードのハッシュ処理を行うための Bcrypt および Yescrypt アルゴリズムが Libxcrypt において実装されており、本スイッチは shadow がそれを用いることを指示します。 このアルゴリズムは従来の SHA アルゴリズムに比べて、(特に GPU ベースの攻撃への耐性が高く)より安全性を有しています。

--with-group-name-max-length=32

ユーザー名の最大文字数は 32 です。 そこでグループ名の最大文字数も同様とします。

--without-libbsd

libbsd の readpassphrase 関数は LFS 内には無いため用いないようにします。 その代わりに内部にコピーされている分を用います。

パッケージをコンパイルします。

make

このパッケージにテストスイートはありません。

パッケージをインストールします。

make exec_prefix=/usr install
make -C man install-man

8.27.2. Shadow の設定

このパッケージには、ユーザーやグループの追加、修正、削除、そのパスワードの設定、変更、その他の管理操作を行うユーティリティが含まれます。 パスワードのシャドウイング (password shadowing) というものが何を意味するのか、その詳細についてはこのパッケージのソース内にある doc/HOWTO を参照してください。 Shadow によるサポートを利用する場合、パスワード認証を必要とするプログラム (ディスプレイマネージャー、FTP プログラム、POP3、デーモン、など) は Shadow に準拠したものでなければなりません。 つまりそれらのプログラムが、シャドウ化された (shadowed) パスワードを受け入れて動作しなければならないということです。

Shadow によるパスワードの利用を有効にするために、以下のコマンドを実行します。

pwconv

また Shadow によるグループパスワードを有効にするために、以下を実行します。

grpconv

Shadow の useradd コマンドに対するデフォルトの設定には、説明が必要です。 まず useradd コマンドによりユーザーを生成する場合のデフォルトの動作では、ユーザー名と同じグループを自動生成します。 ユーザーID (UID) とグループID (GID) は 1000 以上が割り当てられます。 useradd コマンドの利用時に特に追加でパラメーターを与えなければ、追加するユーザーのグループは新たな固有グループが生成されることになります。 この動作が不適当であれば useradd コマンドの実行時に -g パラメーターか -N のいずれかを利用することが必要です。 あるいは /etc/login.defs 内にある USERGROUPS_ENAB の設定を書き換えてください。 詳しくは useradd(8) を参照してください。

次にデフォルトパラメーターを変更します。 そのためにはファイル /etc/default/useradd の生成が必要です。 特定の状況に合わせてこれを設定します。 まずは以下のようにして、このファイルを生成します。

mkdir -p /etc/default
useradd -D --gid 999

/etc/default/useradd のパラメーター説明

GROUP=999

このパラメーターは /etc/group ファイルにおいて設定されるグループ ID の先頭番号を指定します。 999 という値は、上に示した --gid からきています。 必要なら任意の数値に設定することもできます。 useradd コマンドは既存の UID 値、GID 値を再利用することはありません。 このパラメーターによって指定された数値が実際に利用されていた場合、その値以降で利用可能な値が採用されます。 また useradd コマンドの実行にあたって パラメーター -g を利用せずに、その数値によって表される ID を持ったグループがシステム上に存在しなかった場合は、以下のようなメッセージが出力されます。 useradd: unknown GID 999 ("GID 999 が不明です") この場合でも、アカウントは正しく生成されます。 だからこそ「重要なファイルとシンボリックリンクの生成」において、グループ ID を指定してグループ users を生成できたわけです。

CREATE_MAIL_SPOOL=yes

このパラメーターは useradd コマンドの実行によって、各ユーザー用のメールボックスに関するファイルが生成されます。 useradd コマンドは、このファイルのグループ所有者を mail (グループID 0660) に設定します。 メールボックスに関するファイルを生成したくない場合は、以下のコマンドを実行します。

sed -i '/MAIL/s/yes/no/' /etc/default/useradd

8.27.3. root パスワードの設定

root ユーザーのパスワードを設定します。

passwd root

8.27.4. Shadow の構成

インストールプログラム: chage, chfn, chgpasswd, chpasswd, chsh, expiry, faillog, getsubids, gpasswd, groupadd, groupdel, groupmems, groupmod, grpck, grpconv, grpunconv, login, logoutd, newgidmap, newgrp, newuidmap, newusers, nologin, passwd, pwck, pwconv, pwunconv, sg (newgrp へのリンク), su, useradd, userdel, usermod, vigr (vipw へのリンク), vipw
インストールディレクトリ: /etc/default, /usr/include/shadow
インストールディレクトリ: libsubid.so

概略説明

chage

ユーザーのパスワード変更を行うべき期間を変更します。

chfn

ユーザーのフルネームや他の情報を変更します。

chgpasswd

グループのパスワードをバッチモードにて更新します。

chpasswd

ユーザーのパスワードをバッチモードにて更新します。

chsh

ユーザーのデフォルトのログインシェルを変更します。

expiry

現時点でのパスワード失効に関する設定をチェックし更新します。

faillog

ログイン失敗のログを調査します。 ログインの失敗を繰り返すことでアカウントがロックされる際の、最大の失敗回数を設定します。 またその失敗回数をリセットします。

getsubids

ユーザーのサブ id 範囲の一覧取得に用いられます。

gpasswd

グループに対してメンバーや管理者を追加、削除します。

groupadd

指定した名前でグループを生成します。

groupdel

指定された名前のグループを削除します。

groupmems

スーパーユーザー権限を持たなくても、自分自身のグループのメンバーリストを管理可能とします。

groupmod

指定されたグループの名前や GID を修正します。

grpck

グループファイル /etc/group/etc/gshadow の整合性を確認します。

grpconv

通常のグループファイルから Shadow グループファイルを生成、更新します。

grpunconv

/etc/gshadow ファイルを元に /etc/group ファイルを更新し /etc/gshadow ファイルを削除します。

login

ユーザーのログインを行います。

logoutd

ログオン時間とポートに対する制限を実施するためのデーモン。

newgidmap

ユーザー空間における gid マッピングを設定します。

newgrp

ログインセッション中に現在の GID を変更します。

newuidmap

ユーザー空間における uid マッピングを設定します。

newusers

複数ユーザーのアカウント情報を生成または更新します。

nologin

ユーザーアカウントが利用不能であることをメッセージ表示します。 利用不能なユーザーアカウントに対するデフォルトシェルとして利用することを意図しています。

passwd

ユーザーアカウントまたはグループアカウントに対するパスワードを変更します。

pwck

パスワードファイル /etc/passwd/etc/shadow の整合性を確認します。

pwconv

通常のパスワードファイルを元に shadow パスワードファイルを生成、更新します。

pwunconv

/etc/shadow ファイルを元に /etc/passwd ファイルを更新し /etc/shadow を削除します。

sg

ユーザーの GID を指定されたグループにセットした上で、指定されたコマンドを実行します。

su

ユーザー ID とグループ ID を変更してシェルを実行します。

useradd

指定した名前で新たなユーザーを生成します。 あるいは新規ユーザーのデフォルトの情報を更新します。

userdel

指定されたユーザーアカウントを削除します。

usermod

指定されたユーザーのログイン名、UID (User Identification)、利用シェル、初期グループ、ホームディレクトリなどを変更します。

vigr

/etc/group ファイルあるいは /etc/gshadow ファイルを編集します。

vipw

/etc/passwd ファイルあるいは /etc/shadow ファイルを編集します。

libsubid

ユーザーに対するサブ ID 範囲を取り扱うライブラリ。