各サービスの設定方法

目次

インストール方法についてはメインページのインストールログを参照してください

samba
icecast
squid
tcp wrapper
openssh
戻る

samba

<サービスの提供>
/etc/servicesの記述を行います。以下の3つのサービスを開くために下の様に追記してください。

netbios-ns 137/udp
netbios-ssn 139/tcp
swat 901/tcp

/etc/inetd.confでこのサービスを待ち受け状態にします。以下の様に記述してください。インストール先はSolaris8であれば/usr/local/samba になっているはずです。

netbios-ssn stream tcp nowait root /usr/local/samba/bin/smbd smbd
swat stream tcp nowait.400 root /usr/local/samba/bin/swat swat

inetd.confを覗いたついでに他の不要なサービスは全てコメントアウトしておきましょう。特にfingerやrsh rloginはセキュリティー上、閉じておいた方がよいと思います。( SWATを使わない場合、2行目は要りません )
注意:nmbデーモンは一度起動すれば常駐しますのでinetdからの起動は止めています。度々Windowsクライアントがnmbdにパケットを送るとinetd側で2重起動となりエラーを返します。ワークステーションとして常時稼動している場合は inetdからではなくて直接nmbdを起動している方がよいかもしれません。nmbdは起動時に一度立ち上げておけばいいでしょう。
rcに /usr/local/samba/bin/nmbd -Dを追加しておきます。

#! /bin/sh
/usr/local/samba/bin/nmbd -D
 

<SWATでファイルとユーザーの管理>
SWATは、ブラウザーでsambaの設定を可能にする便利なツールです。Linuxでsmb.confを記述した経験のある方にはとても簡単に思えるでしょう( つまりsmb.confを記述してくれるツールなのです)。SWATを利用する場合は次の様に、ブラウザからポート901に接続します。

http://hostname:901

まずブラウザーから ポート901で接続します。ユーザーは root権限をもっているユーザーでログインしてください。
GLOBAlSを選択すると下の画面になります。ここでファイル共有を許可する端末にMS-Windowsがある
場合、encrypt passwordsを「Yes」にしてください。これは暗号化してパスワード認証を行うという意味です。MS-WindowsはNetbiosのパスワード認証を暗号化します。古くから使われているUNIXでは暗号化せず認証を行います。

SHARESを選択してください。はじめに「 Choose Share 」に共有フォルダ名を入力して「 Create Share 」を押します。pathには共有を許可するディレクトリのパスを記述します。

PASSWDORDの設定です。UNIXユーザーの中からsambaユーザーを作ってください。ネームサービスを利用してもかまいません。

<smb.confについて>
smb.confはこのSWATが作ってくれますがもっと細かな設定がしたい場合はsamba/lib/smb.confを変更してください。またSWATのVIEWというコンテンツを選択すれば smb.confを一覧できます。smb.confのテキストは次の構造になっています。

[セッション名]
パラメーター名 = 値

セッション名はsambaが提供する共有名になり、その共有の設定を「パラメーター名 = 値」という形式で設定していきます。ただし global homes printers は特定の共有に対応しません。例を示します。

[global]
netbios name = [コンピューター名]
workgroup = [ワークグループ名]
server string = [詳細表示内容]
encrypt passwords = Yes
smb passwd file = [smbpasswdファイルの場所]
coding system = EUC
wins support = yes
local master = No
guest account = nobody
map to guest = Bad User
hosts allow = 192.168. 127.0.0.
[public]
path = /export/home0/public/

[tarou]
comment = File Server
path = /export/home1/tarou
write list = tarou

[hanako]
comment = Work Files
path = /export/home1/hanako
write list = hanako

一般にread only = yes として書き込み全面 拒否した後で、write list = [書き込みユーザー名]を定義します。これとは逆に read only = no として書き込み全面許可したあとで 書き込み拒否ユーザーを定義する方法も考えられます。上の例をみるとreal onlyという値はありません。これはreal only = yesを定義していることになり、read only = no にしたい場合は real only値を記述しましょう。

次にSWATを使わずにsambaユーザーを作成する場合は次のコマンドラインを実行してください。(usernameは/etc/passwdのユーザー)

# smbpasswd -a username

samba専用のユーザーを作りたい場合は、次のコマンドを実行します。

# useradd -s /bin/false smbuser

