サーバ構築・管理

HOME

■ 概要

ハウルが動く城を使って荒地の魔女やサリマン先生の脅威から巧みに身を隠したように、サーバ管理者もセキュリティを強化していろいろな脅威からサーバを守らないといけません。

ハウルは魔法陣を用いて強力に守られた動く城を構築しました。
同様にサーバ管理者も強力なアプリケーションやコマンド群を駆使して頑丈なサーバを構築しないといけません。

構築が終われば運用となります。そうなるとネットワークを介した脅威が考えられます。
自分の管理するサーバに対して、どこかセキュリティホールになっているポートがないかといったアクセスが頻繁にあります。

ハウルはそういう時、ドアのダイヤルを回して出入り口を切り替えるようにして追っ手を惑わせていました。 サーバ管理者もまた、不要なポートは閉じて脅威を未然に防がないといけません。

■ 私的頑丈なサーバ構築の大原則

頑丈なシステムづくりを実現するには、なんと言っても構造がシンプルであること!(Simple is the best!)

これに尽きます。

複雑になればなるほど、工程が多くなればなるほど人間の把握しきれないところに弱点が潜む可能性が高くなります。

したがってアクセス制御・ファイヤーウォールのたぐいでさえ複数入れる必要はなく、どれか一つを把握して使いこなせばいいということになります。

犬が自分のシッポを追い掛け回すような無駄な工程は要らないということです。

もしそれでサーバに侵入されたとしたら原因がはっきりしています。自分の設定ミスということです。だからこそ把握しきれるようにシンプルであるべきだと思います。

サーバに侵入されたらもうアウト、あとできることと言ったらネットワークケーブルを引き抜いて被害が他に及ぶのを防ぐくらいしかありません。
なので侵入された後の対処法を学ぶくらいなら、侵入されない為の予防策を学ばないといけません。

最低限、開いているポート(サーバがアクセス受け入れ状態)は全て把握していないといけないことになります。そうすれば攻撃を受けた後に「こんなポートが開いていたなんて知らなかった」ということがなくなります。

■ OSのインストール

▼ どのOSをインストールする?

まずPC−UNIX(Linux, FreeBSD)をインストールします。

タダなのでサポートがなく少々不便ではありますが、これを逆手に取ってプラス思考を加えればサーバに関する技術が身につくってなもんですよ。

そしてできるだけ最新の安定版を入れます。(セキュリティ&対応デバイス)

重大なセキュリティホールが発見された時はすぐにパッチを当てるとかできたらカッコいいです。



▼ パーティション分け

次にブチ当たる問題がパーティションをどう分けるかになります。

よくスワップを杓子定規的にメモリの2倍にしてるケースがありますが、これはメモリが128MB程度の時代までの話でGB単位のメモリを積むことができるようになった今は、スワップさせたら負けだと思います。

とは言ってもスワップを必ず作らないといけないOS&バージョンもあったりするのでそういう時は最小限(2MBとか?)確保しておくしかないですね。ページングの関係でもっと確保していないと処理がもたつくような話もありますが知ったこっちゃありません。

とりあえず以下のような切り分け

ファイルシステム容量説明
/1GBOS起動の大事な部分
/tmp1GB一時ファイル用に使われる領域は/とは切り分けた方がよさそう
swapできればメモリを十分に搭載して作らない方向で
/var20GB想定されるログの最大容量分
/usr残り全部アプリケーション領域

/usrを最後に多く割り当てる理由

/usrの区分説明
アプリケーション置き場だいたい2・3GB止まり。サーバなのにXウィンドウまでインストールしたとしてもこれの倍程度には収まる
ユーザのホーム領域/home以下に存在する(システム)ユーザが個別に使う領域の実体は/usr/homeにある
Webのコンテンツ置き場/usr/local/www辺りに置かれるWebコンテンツは最終的にどれくらいの容量にまでなるか不確定

という理由から、将来膨れ上がるかも知れないデータ量にできるだけ対応するために/usrは多めに確保しておきます。


■ インストール直後の作業

▼ 自分の使うユーザ作成

インストール直後、もしroot以外のユーザを作成していなければまず自分の使うユーザアカウントを作成します。

ユーザ名「admin」とかどうでしょう。いかにも管理者って感じでカッコいいです!

でも実はセキュリティのことを考えるとユーザ名として失格(参照)ですが、最初のうちは使いやすい名前重視でもしょうがないでしょう。

ユーザ作成方法



▼ リモート接続できる環境を整える

サーバにOSをインストールしたらあとは直接サーバを触ることはほとんどありません。細かな設定はリモートで接続して行います。

