1996年10月13日

Linux へShadow パスワードシステムを設定


シャドーパスワードとは

一般にUNIX 系OS のログインパスワードは暗号化されて/etc/passwd ファイルに 格納されます。
/etc/passwd ファイルは誰でも読めますが、暗号化しているので パスワードが他人に知られることはない、という考え方に基づいています。

しかし人がパスワードに付けがちな単語の辞書とそれらの組合せで機械的に パスワードを組み立て暗号化し、/etc/passwd に記されたパスワードと照合 してゆくことでパスワードが知られてしまうことがあります。
guest アカウントなどでターゲットマシンへログインし、/etc/passwd の 暗号化されたパスワードを見、プログラムによる辞書攻撃でroot のパスワード が知られてしまうとそのクラッカーはターゲットマシンへroot でアクセス できるようになってしまいます。

このような攻撃を行ないにくくするための1つの方法として、 シャドーパスワードの導入があります。
シャドーパスワードでは、/etc/passwd ファイルの暗号化パスワードを /etc/shadow というファイルへ記録するようにします。
/etc/shadow ファイルは一般ユーザは読めないパーミッションとします。
ただし、login, ftpd, samba, xdm 等、ユーザから入力されたパスワード を照合してサービスを開始するプログラムは全てシャドーパスワード仕様に 差し替える必要があります。

Slackware 3.0 でDocument 込みで Linux システムをインストールしている場合は /usr/doc/faq/howto/Shadow-Passwd-HOWTO に詳しい情報があります。

インストールについて

ここでは、Slackware 3.0 でインストールしたLinux へ私が行なった、 を紹介します。

注意

シャドーパスワードシステムのインストールはログインなどのパスワード認証 手順の変更を意味します。
もし設定に失敗すると、Linux へログインできなくなります。
そのような場合は非常用ブートフロッピーで起動して修復を行なったり、 最悪の場合はシステム全体を再インストールすることになります。

リスクをよく理解して、注意して行なわなければなりません。

ファイルの取得

はじめにパッケージの入手元を示します。
shadow-mk を含め、古いshadow パッケージにはセキュリティーホールがあるため、 必ずshadow-960129 以降のパッケージを入手して下さい。

shadow-960129.tar.gz のインストール

shadow-960129.tar.gz を展開して、展開ディレクトリへ移り、 下記の作業を行ないます。

% cp Makefile.linux Makefile
% cp config.h.linux config.h
% cp login.defs.linux login.defs

make save のエントリがコメントアウトになっているのでアンコメントアウトします。
% vi Makefile

シャドー化されていないファイルを退避します。
% make save

ところが、ディレクトリの違いで/usr/bin/passwd,usr/bin/chfn,/usr/bin/chsh,
/bin/chage /usr/bin/newgrp が退避されなかったので、これらは手動でcp しました。

% make
% su
# make install
# mkdir /usr/include/shadow
# cp *.h /usr/include/shadow
# vi login.defs <== 私は特に変更する箇所はありませんでした。
# cp login.defs /etc

シャドーパスワードファイルを設定します
# cd /etc
# pwconv <== npasswd とnshadow ファイルを生成します
# cp passwd passwd.old
# chmod 600 passwd.old
# mv npasswd passwd
# mv nshadow shadow

/etc/shadow を読めるグループを作成します
# vi group
# chgrp shadow shadow
# chmod 640 shadow

これで設定は完了です。

今root でログインしている端末はそのままで、

別の仮想コンソールか、他のマシンからのtelnet で次の確認をします。
もしこれらが行なえない場合は、save ディレクトリに退避していたファイルを 戻し、passwd.old をpasswd にコピーしてパーミッションを444 に設定すると もとに戻ります。

samba の差し替え

samba を利用されていない方はとばしてください。
samba はすでにインストールされていて、正しく動作しているものとします。

make install する前には、inetd からsamba を起動している場合は現在samba で 他のマシンにファイルをマウントされていないことを確認して下さい。
デーモンとしてsamba を待機させている場合は一旦終了させて下さい。

samba のMakefile のFLAGSM に-DSHADOW_PWD, LIBSM に-lshadow を追加して再make します。
% vi Makefile
% make
% su
# make install

デーモンとしてsamba を利用している場合は再起動します。
Windows95 等からsamba 配下のディレクトリがマウントできることを確認します。

xdm の差し替え

xdm を利用されていない方はとばしてください。

UNIX User 1996/02 のCD-ROM からxdm のソースを展開
% zcat X312src.tgz | ( cd /usr2/local/freesoft; tar xvf - xc/programs/xdm)
(/usr2/local/freesoft の部分はあなたの好きな場所に変えて下さい)

Imakefile を書き換えて、shadow を有効化
Imakefile では、
#if SystemV4 || HasShadowPasswd
PWD_DEFINES = -DUSESHADOW
#if SystemV || defined(SequentArchitecture)
SYS_LIBRARIES1 = -lsec
#endif
#if defined(LinuxArchitecture)
SYS_LIBRARIES1 = -lshadow
#endif
#endif

となっていたのですが、#if SystemV4 || HasShadowPasswd と最後の#endif の 外に PWD_DEFINES = -DUSESHADOW とSYS_LIBRARIES1 = -lshadow を出してしまい ました。
% vi Imakefile
% xmkmf

そのままではmake が通らなかったので、次の修正をしました。
greet.c の#include "Login.h" を #include "greeter/Login.h" へ修正
login.c の#include "LoginP.h" を #include "greeter/LoginP.h" へ修正

% make
% su
# vi /etc/inittab ==> xdm をはずす(default runlevel を5にする)
# /sbin/init 5
# cd /usr/X11R6/bin
# cp xdm xdm.old
# cp /usr2/local/freesoft/xc/programs/xdm/xdm .
# vi /etc/inittab ==> default runlevel を4 へ
# /sbin/init 4

xdm でログインできることを確認します。

wu.ftpd の差し替え


ところどころ出てくる /usr2/local/freesoft というディレクトリは、あなたの 好きな作業用ディレクトリに読み替えて下さい。

slackware/source/n/tcpip/wu-ftpd-2.4.tar.gz と
wu-ftpd-2.4.diff.gz を展開します。
% zcat wu-ftpd-2.4.tar.gz | (cd /usr2/local/freesoft; tar xvf -)
% cp wu-ftpd-2.4.diff /usr2/local/freesoft/wu-ftpd-2.4

wu-ftpd-2,4 にLinux パッチを当てます。
% cd /usr2/local/freesoft/wu-ftpd-2.4
% gzip -d wu-ftpd-2.4.diff.gz
% patch -s -p0 < wu-ftpd-2.4.diff

シャドーパスワード対応にするための修正をします。
% cd src/makefiles
% vi Makefile.lnx (CFLAGS に-DSHADOW_PASSWORD を追加)
% cd ../config
% vi config.lnx ( #define SHADOW_PASSWORD, #define HAVE_SHADOW_PASSWORDS)
% cd ../..

(1996/10/13 追加) Slackware3.1 ではmake が通らなくなった ようなので、src/glob.c の241 行目あたりの
if (fstat(dirp->dd_fd, &stb) < 0)
という行を
if (fstat(dirfd(dirp), &stb) < 0)
のように変更します。
% vi src/glob.c (上記の書き換えを行なう)

make を行ない、インストールします。
% build lnx
% su
# build install
# cd /usr/sbin
# mv wu-ftpd wu.ftpd

ftp が動作することを確認して下さい。

その他

xlock, pppd, pop3d などを使用される方は、これらもシャドーパスワード対応に 差し替える必要があります。

わたし流のLinux メニューへ戻る


ご意見箱