接続できない場合は smb.conf の記述が間違っているかもしれません。smb.conf の記述のチェックはtestpermというsambaに含ませているツールを使ってください。そのまま実行すればsmb.confをスキャンしてくれます。またログを具体的に確認したい場合は [global] の log level を 「 log level = 2 」にしてください。

<smbpasswdについて>
ディフォルト設定では/usr/local/samba/private/smbpasswd に保存されます。privateが無い場合はエラーが出ます。インストール後privateを作成すれば問題ないのですが、この様な重要なファイルは管理しやすい/etc等に置いておきたいと考えた場合、smb.confに smb passwd file = /etc/smbpasswd と記述して smbpasswdの場所を定義しておきましょう。

<PDCについて>
インストール仕様はなにもかわりません。日本語環境にさえ気を配っていればその後のsmb.confファイルの設定でサービスを開始できます。次のsmb.confはその例です。

[global]
netbios name = [コンピューター名]
workgroup = [ワークグループ名(Windowsではこれをドメインと呼びます)]
server string = [詳細表示内容]
coding system = EUC
wins support = yes
logon drive = z:
client code page = 932
encrypt passwords = Yes
security = user
domain master = yes
domain logons = yes
logon script = login.bat
admin users = root
domain admin group = @admin
domain guest group = @other
guest account = nobody
map to guest = Bad User
share modes = no
os level = 65
hosts allow = 192.168. 127.0.0.

[homes]
guest ok = no
read only = no
create mask = 0700
directory mask = 0700
oplocks = false
locking = no

[netlogon]
path = /usr/local/samba/netlogon
writeable = no
guest ok = no

sambaユーザーに固有の設定が必要です。以下の様にコンピュータ名(利用端末)の後ろに$マークを持つユーザーとsambaユーザーにルート権限をもつユーザーを追加しなければなりません。samba管理権限(root)をもったユーザーはadminグループに属するとします。一般sambaユーザーはusersグループに属するとします。

# groupadd admin
# groupadd users
# useradd -s /bin/false -m -d /var/empty [windowsのホスト名]$
# /usr/local/samba/bin/smbpasswd -a -m [windowsのホスト名]
# /usr/local/samba/bin/smbpasswd -a root

以上でPDC初期設定は完了です。WindowsNTから動作確認を行ってみて下さい。以降/etc/passwdとsambaユーザーを追加すればWindowsNTユーザーで利用できるようになります。

<注意>
Windowsのマシン名とワークグループを変更する場合、Windowsコンピュータを再起動しなければなりません。それをせずに一度にドメイン登録まで済ませようとすると、無駄に20分ほど悩む事になります。


icecast
<サービスの提供>
ディフォルトのインストール先が/usr/local/になっているはずですので 設定ファイルは/usr/local/icecast/confにあるはずです。見本があるので それをコピーして使って問題はありません。
# cp /usr/local/icecast/conf/icecast.conf.dist /usr/local/icecast/conf/icecast.conf

ストリーミング配信するには再生リストを作ります。もし MP3をおいてあるディレクトリが/export/home/mp3だとすると下記の様になります。

# find /export/home/mp3/*.mp3 > /export/home/mp3/playlist
# /usr/local/icecast/bin/icecast
# /usr/local/icecast/bin/shout localhost -P hackme -p /export/home/mp3/playlist

hackme はディフォルトのパスワードです。localhostは配信ホスト名です。MP3ファイルをリスト化したplaylistはテキスト形式で記述されています。Winampやxmmsなどストリーミング再生機能がついたMP3プレーヤーで再生するには http://localhost:8000 の様に配信ホストをポート8000番で接続してください。

squid

<サービスの提供>
初期設定はデフォルト設定をほぼそのまま利用していますが、ここではより細かな設定やログに関する設定項目や、アクセスコントロールを紹介します。キャッシュサーバーのログはすぐに膨張しますので、十分な容量 をもつ場所を取った方がいいでしょう。そこで次の場所にsquidログを移します。

# mkdir -p /var/log/squid
# chown squid:squid /var/log/squid

squid/etc/squid.confを修正します。(609行目あたり)

cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log

reconfigureします。

# /usr/local/squid/bin/squid -k reconfigure

squidにはログのローテーションの機能も備わっていますので定期的に利用するとよいでしょう。

# /usr/local/squid/bin/squid -k rotate

