VineLinux設定メモ

※このページの情報はVineLinux2.6時代のものなので、情報が古い可能性があります。

hostsファイルの設定
ネットワークの設定
viの設定
プロファイルの設定(~/.bash_profile)
ユーザシェルの設定(~/.bashrc)
シェルの設定(/etc/bashrc)
コマンドプロンプトの表示を変更
TCP Wrappersによるアクセス制限
rootログインの制限
samba
VNC
apache
ProFTP
Nmap
SSH
ntpdによる時刻設定
crondによる時刻設定
sudoの設定
libsafe
Nessus
Postfix
swatchによるログ監視
Tripwireによる改ざん検出
NFS

hostsファイルの設定

/etc/hostsファイルにLANのPCを登録する。

LANにapple,orange,lemonの端末が3台ある場合とする。

192.168.0.2 apple apple
192.168.0.3 orange orange
192.168.0.4 lemon lemon

ネットワークの設定

/etc/sysconfig/networkファイルにネットワークの設定をする。

ホスト名がapple、ドメイン名がfruit.comの場合、以下の記述を追加する。

#HOSTNAME=localhost.localdomain                  <== コメントアウトする
HOSTNAME=apple                             <== 追加する

DOMAINNAME=fruit.com                          <== 追加する

viの設定

viの設定ファイル(~/.exrc)を作成する。

set number          <== 行番号表示
set tabstop=4         <== タブ表示文字数
set shiftwidth=4       <== [CTRL]-[d]、[CTRL]-[u]、>>、<<などで移動する文字数を設定

プロファイルの設定(~/.bash_profile)

ログオン時にkonが起動するようにする。

if [ $TERM = linux ]; then
 kon
fi

ユーザシェルの設定(~/.bashrc)

lsコマンドのエイリアスを設定する。

alias ll='ls -la --color=auto'
alias la='ls -a --color=auto'

コマンドラインでviによる編集をすることができるようにする。

set -o vi

シェルの設定(/etc/bashrc)

プロンプトにカレントディレクトリを表示するため以下のように設定を変更する。

PS1="[\u@\h \W]\\$ "    <== カレントディレクトリを表示
PS1="[\u@\h \w]\\$ "    <== カレントディレクトリをフルパスで表示

ファイル作成時のデフォルトパーミッションを変更するために以下の記述を追加する。

umask 027            <== otherのパーミッションを全て削除するためのマスク

TCP Wrappersによるアクセス制限

/etc/hosts.denyファイルの設定のほうが/etc/hosts.allowファイルの設定よりも優先されるので、
まず/etc/hosts.denyファイルで全てのホストからのアクセスを拒否し、
その後に/etc/hosts.allowファイルでアクセスを許可するホストを設定する。

/etc/hosts.denyファイルにアクセスを拒否するホストを記述する。

ALL: ALL        <== 全てのホストからのアクセスを拒否

/etc/hosts.allowファイルにアクセスを許可するホストを記述する。

ALL: localhost               <== localhostからのアクセスを許可する
ALL: 192.168.0.0/255.255.255.0    <== LAN内のホスト(192.168.0.0/255.255.255.0)からのアクセスを許可

rootログインの制限

Linuxではrootのパスワードを知っていればどのユーザでもsuによってrootになることができるが、
wheelグループに属したユーザのみsuでrootになることを許可する。

/etc/login.defsファイルに以下の記述を追加する。

SU_WHEEL_ONLY yes

次に、suを可能にしたいユーザをwheelグループに追加する。
/etc/groupのグループIDが10のwheelグループに追加するのではなく、
グループIDが0のrootグループに追加することに注意。

/etc/groupファイルに以下の記述を追加する。
ここではユーザfooを追加するとする。

root:x:0:root,foo                  <== ユーザfooをrootグループに追加