リモートで接続するために必要な物は「ハブ」一個と「LANケーブル(カテゴリー5)」2本です。

LAN接続 リモート管理 リモート操作 ハブ ネットワークケーブル

通信する時はネットワークカードに割り振られたIPアドレスで通信相手を見分ける(MACアドレスのことはここでは触れない)ので、互いのネットワークカードにはTCP/IP通信するときのIPアドレスが割り当てられている必要があります。

ネットワークの設定

次にリモートPC内に、SSHで接続するためのソフトが入ってなければこれをインストールする。(Tera Term
SSH(セキュアーシェル)は、通信の際に暗号路(通信経路を暗号化)を確立してくれます。以前広く使われてた暗号化無しのtelnetに取って代わるものです。



▼ SSHでリモート接続

SSHクライアント(Tera Termなど)を立ち上げて、サーバに割り振ったIPアドレスを入力し、その22番ポートに対して接続を試みる。

無事にloginの応答があればユーザ名を入力してEnterキーを、次にpasswordを聞いてくるので設定したとおりに入力してEnterキーを押すとこれでSSH接続が完了となる。あとはまるでサーバ内を自由に行き来するかのように操作できるようになる。

login時に表示されるメッセージは、/etc/motdの編集で自由に変えられる。

※ちなみにrootでのSSH接続は通常は拒否する設定になっている。

SSH接続できない場合はコチラへ



▼ アプリケーション追加

FreeBSDならportsを、Linuxならrpmコマンドなどで追加します。

自分の使いやすいエディタなんかはこの段階で追加しておきたいですね。クォータやクーロンの設定、vipwコマンドなんかも環境変数EDITORに設定されたエディタが起動されるので使いやすいエディタは必須です。

圧縮ファイルを落としてきて手動でインストールする原始的な方法もあります。



▼ その他のユーザ作成

rootおよび自分が使う一般ユーザは既に作成済みなので、あとはその他にサーバを利用するユーザがいれば作成します。

サーバは自分ひとりだけで使うことよりも複数人(マルチユーザ)で使うことの方が多いのでユーザ管理はサーバ管理者にとってメインの仕事の一つになります。

ユーザ作成方法



▼ 環境設定

環境設定はユーザ各自が自分の使いやすいように変えて構わない部分です。
各ユーザのホームディレクトリにあるドットで始まるファイルが設定ファイルになります。

例えば自分の使い慣れたシェルによって環境設定ファイルも違ってきます。

[~/.cshrc] ...Cシェル使用者

[~/.shrc] ...Bourneシェル使用者

[~/.vimrc] ...viエディタ使用者


▼ カーネル再構築

カーネルの再構築(リビルド)をしないと使いたい機能が使えない! といった場合にはする必要がありますが、
基本的に今は再構築しないでパラメータ値を設定して起動時に値を反映させてチューニングすることができます。

再構築したところでなにか軽くなったみたいな体感はないと思います。暇ならやってみるのもいいか程度ですが私達には残された時間がありません。



[/boot/loader.conf]の例

[/etc/sysctl.conf]の例


▼ パーティションテーブルのバックアップ

余力があれば行う(fdiskコマンドほか)


■ 起動と終了

▼ サーバの起動

起動は電源を入れれば自動的に進んでいくので特にやることはない。表示される文字を眺めるぐらいしかできない。

表示スクロールが速いので起動が終わった後に改めて起動ログを見るしかない。



起動時のログは/var/log/boot.logに残ってる場合もあります。

その他ログを見て起動時エラーが出てないか確認する。

/var/log/messagesを始めとするsyslog関連(/etc/syslog.confを見てログの振り分けを確認)をチェック

ログの中にはバイナリ形式で保存されている/var/log/wtmpや/var/log/utmpがあるのでこれはwhoコマンドなどを使って見ることができる。

ユーザのログイン履歴を見る



一通りログを見て一つもエラー・警告、不振な点がない状態であることを確認しておく。

見慣れないメッセージがあればとりあえずググる。



OS起動時に実行させたいスクリプトが用意されていなければ起動スクリプトを自作することになる。

簡単な起動スクリプト例

上記スクリプトは、"foo"というプログラムの常駐(デーモン)"food"を起動/停止させるためのごく簡単なシェルスクリプトになる。

Linuxなら/etc/rc.d/init.d/foodというファイル名で保存して実行権を与え、chkconfig --level 3 food onのようにしてランレベルごとの起動設定(リンク張り)を行う。

FreeBSDなら/usr/local/etc/rc.d/foo.shというファイル名で保存(拡張子を必ず.shにする)して実行権を与える。

OSは起動時に所定の場所に存在するスクリプトに引数"start"を渡して実行していく。



▼ サーバの終了

サーバはノンストップで運用して、まるでサーバ管理者はなにもしてないんじゃないかと思わせるくらい安定稼動させつづけたいものだが、移設などがあれば電源を落とさざるを得ない。

メモリ上にバッファされているすべてのデータをディスクに書き込むよう、まずsyncを3回ぐらいブチかます。

「電源が切れる状態になりました。」みたいなメッセージが出て、もし電源を切らずにどれかキーを押せば再起動される。
電源を落とす場合にはストンと落ちるまでボタンを長押しする。(機種によりけりなので元電源を引き抜く方が楽)



syncを連打するのが面倒なら、内部でsyncしてくれているshutdownコマンドを使うとよい。



FreeBSDではAPMを有効にすることで、電源を完全に落とすことができる。

[/etc/rc.conf]



サーバの再起動はコチラ


■ ドメインの取得

サーバを公開して世界中からアクセスしてもらうにはホスト名を付けなくても、グローバルなIPアドレスが割り振られていれば可能です。
ですがせっかく公開するからには企業名や扱う商品または個人的に好きなフレーズなどが盛り込まれたホスト名にしたいものです。

こういう場合はまずレジストラ(お名前.comやバリュードメインなど)へ行き、まだ他で使われていないドメインを取得します。
他で使われているかどうかは「whoisドメイン検索」でチェックします。

無事に自分のドメインを取得できたら、次は自分の公開するサーバがどのDNSサーバを使うかで選択が分かれます。



▼ 自分でDNSサーバを構築する場合

「example.com」というドメインを取得したとすると、DNSサーバに「ns.example.com」や「dns.example.com」みたいなホスト名を付けます。 "ns"や"dns"といったサブドメイン部分は自分で自由に決められる部分です(63文字以内?)。

このホスト名自分の所有するグローバルなIPアドレスを関連付けるためにレジストラの管理画面でNSレコードとAレコード設定します。

あとは最大24時間(実際は数時間程度?)待てば反映されて、「example.com」ドメイン関係のアクセスが自分のDNSサーバに来るようになります。

サブドメインは自由に付けられるので自分のDNSサーバ設定でメールサーバを「mail.example.com」に、ウェブサーバを「www.example.com」に、FTPサーバを「ftp.example.com」に・・ などいくつでも好きに付けられます。
「mitsumeautosunaonioshaberidekinai.example.com」のようなホスト名でも問題ないかも知れません。

グローバルなIPアドレスは、固定IPアドレスが望ましいです。プロバイダに接続する度に違うIPアドレスが動的に割り振られるものだとダイナミックDNSを使う手もありますが、やはりなにかと不便です。



▼ レジストラ所管のDNSサーバを利用する場合

初期設定ではレジストラ所管のDNSが設定されていると思います。

管理画面で使うホスト名の分をAレコード設定します。メールサーバはMXレコード設定もすることになります。


■ 各種サーバ構築

▼ DNSサーバ

DNSは、ホスト名とIPアドレスの情報をメモリ上にデータベース化して持つことで、問い合わせに素早く応答します。

したがってひと昔・ふた昔前の古いマシンを使っても十分なパフォーマンスを発揮できるということになります。
安定稼動さえできればその辺の粗大ごみとして捨てられているようなマシンでも十分イケるでしょう。

設定で気をつけることは、再帰クエリを許可しないこと(recursion no)、
セカンダリーDNSを有する場合はゾーン転送を制限すること(allow-transfer)

DNSサーバ構築



▼ メールサーバ

メール送信(転送)は認証の要らないバケツリレーなので、リレーを制限することがスパム対策になります。

スパム発信者はなんでもリレーしてくれる寛大な踏み台用サーバを探しています。
ここでは心を狭く持ち、渡ってきたバケツの水をぶち撒けるような設定にします。

メールサーバ構築



▼ Webサーバ

Webサーバのログは定期的に切り分けて古いものから削除していかないと膨れ上がってディスクスペースを圧迫してしまいます。

Webサーバ構築


■ ポート管理

ポート番号とサービス名の割り当ては、/etc/servicesファイルに記述されている。

ポート番号はIANAが定義/管理している。



▼ ポート番号の大別
ポート番号説明
0 - 1023 well-known portと呼ばれ、root権限で使用される
1024 - 49151アプリケーションで主に使われる
49152 - 65535ユーザが自由に利用できる範囲

ポート番号は0番から65535番まである。



▼ 押えておきたいポート一覧
ポート番号説明
tcp/20ftpファイル転送
tcp/21ftpコマンド操作
tcp,udp/22ssh
tcp/23telnet
tcp,udp/25smtp
tcp,udp/53dns
tcp,udp/80http
tcp/110pop3
udp/123ntp
tcp,udp/161snmp
tcp,udp/443https
udp/514syslog

なお、pingコマンドやtracerouteコマンド(Windowsではtracert)でお馴染みのICMPというプロトコルにはポートというものはない。
IP(ネットワーク層レベル)による通信において、ネットワーク状況を事前に把握するためのもの



▼ 開いているポートを確認するコマンド

ネットワーク設定に不備があると-nオプションを付けないで実行した場合、延々と待たされるので注意



[Linux]

ポートスキャンを行う



[FreeBSD]

■ セキュリティを上げる

▼ 使ってないサーバを停止させる

前述のコマンドを使って、開いてるポートを確認します。

telnet(ポート番号23)などがもし動いていたら停止させます。

Linuxの場合は

[/etc/xinetd.d/telnet]

yesに変更したらスーパーサーバの再起動





FreeBSDの場合は

[/etc/inetd.conf]

コメントにしたらスーパーサーバの再起動





▼ TCPWrapperでアクセス制限

インストール時にlibwrapオプション付きでコンパイルされたものはTCPWrapperでアクセス制限することになります。
多くはinetd(スーパーサーバ)で起動するものになります。

TCPWrapper制限に関係するファイルは「hosts.deny」と「hosts.allow」の2つ。



[/etc/hosts.deny] ...初期状態ではファイルが無い場合もある

[先頭にサービス名] : [制限する対象] の並びで指定する。

これで一旦はすべてを拒否することになる。すべてを拒否しておいて、次に許可設定を書いていく。

[/etc/hosts.allow]

[先頭にサービス名] : [許可する対象] の並びで指定する。

この例では、ローカルホストのみがすべてのサービスを使える設定になる。

更に細かい設定を加えていくと、



[/etc/hosts.allow]

192.168.0.2はサーバと同じLAN内にあるリモートPCといった感じで、もう一つはプロバイダー経由でサーバを利用するなどの場合

最後にTCPWrapperの設定内容をチェックするコマンドで確認します。



その他書き方の例として以下のようなものがある。


■ 定期処理

▼ バックアップ

バックアップの取り方や取る先はいろいろなパターンが考えられる。

同マシンの別ディスクにバックアップを取る場合はネットワークを使わないで済む分ハードルが低い。USB接続のバックアップ用ディスクを増設してそこに取るのが楽そう。



tarコマンド

fromディレクトリ以下をtoへバックアップ

ネットワークを使わないで済むケースでは圧縮しないで送った方が効率がいい?



rsyncコマンド

fromディレクトリ以下をtoへバックアップ



バックアップ機へ転送

バックアップ機を用意してローカルネットワークでつないだ場合は暗号化は不要なのでその分楽かと思いきや、ログイン認証とかもあるし結局やるならSSH認証+転送をやっておいた方がグローバルネットワーク経由にも対応できて手堅い。

ローカルネットワークでつないでバックアップするならいっそのことNFSマウントもありですね。

SSHを利用したバックアップを行う場合の下準備

まずはバックアップ機にバックアップ用ユーザを作成

と、いきたいところですがバックアップ機側でも全ユーザ・グループのアクセス権に対応できるユーザじゃないとバックアップを取れません。

つまりバックアップ機側もrootを使うしかないということですね。

まずバックアップ機側のrootのSSH認証をコマンドのみ許可する設定にする。



[バックアップ機/etc/ssh/sshd_confの編集]

sshdの再起動で設定変更が反映されます。

次はバックアップ元でSSH鍵を生成(パスフレーズなし)



[バックアップ元でSSH鍵の作成]

こうして作成したバックアップ元~/.ssh/id_dsa.pub内容を、ssh-copy-idコマンドでバックアップ機 /root/.ssh/authorized_keys2に追加している。
(これがauthorized_keysの場合もある)



[バックアップ機/root/.ssh/authorized_keys2の編集]

ssh-dssの前に使用コマンドおよび制限を追加

このコマンドの記述内容はrsyncを-vvオプション付きで実行してみないとわからない。

編集後はパーミッションが[600]になってなければchmod 600 authorized_keys2

あとはcronまたは/etc/rsyncd.conf設定でrsyncコマンドを定期実行させるようにすればよい。



[非圧縮でリモートへバックアップ]

圧縮率の高いテキストファイル系が多い場合は以下のように圧縮したほうが転送効率がよさそう。

[圧縮でリモートへバックアップ]

削除されたファイルがあればバックアップ側でも削除する(同期させる)場合には--deleteオプションを使う。

[同期させる]

なんかここまでしなきゃいけないの?って感じですね。完全にミラー化していつでもスペアマシンとして待機させておくならここまで必要ですが、データ量がさほどないならとりあえずrootに暗号化したアーカイブの圧縮ファイルを作らせておいてメールに添付して送るなり一般ユーザが定期的に退避させるとかでもよさそうです。
それ以外だと、少し銭はかかりますがRAID5を導入して手抜きをするなんてどうでしょ




▼ 負荷を監視

サーバのどの部分に負荷がかかっているか推察するためのコマンドがある。

【CPU】

CPUの処理速度が追いついてるかどうか判断するためのコマンドです。

vmstatコマンド

プロセス、仮想メモリ、ディスク、トラップ、CPU の活動状況などについてカーネルが持っている統計情報を報告します

例として1秒間隔で3回表示させている。

先頭procsのr値は実行待ちのプロセス数です。搭載しているCPUの数x4以内にだいたい収まっていれば問題なしです。

cpuのus値はユーザタスクの実行時間、sy値はシステムタスクの実行時間、idはアイドル状態だった時間



uptimeコマンド

本来はシステムの稼働時間を表示させるコマンドだが、CPUの処理待ち数を知ることもできる。

load averageは1分間 5分間 15分間で見た平均負荷を表している。
1分間で見ると瞬間的に上がる場合も多いので、私的には5分間平均の値がCPU数x4を超えることが多いとCPUの処理能力が足りてないかと



topコマンド

CPU使用率の高いプロセスから順に表示



psコマンド

%CPUや%MEMなどからプロセスごとの負荷を見ることができるので、長時間負荷をかけているプロセスを監視したり強制終了したりする場合に使える。



【メモリ】

メモリが十分足りてるかどうか判断するためのコマンドです。

psコマンド

上記CPUのところで書いたように、プロセスごとに確保しているメモリ量を知ることができる。



topコマンド

Shift+Mキーで、メモリ使用量の多いプロセスから順に表示できる。



freeコマンド

物理メモリ、仮想メモリの使用状況を確認できる。



vmstatコマンド

memoryのavmは使用中の仮想メモリページ数の平均値、freは利用可能な残りのページ



【ディスク読み書き】

ディスクの読み書き速度がボトルネックになってないか調べる

iostatコマンド

[Linux]

この例では1秒間隔で3回表示させる指定になる。

vmstatと指定方法は似ている



[FreeBSD]

システム内の最初の4つのデバイスの統計情報を、1秒間隔で3回表示させる指定

デバイスを指定したやり方



【ネットワーク】

トラフィック(転送量)が増大するとネットワークはボトルネックになりやすい部分です。

pingコマンド

指定ホストまでのネットワークがつながってるか確認



tracerouteコマンド

指定ホストまでのネットワーク経路を調べる。経路上のボトルネックなども推測できる。



netstatコマンド

ネットワークインターフェイスごとの送受信を見ることができる。Ipktsが受信パケット数、Opktsが送信パケット数



tcpdumpコマンド

tcpdumpを使えばネットワークでやり取りしてるデータをモニタリングできる。つまり平文のデータなら簡単に見えてしまうので取り扱い注意。

特定のネットワークインターフェイスやプロトコルやホストに関して、送信のみや受信のみを指定した抽出もできるので、うまく使えば送受信トラブルの原因究明も可能。




▼ グラフ化

定期的にサーバ負荷をグラフ化して管理を楽にする方法が広く用いられています。
グラフ化することで人間が直感的に把握しやすくなります。

MRTGを使う

ネットワーク管理用のプロトコルSNMPを使って統計を採り、それをグラフ化する。

MRTGを使ってグラフ化できることはだいたい以下のとおり

▼ 時刻合わせ

サーバの時刻を常に日本標準時(JST)に合わせておきたいものです。

ネットワーク上には時刻合わせのために使ってもいいよと公開されているNTPサーバというものがあるので、そのサーバに問い合わせます。
「ntpサーバ 公開」で検索すればいくつもあります。

できるだけレスポンスが速くて安定稼動してそうなものを選ぶようにしたいものですね。

わたしはRing Server Projectのntp.ring.gr.jpサーバを使うことにします。
こちらの組織はプロジェクトに参加している学術機関や産業界といった、産学がよってたかってやってる感じが安定してそうです。ホスト名もなんだか強そうです。
ラウンドロビンDNSを使って組織の複数のサーバに飛ばしているようです。

時刻合わせにはntpdateコマンドを使います。
そして当然のことながらネットワークトラフィックが少ない時間帯を狙います。

一日一回時刻合わせを行えば十分でしょう。

ということでクーロンを使って簡単に行います。

エディタが起動します。

朝方4時32分に問い合わせに行く設定にしています。だいたいネットワークトラフィックは朝の3時30分ぐらいから減少のピークが始まる(私調べ)ので4時32分は絶妙です。

このntpdateコマンド、余りにも時刻がズレ過ぎていた場合は最初だけ手動で合わせるように要求してくるような記憶があるので、まず手動で試してそういうメッセージが出た場合にはBIOSの時刻合わせを行ったほうがいいです。



もし複数台のサーバを有してる管理者の場合には、一台を公開NTPサーバに問い合わせに行かせてそのサーバ自体をNTPサーバにすることで残りのサーバは自分で構築したNTPサーバへ問い合わせるようにすればいい感じですね。

■ 運用

準備は整った、いざ運用開始!


と、その前にホスト名やネットワーク設定を最終確認


■ ディスクの修復

▼ fsckコマンド

ファイルシステムの整合性をチェックするfsckというコマンドがあります。

fsckコマンドをかけるファイルシステムはマウントされてないか、読み出し専用モードでマウントされてるものに対して行う。
もし読み書きモードでマウントされたファイルシステムに対してfsckをかけると破壊の原因になる恐れがある。

ファイルシステムの内訳は/etc/fstab参照

ファイルシステムが指定されなければ/etc/fstabを参照してすべてを順にチェックしていく。



全ファイルシステムをチェックするならシングルユーザモードで起動させる

シングルユーザモード起動はコチラ

起動後シングルユーザモードに落とすには

シングルユーザモード起動直後は、ルート"/"だけが読み出し専用でマウントされた状態になっている。
つまり設定ファイルや基本コマンドのある「/etc」「/sbin」「/bin」あたりは読めるという状態(パーティションの切り分け方による)

もし正しくshutdown等が行われずに運用中に不完全な終了をしてしまった場合は-pオプションで実行させる。

もしこれがエラー終了すれば、そのファイルシステムに対してfsck -y /dev/fooをかけ直す。
-yオプションは、修復するかどうかの確認があった場合にすべてyesと答えるようにするもの。修復箇所が多い場合は何百回とか確認されるのでその度に答えるのは結構大変。



「クリーン」マークの付いたファイルシステムも検査を行いたい場合は-fオプションを付ける。



もしfsckによる修復が行われたら、そこでsyncするとトラックバッファ(ハードディスクドライブ内のバッファ)上のファイルシステムイメージと実際のディスク上のファイルシステムとの間に不整合があった場合に破壊される恐れがあるのでrebootする。

BSD系なら-nオプション付きの方が手堅い



特定のファイルシステムをチェックするならまずumountコマンドで落とす

問題なければmount /dev/foo、修復が行われたらreboot -n



▼ SUPERBLOCKが壊れたら

fsckかけても修復できない場合に"SUPERBLOCK"というフレーズがエラー内容に出ていたら、点在するSUPERBLOCK位置を取得して組み替えることで修復できることがある。

[FreeBSD]

表示されたスーパーブロック位置(より小さい値)を、fsck_ffsで指定してやる。



[Linux]

■ SSH接続の設定確認

SSH接続がうまくいかない場合はネットワーク設定ができてないか、サーバ側でsshdが起動してないとか接続拒否の設定になっている可能性が考えられます。

こういう時はサーバを直接操作して確認します。

サーバログイン後、psコマンドを打ち込みます。その前に、一般ユーザがpsコマンドで全部見れる設定になっていない可能性もあるのでsuコマンドで先にrootに成ります。

▼ sshdプロセスの存在を確認

これでsshdプロセスがなければ起動させる設定に、起動済みなら接続できない原因を更に絞ります。
接続を拒否したことがログに残されていれば接続許可設定にして、ログがなければネットワーク設定がまだ不十分ということになります。



▼ sshdの起動

今ははじめからsshがインストールされていないことはないので、起動させる設定をしてサーバを再起動させます。最初にsshdが起動する際に暗号鍵が作成されます。

Linuxでは/etc/rc.d/init.d/sshdの存在を確認し、起動させたいランレベルごとに直接リンクを張るか、chkconfigコマンドを実行します。

FreeBSDでは/etc/rc.confに以下の設定を追加します。



[/etc/rc.conf]

設定が完了すれば再起動させます。



▼ ssh接続ログの確認

TcpWrapperで拒否されてる場合は/etc/hosts.allowにログインを許可するIPアドレスを書き加えます。

[/etc/hosts.allow]

これは設定変更した後に再起動やHUPシグナルを送る必要はないので、ログインできるようになったかそのまま試すことができます。


■ ユーザ作成方法

サーバは複数人(マルチユーザ)で使うこともよくあります。

ユーザを作成できるのは管理者rootだけです。
つまりユーザ作成は責任重大な作業ということになります。

また、suコマンドでrootになれるのはwheelグループ所属のユーザのみです。



▼ adduser(useradd)コマンドでユーザ作成

試しに"foo"というユーザを作成してみます。

fooユーザを作成してみました。
この場合、ホームディレクトリや使用するシェルなどはデフォルトのものが設定されます。

デフォルト以外を指定したい場合adduserを単独で打ち込んで、



以後対話式なので、聞かれる度に指定していけば作成できます。(わからなければEnterキーでデフォルト指定)

オプション指定で作る方法もあります。



-dディレクトリ、-gグループ、-sシェルをそれぞれ指定しています。

vipwコマンドでユーザ作成する方法もあります。この場合は事前にホームディレクトリを作成し、所属グループが未登録なら追加してから実行します。
実行するとエディタが起動してpasswdファイルを編集する形になります。編集後はadduserコマンドと同様、passwdコマンドにてパスワード設定を行います。それに加えて、指定したホームディレクトリ以下に存在するファイルのユーザ:グループを正しく設定します。(chownコマンド)




▼ passwdコマンドでパスワード設定

つぎにfooユーザのパスワード設定です。

このパスワード設定は管理者にとって非常に大事な仕事になります。簡素な"abcd"やら"1234"などを設定してしまったらすぐに破られてしまいます。(チェックするCrackなどのソフトがある)

また、ユーザがパスワードを忘れた場合は管理者がこのpasswdコマンドで再設定してあげることになります。(管理者がパスワードを忘れたら

このpasswdコマンドはfooユーザ自身でも使用してパスワード変更できるものです。しかしセキュリティ上重要な部分なので管理者の立場としては、簡素なパスワードにならないようにチェックする必要があります。
理想的なパスワードは、英大小文字・数字・記号を混ぜた12文字以上みたいな感じです。

各ユーザがパスワード変更を希望する度に管理者がチェックして許可出すような二度手間は面倒なので、変更文字をチェックするPAMを設定しておくと便利です。


■ 管理者がパスワードを忘れたら

非常にカッコ悪い話ですが、これが有り得ます。でもやり方があるので安心です。

一言で言えば、シングルユーザモード(rootだけのモード)で起動させればいいということになります。

▼ FreeBSDのシングルユーザモード

起動させた後、カウントダウン中にEnter以外のキーを押す。(最近の起動画面だとSingle User mode 4番? とかを選択)

"ok?"というプロンプトが現れるのでそこに"boot -s"を入力してEnterキー

次に、使用するシェルを聞いてくるのでそのままEnterキーを押せばシングルユーザモードです。

とりあえずパスワード再設定(/etc/passwdを書き換える)できるように先にマウントしておく。

パスワードを新しく設定したらexitでシングルユーザモードを抜ける

FreeBSDではシングルユーザモード起動時にルート"/"パーティションのみが読み出し専用でマウントされている状態なので、パーティションの分け方にもよりますが "/sbin" "/bin" にあるコマンドが使える程度です。
/etc/passwd(/etc/master.passwd)の書き換えができるようにする必要があることと、/usrパーティションにあるpasswdコマンド(/usr/bin/passwd)を使えるようにするためにも先にマウント(/sbin/mount)しておく必要がある。



▼ Linuxのシングルユーザモード

LILOの場合は、"boot"というプロンプトが現れたらそこに"linux single"を打ち込んでEnterキーを押す。

Linuxではそのままpasswdコマンドで設定変更できる場合が多い。


■ 手動インストール

ZIPファイルなどの圧縮形式のソースファイルを落としてきて、自分の環境にインストールするやり方があります。

まず大事なのは、そのソース(&バージョン)が自分の環境(OS&バージョン)にインストールできるものなのかどうか確認しておくべきです。

次は圧縮ファイルの展開です。

▼ *.tar.gzや*.tgzの場合

▼ *.tar.bz2や*.tbzの場合

▼ *.tar.Zや*.Zの場合

展開が終わるとそこに出来たディレクトリに入り、"README"や"INSTALL"などがあれば読みます。

だいたいの流れとしては「configure」で環境に合ったMakefileを作成し、「make」でソースをコンパイルし、「make install」で使える場所にコピーします。が、多少違う場合もあります。


■ ユーザ名とパスワードがある意味

ユーザ名が"foo"でパスワードが"bar"のアカウントがあったとします。
これがもしパスワードだけだと当てるのはそう難しくありません。

"a","b",..."z"まで行って、次に"aa","ab"..."zz"のように総当たりしていけば、そう時間を要しないで破ることができそうです。

ではこれに加えてユーザ名も一致しないと破ることができないとなると、先ほどの数十万倍もの時間を要することになりそうで一気にハードルが上がります。

わずか3桁のユーザ名とパスワードでも破るのにかなりの時間がかかりそうですからこれが8桁・12桁となった時にはもう気の遠くなるような時間を要しそうです。

ところが、もしユーザ名がはっきり知られてる場合は例えパスワードが12桁でも一気にハードルが下がります。ユーザ名は固定でパスワードだけ総当たりすればいいということになりますからね。

だからパスワードはもちろんのこと、ユーザ名もできるだけ知られない方がセキュリティの面からは重要なことだと言えます。

つまりユーザ名は推測されやすい名前を付けるよりも、なんの意味があるのかわからないような名前を付けたほうがいいということになります。

ちなみに固定で決まっているrootでのネットワーク経由ログイン(telnet, ssh, ftpなど)は、普通はできないようになっているはずです。


■ ネットワークの設定

まず基本は、一枚のネットワークカード(NIC)に対して一つのIPアドレスを割り振ることになるという認識でいいと思います。

つまり1台のマシンに刺さってるネットワークカードは一枚かも知れないし、複数枚刺さってるかも知れないので、どのネットワークカードにどのIPアドレスを割り振るか指定するためにもまずはネットワークカードの識別が必要です。



▼ ネットワークカードの識別

ifconfigコマンドを-aオプション付きで打ち込んですべてのネットワークデバイスを表示させてみます。

"fxp0"という部分がデバイス名になります。Linuxの場合は複数枚あれば"eth0" "eth1"と順に続いていきますが、FreeBSDの場合は"de0" "fxp0" "pn0"のようにメーカーごとのデバイス名に0番から割り振られる形となります。

"lo0"はすべてのホストが自分自身を表すために持つローカルループバックと呼ばれる仮想デバイスで、おなじみのローカルIPアドレス127.0.0.1とホスト名localhostが割り振られてる場合が多い。



▼ ネットワーク設定

具体的な設定値を例に書いていきます。

項目設定値
ゲートウェイ192.168.0.1
DNSサーバ/IPアドレスns.example.com/192.168.0.2
自サーバ名/IPアドレスmyhost.example.com/192.168.0.3
※説明のためにローカルなIPアドレスを使っています。

ネットマスク、ネットワークアドレス、ブロードキャストアドレス等がわからない場合はコチラ


[/etc/hosts]

[/etc/resolv.conf]

domain行とsearch行は共存不可なのでどちらか一方を書く。通常searchには6ドメインまで書ける。

nameserver行はDNSが複数あれば複数行書く



自サーバ内でDNSサーバも起動させてるなら

[/etc/hosts]

[/etc/resolv.conf]

これ以外にhostsとDNSの優先順位を設定する/etc/host.confや/etc/nsswitch.confなどもある。(あまり触ることはない)



その他はディストリビューションによって設定方法が分かれる。

【FreeBSDの設定】

[/etc/rc.conf]

FreeBSDの場合はhostnameコマンドでホスト名を変更しても結局rc.confに書き込んでいないと再起動したら元に戻ることになる。

ifconfig_fxp0の部分でデバイスを指定してそれにIPアドレスを割り振ることをしている。



【Linuxの設定(Red Hat系)】

[/etc/sysconfig/network]

これはネットワーク全体の設定



[/etc/sysconfig/network-scripts/ifcfg-eth0]

これはネットワークデバイスごとの設定



設定変更を反映させる(できればマシンを再起動させた方がよい)



【Linuxの設定(Debian系)】

[/etc/network/interfaces]

設定変更を反映させる(できればマシンを再起動させた方がよい)



▼ 設定が終わればサーバを再起動

再起動の方法


■ サーバの再起動

▼ reboot

メモリ上にバッファされているすべてのデータをディスクに書き込むよう、まずsyncを3回ぐらいブチかます。

この時祈るようにsyncするのがミソ



▼ shutdown

これは内部でsyncしているのでsyncを連打する必要がない。



▼ Ctrl+Alt+Delキー同時押し

Ctrl+Alt+Del(ホットキー)を使って再起動させる方法もある。
リセットボタン押すよりも安全だが、効かない設定になってることもある。



▼ リセットボタン

禁断の最終手段。アクセスランプが点滅しなくなった頃合を見計らって押す。
この時「ジーザス!」と叫ぶかどうかは任意


2010(C)Mingw