ログを保存するファイル数もsquid.confで設定できます。(1726行目あたり)

logfile_rotate 10

今回は10世代数を保存するように定義しました。

アクセスコントロールを使って特定の外部ホストまたは内部ホストからの利用を許可する場合はsquid.confのacl(1408行目あたり)で行います。

acl limithost src 192.168.10.0/255.255.255.0
http_access allow limithost (1454行目あたり)

デフォルトでは次の様に全てのホストからの許可を拒否しています。

acl all src 0.0.0.0/0.0.0.0
http_access deny all

deny allはコメントアウトして、個々のネットワークを許可させてください。(ここではlimithostになります。)

その他の設定項目
cache_mem 8 ( キャッシュのメモリー)
cache_swap 100 ( キャッシュに使うSWAP領域の容量設定 )
cache_dir /usr/local/squid/cache ( キャッシュを収納する場所を指定 )

squid.confファイルの文法チェックをする場合は次のコマンドラインを利用すると便利です。

# /usr/local/squid/bin/squid -k parse

ポートには気を配ってください。ReGetやIriaなどMS-WindowsからProxy経由でブラウザ以外のインターネットツールを利用するユーザーを持つ場合、ポート番号は8080や80など一般に使われている番号にしておかないと利用できません。そのツール自体に細かなProxyのポートを指定する必要があるからです。

<セキュリティーを考えた高度な利用方法>
もしファイアーウォールでアプリケーションレベルにフィルターをかけている場合、透過型プロキシを利用する方法がよく用いられています。透過型プロキシは自身が受け取ったhttpプロトコルパケットを自動的にキャッシュします。次の様にsquid.confを修正することで80ポートと8080ポートを自動キャッシュします。

http_port 192.168.10.1:3128
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_heater on
ie_refresh on

ファイアーウォールの設定でキャッシュサーバー(今回は192.168.10.1)に対する80ポートと8080ポートの通信を自分自身の3128ポートに向けて下さい。squid.confの設定よりcacheサーバーは3128ポートを開けて待機しています。ie_refresh on とはMSのInternet Exproreのバグに対処したものです。(端末にWindowsがある場合は必ず必要です)

企業や学内などの利用者が多いネットワークでは、アクセスコントロールをIPではなくユーザー単位 で制限する方が一般的でしょう。squidにはPAM.NIS,LDAPの認証モジュールが同梱されています。

# cd squid-2.4/auth_modules

利用する認証モジュールをインストールしてください。

# make
# make install
# chmod u+s [インストール先ディレクトリ] (認証実行者をrootにするためです)

インストール後はsquid.confを修正してください。(923行目、1402行目、1454行目あたり)

tcp wrapper

<サービスの制限>
設定ファイルは次の2つです。 /etc/hosts.deny /etc/hosts.allow これらは /etc/inetd.confから tcpdで呼び出されたデーモンのみ 対象になります。設定は以下の様に行ないます。

hosts.deny ALL : ALL

いったん全てのホストからのアクセスを禁止しています。

hosts.allow
ALL: 127.0.0.1
ALL: 192.168.1.
in.telnetd: 61.120. 72.245 192.168.0.

ここではtcpdを経由して立ち上がる全てのサービスを127.0.0.1(自分自身)、192.168.1.0から192.168.0.255まで許可、そしてtelnetは 61.120.0.0 から61.120.255.255まで、192.168.0.0から192.168.0.255までを許可するということです。
<サービス>: <許可するホストのIPアドレス>
:(コロン)のあとにはスペースを入れて下さい。

起動はinetd.confを使ってください。

telnet stream tcp nowait root /opt/local/tcpd/bin/tcpd /usr/sbin/in.telnetd
ftp stream tcp nowait root /opt/local/tcpd/bin/tcpd /usr/sbin/in.ftpd
imap stream tcp nowait root /opt/local/tcpd/bin/tcpd /usr/local/etc/imapd

tcp wrappperを挟んで起動します。アクセスコントロールしないものはそのままでかまいません。tcpdファイルを追記したものだけが有効になります。

なお、tcpdchkというコマンドで正しい文法で書けているかどうかチェック することができます。
% su
# tcpdchk
#
このように、何もメッセージがでなければ完璧です。