VineLinuxではさらにShadow Suiteを再インストールする必要がある。
FTPサイト(ftp://ftp.ists.pwr.wroc.pl/linux/shadow/)から最新のソース(shadow-20000902.tar.gz)をダウンロードする。

/usr/srcなどでファイルを展開し、再インストールする。

$ tar xvzf shadow-20000902.tar.gz
$ cd shadow-20000902/
$ ./configure
$ make all
$ su
# make install

samba

sambaのRPMファイルをFTPサイト(ftp://ftp.jaist.ac.jp/pub/os/linux/Vine/) からダウンロードし、
rpmコマンドを使用してインストールする。

# rpm -ivh samba-2.0.10_ja_1.2-0vl1.i386.rpm

/etc/inetd.confファイルにsmbd(ファイル共有デーモン)とnmbd(ネームサービスデーモン)の設定を追加する。

netbios-ssn stream tcp nowait root /usr/sbin/smbd smbd
netbios-ns dgram udp wait root /usr/sbin/nmbd nmbd

SWATを使用するための設定を行う。
/etc/inetd.confファイルに以下の設定を追加する。

# swat stream tcp nowait.400 root /usr/sbin/tcpd swat    <== コメントにする
 swat stream tcp nowait.400 root /usr/sbin/swat swat

inetd.confを読み込ませるために以下のコマンドを実行する。

# killall -HUP inetd

mksmbpasswd.shでsmbのアカウントを作成する。

# cat /etc/passwd | /usr/bin/mksmbpasswd.sh > /etc/smbpasswd

「smbpasswd」コマンドを使い、samba用のパスワードを設定する。
自分のsamba用パスワードを変更する。

# smbpasswd

ユーザfooのsamba用パスワードを変更する。

# smbpasswd foo

/shareディレクトリにguestユーザとして書き込み可でアクセスできるように設定を行う。
/etc/smb.conf
に以下の内容を追加する。

[share]
 comment = %h's share directory    <== %hはホスト名
 path = /share
 guest ok = Yes
 writeable = Yes

serviceコマンドを使用して、sambaの設定を読み込ませる。

# service smb start             <== sambaが停止している時
# service smb restart            <== sambaが動作している時

VNC

VNCをFTPサイトからダウンロードし、rpmコマンドを使用してインストールする。

# rpm -ivh vnc-server-3.3.3r2-18.3.i386.rpm

VNCをインストールし、起動時にGNOMEが起動するように~/.vnc/xstartupファイルを設定する。

#xrdb $HOME/.Xresources                                <== コメントにする
#xsetroot -solid grey                                   <== コメントにする
#xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &   <== コメントにする
#twm & exec gnome-session                              <== コメントにする

exec gnome-session                                    <== 追加する

apache

apacheのRPMファイルをFTPサイト(ftp://ftp.jaist.ac.jp/pub/os/linux/Vine/)からダウンロードし、
rpmコマンドを使用してインストールする。

# rpm -ivh apache-1.3.24-0vl1.i386.rpm

ProFTP

/etc/passwdの設定を変更する。
ftpユーザのホームディレクトリを変更する。

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin            <== これを変更
ftp:x:14:50:FTP User:/home/ftp:/sbin/nologin          <== これに変更

/etc/proftpd.confにアクセス制限の設定をする。

#ServerName "ProFTPD Basic Configuration"      <== デフォルトの設定をコメントアウト
ServerName "FTP Server on Sapphire Vine Linux"   <== ログイン時に表示されるサーバ名
#ServerType standalone                   
<== デフォルトの設定をコメントアウト
ServerType inetd                        <== ServerTypeをinetdへ変更

〜〜〜中略〜〜〜

# To cause every FTP user to be "jailed" (chrooted) into their home
# directory, uncomment this line.
DefaultRoot ~              <== デフォルトのルートディレクトリをホームディレクトリに指定

〜〜〜中略〜〜〜

# A basic anonymous configuration, no upload directories.
<Anonymous ~ftp>

↓Anonymousタグ内の最後に以下の内容を全て追加
 # 書き込み専用ディレクトリ ~ftp/incomingの設定
 <Directory incoming/*>
  AllowOverwrite on          # 上書きを許可
  <Limit WRITE>
   AllowAll                # 書き込みをどこからでも許可する
  </Limit>
  <Limit READ DIRS>

   DenyAll                # ファイルの読み出しと、ディレクトリの一覧をどこからでも禁止する
  </Limit>
 </Directory>

 # ファイル一覧ができない読み出し専用ディレクトリ ~ftp/outgoingの設定
 <Directory outgoing/*>
  <Limit READ>
   AllowAll                # 読み出しをどこからでも許可する
  </Limit>
  <Limit WRITE DIRS>
   DenyAll                # ファイルの書き込みと、ディレクトリの一覧をどこからでも禁止する
  </Limit>
 </Directory>

</Anonymous>

/etc/inetd.confに以下の内容を追加する。

ftp stream tcp nowait root /usr/sbin/tcpd in.proftpd

インターネットからFTPによるアクセスを可能にするために、/etc/hosts.allowにin.proftpdへのアクセス許可を記述する。
以下の記述を追加する。

in.proftpd: ALL

chkconfigからの起動を削除する。

# chkconfig --del proftpd

稼動中のproftpd停止し、inetdを再起動する。

# killall -HUP inetd

Nmap

不要なポートを塞ぐために、開いているポートをチェックするNmapを導入する。
最新版のRPMファイルをNmapのサイトからダウンロードする。
rpmコマンドを使用してインストールする。

# rpm -ivh nmap-3.00-1.i386.rpm

開いているポートをチェックする。

# nmap localhost

開いているポートが表示されるので、可能な方法(/etc/inetd.confファイルからコメントアウト、chkconfigコマンドを用いる )
でサービスを停止しポートを閉じる。

SSH

ホストベース認証によるログインはSSHをインストールすればすぐに使用することができるが、
パスワードがわかれば誰でもログインができてしまうためユーザベース(RSA)認証によるログインのみ許可する。

/etc/ssh/sshd_configファイルの設定を変更する。
RSAAuthenticationについてはデフォルトでyesになっているので、
PasswordAuthenticationについて設定を変更する。

#PasswordAuthentication yes                  <== デフォルト設定
PasswordAuthentication no                   <== パスワード認証を許可しない

sshdを再起動する。

# killall -HUP sshd

ntpdによる時刻設定

/etc/ntp.confファイルにNTPサーバを記述する。
NTPサーバのアドレスは
http://yotaro.bird.to/feedback/misc/NTP_list.html

などで得ることができる。

#restrict default noquery notrust nomodify             <== コメントアウト
#restrict 127.0.0.1                            <== コメントアウト
#restrict 192.168.0.0 mask 255.255.255.0              <== コメントアウト
#fudge 127.127.1.0 stratum 3                     <== コメントアウト
#server 127.127.1.0                           <== コメントアウト
server clock.nc.fukuoka-u.ac.jp                    <== NTPサーバを記述
server time-nw.nist.gov                         <== NTPサーバを記述
        :                               <== NTPサーバを記述
driftfile /etc/ntp.drift
logfile /var/log/ntp.log

マシンのUTC時刻がNTPサーバに対して数分以上ずれているとNTPが動作しないため、
NTPを動作させる前に時刻の同期を取る。

# ntpdate clock.nc.fukuoka-u.ac.jp

NTPデーモンの起動(再起動)を行う。

# service ntpd restart

起動時に常にNTPが動作するようにする。

# chkconfig --level 2345 ntpd on

NTPによる時刻の自動調整の様子を確認する。

# ntpq -p

NTPの設定などに関してはJFのドキュメントなどを参照。

crondによる時刻設定

ntpdateを実行するシェルスクリプトをcrondに実行させることにより時刻を修正する。

crondが実行するシェルスクリプト(/root/shell/ntpdate.sh)を作成する。

/usr/sbin/ntpdate clock.nc.fukuoka-u.ac.jp >> /var/log/crond.ntp 2>&1  <== ntpdateを実行
/usr/sbin/hwclock --systohc >> /var/log/crond.clock 2>&1         <== ハードウェアクロックを設定
/usr/sbin/hwclock --show >> /var/log/crond.clock 2>&1           <== ハードウェアクロックをログ出力

作成したシェルスクリプトに実行権限を与える。

# cd /root/shell
# chmod ug+x ntpdate.sh

rootのcrontabを編集する。

# crontab -e

以下の内容を追加することにより、毎日午前0時にntpdateが実行され時刻が修正される。

0 0 * * * /root/shell/ntpdate.sh

また、/etc/cron.daily/以下にntpdateを実行するシェルスクリプト(ntpdate.sh)を置くことにより、
crondに毎日決まった時間に実行させることもできる。

sudoの設定

sudoの設定は/etc/sudoersに記述されるが、設定にはvisudoコマンドを使用する。

# visudo

以下の記述を追加する。

foo ALL=(ALL) ALL                     <== fooユーザに全てのコマンドを許可する

/etc/sudoersの各フィールドの説明などについてはBash Homepage内のsudoインストール・設定のページを参照。
sudoインストール・設定のページはSolaris用の説明だが、設定の際には参考になる。

libsafe

libsafeによるバッファオーバフローの防止設定を行う。

RPMファイルをAvaya Labs Research - Projects: Libsafeからダウンロードしrpmコマンドによりインストールする。

# rpm -ivh libsafe-2.0-16.i386.rpm

インターネットサービスデーモンが起動するよりも前に環境変数LD_PRELOADをセットし、libsafeが読み込まれるように設定する。

/etc/rc.d/init.d/functionsに以下の記述を追加する。

LD_PRELOAD=/lib/libsafe.so.2           <== 環境変数LD_PRELOADを設定する
export LD_PRELOAD                 <== 環境変数をエクスポートする

設定を行ったらマシンを再起動する。

# shutdown -r now

サンプルプログラムを実行するために、/root/.bash_profileにてlibsafe.so.2を環境変数に追加する。

export LD_PRELOAD=/lib/libsafe.so.2

サンプルプログラムを実行して動作を確認する。

# cd /usr/doc/libsafe-2.0/exploits         <== ディレクトリを移動する
# ./t1                           <== サンプルプログラムを実行

オーバーフローを検出してプログラムが強制終了し、/var/log/secureにログが出力される。

Nessus

セキュリティスキャナであるNessusを用いてセキュリティのチェックを行う。

Nessusプロジェクトのサイトからnessus-installer.shをダウンロードし、Nessusをインストールする。

# sh nessus-installer.sh

対話型のインストーラが起動するので、必要に応じて質問に答えていくとNessusがインストールされる。

NessusをGUI環境で使用するためにはgtk1.2以降とNmapが必要になるので
インストールされていなければインストールする。
また、OpenSSLはNessusとNessusdの間の通信を安全にし、SSLを使うポートの監査にも使われる。
なくても動作するが、できればインストールしておく。

Nessusは専用のユーザを使用するため、nessus-adduserを用いてNessus用ユーザの設定を行う。

# nessus-adduser                  <== /usr/local/sbin/nessus-adduserにある

Login : foo                       <== fooユーザを設定する
Authentication (pass/cert) [pass] : pass     <== パスワードによる認証を行う
Login password : password             <== パスワードを設定する

最後にUser rulesとしてNessus用ユーザに与える権限を設定する。

User rules
----------
accept 192.168.0.0/24               <== 192.168.0.0/24のテストを許可する
default deny                      <== それ以外は禁止する

最後に[Ctrl] + [D]を押すと確認画面が出るので、OKなら[y]を入力して答える。

Nessusを使用するには、まずサーバであるnessusdを起動する。

# nessusd -D

Nessusを起動する。

$ nessus &

Nessusが起動すると初期画面が表示されるがこの状態ではまだNessusを利用できない。
Nessusd Hostは、Nessusdが稼動しているホスト、つまりクライアントが現在接続しているサイト名が入る。
設定したユーザ及びパスワードを入力しNessusにログインする。

NessusについてはnessusNessusを利用した総合セキュリティチェックなどが参考になる。

Postfix

postfixはインストールされているので、自動起動の設定を行えば使用できるようになる。

# chkconfig --level 2345 postfix on

動作設定を行うために、/etc/postfix/main.cfを変更する。

myhostname = apple.hogehoge.plala.jp                    <== ホスト名
mydomain = hogehoge.plala.jp                         <== ドメイン名
myorigin = $mydomain                             <== メールの送信元
inet_interfaces = all                               <== メール受信インタフェース
mydestination = $myhostname, localhost.$mydomain, $mydomain   <== 最終目的地
mynetworks_style = host                            <== メールリレー許可クライアント

postfixを再起動する。

# service postfix restart

rootのメールを一般ユーザで受信できるようにエイリアスを設定する。

root: foo

エイリアスを有効にする。

# newaliases

swatchによるログ監視

安定した動作実績を持つバージョン2.2をFTPサイト(ftp://ftp.stanford.edu/general/security-tools/swatch/)
からダウンロードし、適当なディレクトリで展開する。

# gzip -dc swatch-2.2.tar.gz | tar xvf -
# cd swatch-2.2/

インストールを実行する前にMTAやコマンドのパスを修正しておく。

MTAとwriteのパスを実態に合わせるため、sw_actions_plを修正する。

$MAILER = "/usr/sbin/sendmail";
$WRITE = "/usr/bin/write";

tailのパスと標準ログファイルのパスを実態に合わせるため、swatch.plを修正する。

$TAIL = "/usr/bin/tail -f";
$DEF_INPUT = "$TAIL /var/log/messages";

install.shを実行する。

# ./install.sh

インストールが開始され、最初の質問であるswatchのインストール先を/usr/local/binに指定し、
6番目の質問であるperlライブラリを実態(/usr/lib/perl5)に合わせる。

swatchの設定ファイル(/root/.swatchrc)を用意し、必要に応じて設定。
以下に例を載せる。
また、
How to build Internet Server with Linux: swatchのインストールと運用

などのページが参考になる。

/su\[/            echo=bold,bell,mail
/invalid/           echo,mail
/refuse/           mail
/file system full/      echo

swatchを自動起動するための設定を/etc/rc.d/rc.localに記述する。

/usr/local/bin/swatch -c /root/.swatchrc -t /var/log/messages &
/usr/local/bin/swatch -c /root/.swatchrc -t /var/log/secure &

ログのローテート時にswatchも再起動するようにする。

/etc/cron.daily/logrotateを以下のように設定する。

killall tail                                        <== tailをkill
sleep 2
/usr/sbin/logrotate /etc/logrotate.conf                    <== 元からある設定
/usr/local/bin/swatch -c /root/.swatchrc -t /var/log/messages &   <== swatchを再起動
/usr/local/bin/swatch -c /root/.swatchrc -t /var/log/secure &     <== swatchを再起動

Tripwireによる改ざん検出

クラッカーなどによるファイルの改ざんを検出するためにTripwireを導入する。

Tripwire.org - Home of the Tripwire Open Source Projectよりバイナリパッケージをダウンロードし、
md5sumを使用してダウンロードしたパッケージが改ざんされていないかどうか確認する。

# md5sum tripwire-2.3-47.i386.tar.gz

MD5によるシグネチャをダウンロードページに記載されている値と比較して同じであることを確かめる。

改ざんチェックをしたパッケージを展開し、インストールする。

# gunzip tripwire-2.3-47.i386.tar.gz
# tar xvf tripwire-2.3-47.i386.tar
# rpm -ivh tripwire-2.3-47.i386.tar

パッケージインストール後にキーを生成する。

# cd /etc/tripwire
# sh ./twinstall.sh

インストールシェル実行後に何度かパスフレーズの入力を求められるので、
必要に応じてパスフレーズを入力する。

twcfg.txtに基本事項を設定する。
変更項目のみ以下に記述する。

SYSLOGREPORTING =true
SMTPHOST =localhost
SMTPPORT =25

twcfg.txtを編集した場合には、暗号化されたtw.cfgを再作成する必要がある。

# twadmin -m F -S site.key /etc/tripwire/twcfg.txt

要求されたパスフレーズを入力すると暗号化されたtw.cfgが作成される。

Tripwireがモニタリングするシステムに関して、twpol.txtを編集しデータベースとして格納するプロパティを作成する。

twpol.txtを編集したらtw.polを作成し、データベースを作る。

# twadmin --create-polfile /etc/tripwire/twpol.txt

要求されたパスフレーズを入力するとポリシーファイルtw.polファイルが更新される。

Tripwireに--initオプションをつけて実行し、データベースを構築する。

# tripwire --init

要求されたパスフレーズを入力するとデータベースの更新が開始され、
存在していないファイルなどに対してエラーが出力される。

エラーが出力されたらtwpol.txtを編集し直してtw.polを再作成し、再度データベースを作成する。

Tripwire毎日一回を定期的に実行するために/etc/cron.daily/tripwire-check作成し自動実行させる。

#!/bin/sh
HOST_NAME=`uname -n`
if [ ! -e /var/lib/tripwire/${HOST_NAME}.twd ] ; then
  echo "**** Tripwire database for ${$HOST_NAME} not found. ****"
else
  test -f /etc/tripwire/tw.cfg && /usr/sbin/tripwire --check -M
fi

NFS

NFSを使用してネットワーク上にあるLinuxとディレクトリを共有する。

NFSサーバ:192.168.0.3
NFSクライアント:192.168.0.4
とする。

NFSサーバ側にて/etc/exportsファイルを編集する。

マウントを許可するディレクトリ名        マウントを許可するホスト名(読み書きを許可)
/mnt/share                    192.168.0.4(rw)

/etc/exportsファイルを編集したらnfsdを再起動する。

# /etc/rc.d/init.d/nfs restart

NFSクライアント側からNFSサーバへ側で設定されたディレクトリをマウントする。

マウント先ホスト名:マウント先ディレクトリ名      マウントポイント
#mount 192.168.0.3:/mnt/share             /mnt/nfsdir