% man tcpdchk
% man 5 hosts_access
で、より詳しい情報が得られます。また、これらの設定は書き換えたら すぐに反映されますので、リブートの必要はありません。

openssh

<サービスの提供>
sshdの設定ファイルはGNUソースからインストールした場合、/usr/local/etc/以下にあります。また、Solaris9移行の場合は/etc/ssh以下にあります。基本的にはなにも編集しなくてかまいません。コマンドラインから -f オプションで 指定して任意のファイルを設定ファイルとして読み込む事もできます。

<sshd_configの記述方法>
#KeyRegenerationInterval 3600
プロトコル バージョン 1 では、サーバ鍵は (一度でも使われると) ここで指定された間隔ごとに自動的に再生成されます。このように鍵を再生成する目的は、あとでそのマシンに侵入して盗聴したセッションを解読されたり、鍵を盗まれたりするのを防ぐためです。この鍵はどこにも 格納されません。値としてゼロを指定すると、鍵はまったく再生成され なくなります。デフォルトでは 3600 (秒) になっています。

#LoginGraceTime 600
ユーザがここで指定された時間内にログインできないと、サーバは接続 を切ります。この値をゼロにすると、時間制限はなくなります。デフォ ルトの値は 600 (秒) です。

#PermitRootLogin yes
ルートユーザーがログインするための設定です。デフォルトではyesになっています。かならずnoにしておいてから運用して下さい。

#AFSTokenPassing no
このオプションは AFS トークンがサーバに転送されるかどうか指定します。

#PrintMotd yes
motdをログイン時に出力する設定です。デフォルトではyesになっています。

#KeepAlive yes
システムが相手のマシンに TCP keepalive メッセージを送るかどうか指 定します。これが送られると、接続の異常終了や相手マシンのクラッシ ュが正しく通知されるようになります。しかしこれを使うと、たとえ経路が一時的にダウンしていても接続が死んでいるということになってしまい、これが邪魔になる場合もあります。その一方で、もし keepalive が送られないとすると、セッションはサーバ上で永久に残ってしまことがあり、 ``幽霊'' ユーザを居座らせてサーバ資源を消費することがあります。 デフォルトは ``yes'' (keepalive を送る) です。そのためクライアントはネットワークがダウンするか、リモートホストがクラッシュすると 通知してきます。これは永久に残るセッションを防ぎます。 Keepalive を禁止するには、この値を ``no'' にする必要があります。

#UseLogin no
対話的ログインセッションのさい、 loginプログラムを使うかどうかを指定します。デフォルトでは ``no'' になっています。対話的でな いリモートコマンド実行のときに loginが使われることは決してありません。また、これが許可されていると X11Forwarding (X11 転送) は許可されなくなるということに注意してください。なぜなら、 login(1) は xauth(1) クッキーの扱いを知らないからです。 UsePrivilegeSeparation が指定されている場合は、認証のあとで禁止されます。

#UsePrivilegeSeparation yes
sshd が、受けつけるネットワークトラフィックを処理するために root 権限を分離するかどうかを指定します。これは root 権限をもたない子 プロセスをつくることによっておこなわれます。認証が成功すると、そのユーザの権限をもつ別のプロセスが新たに作られます。これの目的は、まずそうな部分を root 権限をもたないプロセスのみに限定すること によって、 root 権限による被害の拡大を防ぐためです。デフォルトで は ``yes (root権限を分離する)'' になっています。


その他の設定項目:

AllowGroups (許可するグループ)
このキーワードにはいくつかのグループ名パターンをスペースで区切って指定します。これが指定されると、ユーザの基本グループがそのパタ ーンのどれかにマッチするグループであるようなユーザだけがログイン を許可されます。パターン中では `*' および `'? がワイルドカードと して使えます。有効なのはグループの「名前」だけで、数字で表された グループ ID は認識されません。デフォルトでは、ログインはすべての グループに許可されています。

AllowTcpForwarding (TCP 転送の許可)
TCP 転送を許可するかどうか指定します。デフォルトは ``yes'' です 。TCP 転送を禁止しても、ユーザにシェルのアクセスを禁止しないかぎ りセキュリティの向上にはならないことに注意してください。なぜなら ユーザはいつでも自前の転送プログラムをインストールして使うことが できるからです。

AllowUsers (許可するユーザ)
このキーワードにはいくつかのユーザ名パターンをスペースで区切って 指定します。これが指定されると、そのパターンのどれかにマッチする ユーザだけがログインを許可されます。パターン中では `*' および `'? がワイルドカードとして使えます。有効なのはユーザの「名前」だけで 、数字で表されたユーザ ID は認識されません。デフォルトでは、ログ インはすべてのユーザに許可されています。もしこのパターンが USER@HOST という形をとっている時は、ユーザ名 USER と ホスト名 HOST を別々にチェックでき、特定のホストからの特定のユーザのログイ ンを制限することができます。

ClientAliveInterval (クライアントの生存チェック間隔)
sshd は一定時間ごとに、暗号化された通信路を経由してクライアントに 応答を要求するメッセージ (client alive message) を送ります。その際、何もデータが送られてこなかったらタイムアウトする時間を秒数で 指定します。デフォルトの値は0で、これはメッセージを送らないことを意味します。このオプションは プロトコル バージョン2でのみサポ ートされています。

ClientAliveCountMax (クライアントの生存チェック最大カウント数)
sshd が無反応のクライアントに対して client alive message を送ってみる最大数を指定します。 client alive message に対する応答が連続してこの回数だけなかった場合、 sshd は接続を切り、セ ッションを終了します。

client alive message
KeepAliveとはまったく違うことに注意してください。 client alive message は 暗号化された経路を介して送られるので、偽造されることはありません 。 KeepAlive によって設定される TCP の keepalive オプションは偽造 される可能性があります。client alive のメカニズムはクライアントあるいはサーバが、いつ接続が切れたのかを知りたいときに役立ちます。 デフォルトの値は 3 です。もし ClientAliveInterval (上記) が 15 に 設定され、 ClientAliveCountMax がデフォルトのままである場合、これ に反応できない ssh クライアントはおよそ 45秒後に接続が切られます 。

<RSA公開鍵を用いた認証>
RSA認証を利用することで、公開鍵を登録していないホストからの接続を拒否することが可能になります。 導入にはユーザごとにssh-keygenコマンドを実行して公開鍵と秘密鍵の対を作成する必要があります。

> ssh-keygen
Enter file in which to save the key(/home/local/.ssh/id_rsa):
Generating public/private rsa key pair. Enter passphrase(empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/local/.ssh/id_rsa. (秘密鍵)
Your public key has been saved in /home/local/.ssh/id_rsa.pub. (公開鍵)
The key fingerprint is:
md5 1024 d8:ef:42:2d:4a:51:30:24:ad:14:31:12:b5:bc:26:c3 local@marine
>

最後に公開鍵ファイルの内容を、リモートホストの~/.ssh/authorized_keysファイルに追加します。 このファイルには接続を許可するすべてのホストの公開鍵が格納されています。 RSA認証が利用可能になったら、パスワード認証は無効にした方がよいでしょう。設定する際には/etc/ssh/sshd_configでPasswordAuthenticationオプションをnoに設定して下さい。

<ssh-agentを用いた接続>
パスフレーズを非常に長いものとした場合、毎回入力するのはかなり繁雑な作業となります。この作業を自動化するのがssh-agentです。

> eval `ssh-agent`
Agent pid 521
> ssh-add
Enter passphrase for /home/admin/.ssh/id_dsa: (パスフレーズ入力)
Identity added: /home/admin/.ssh/id_dsa (/home/admin/.ssh/id_dsa)
> ssh 192.168.230.29

このようにしてevalコマンドを用いてssh-agentを起動します。次にssh-addコマンドを用いて予めパスフレーズを入力します。これにより実際にsshやscpなどのコマンドを発行する際に毎回パスフレーズを入力する必要がなくなります。

<Solaris9 のv1対応>
Solaris 9のデフォルトではv2のみが有効となっています。 も有効にするには、/etc/ssh/sshd_configの中を次の様に修正して下さい。

# Only v2 (recommended)
#Protocol 2 (コメント)
# Both v1 and v2 (not recommended)
Protocol 2,1 (コメントアウト)
HostKey /etc/ssh/ssh_host_key (この行を追加)

sshd.configを修正したら、次の様にssh-keygenコマンドより、host_keyを生成して下さい。

# ssh-keygen -t rsa1 -f /etc/ssh/ssh_host_key -N ''

最後にsshdを再起動します。

 


<戻る>