apache2

=注意=
apacheのコンパイルにはgrepの更新が必要です。
以下のコマンドで"Bad egrep"と表示される場合はエラーが発生します。
  $ if echo GNU | egrep '(GNU|BFD)' >/dev/null; then echo "Good egrep"; else echo "Bad egrep"; fi

ホームページを公開するにも、WEBメールシステムを作るにも必要なものが、http鯖(www鯖?)です。

ここでは、めちゃくちゃメジャーなapacheのバージョン2.0系をインストールします。
「新しいのはいいことだ」ということで。
「新しいのはいいことだ」
正確に言うと、新しいというより更新があるということ。
なぜ、更新されているのがいいのか?
バグが出る悪いソフトじゃないのか?と思う人も居ると思う。
まぁ、バグ修正もあるけど、更新されるってことはサポートがあるってことじゃん?
不測の事態にもすぐオリジナルの作者が対応してくれるってことだと思う。
だから、新しいのはいいことだ。

やること一覧
	・apache2のユーザー作成thttpdのアクセスポート変更APR関係のインストールapache2のインストールApache HTTPサーバのインストール
		コンパイルとインストール - Apache HTTP サーバ
		Linux Tips「ソ−スコンパイルのApacheも/etc/rc.d/init.d/下のスクリプトで制御させたい」ユーザーディレクトリを有効にするバーチャルホストを有効にする設定変更時の注意点ログの設定(最低限やっておきたいこと)Apache - JAVAに関する備忘録 HIDEKAZU PukiWiki
		Regular Expression(Riue ちゃんの正規表現講座) - Index
		Stray Penguin - Linux Memo (logrotate)

関連ページ
	・grepとcoreutils



apache2のユーザー作成

まずはapache2を動かすユーザーを作る。
apacheはデフォルトで「のーぼでぃ」とかいう
居るんだか居ないんだかわからないユーザーで動くようになっている。
まぁ、それはそれでいいと思うけど、(sambaもこの「のーぼでぃ」で動いているし・・・)
なんか変更できるみたいだから、管理しやすい(覚えやすい)ようにしておく。

でも、ありきたりにapacheとかhttpとかwwwとかは嫌だから今回は
ユーザー名:apache2
グループ名:httpd
で行こうと思う。

	# groupadd -g 23 httpd
	# useradd -g httpd -u 23 -d /var/empty -s /bin/false apache2
		注:このシェルだとログオン自体ができない(すべてのリクエストに失敗を返す)
		注:まぁ、それ以前に正規のシェルじゃない(無効なシェルだ)し・・・
		注:ついでにディレクトリもempty(空)に指定してある
ユーザーをロックする
	# vipw
	または
	# vi /etc/passwd
		変更点:! を * に書き換える
「のーぼでぃ」
nobodyという「誰でもない」というユーザー(多分)
まぁ、ユーザー管理するLinuxみたいなOSにはたいてい入ってるユーザー。
だから、ソフト製作者はこれをデフォルトにしていることが多い。
どこかのサイトがいうには、
「何でもかんでもnobodyで動かしていると、もしnobodyをのっとられた時とんでもないことになる」
とのこと。
でも、そもそもnobodyはログオンできないようになっているはずなのだけど・・・ね?

まぁ、皆さんが思っている通り、玄箱の場合はrootの奪取のほうが簡単なので・・・(をひ
やる気がある人はrootのパスワードは初期状態から速攻で変更しましょう(一般ユーザーと違うものにね)

thttpdのアクセスポート変更

玄箱のWEBツールもhttp鯖で動いている(当たり前か
で、このhttp鯖はhttpの標準ポート(80)を使って動いている(これも当たり前か
でも、このままだとapacheはポート80を使えないので、公開用のアドレスが
http://www.hoge.com:8080/
といった感じになってしまう。
カッコ悪い・・・

まぁ、回避方法は以下の通り。

  1. 我慢してポート番号を指定してアクセスするようにしてもらう
  2. ルータにポートも変換する機能があればWAN側80番ポートのアクセスを玄箱の8080番ポートに転送する
  3. thttpが別のポート使えばいいじゃん

まぁ、うちでは1.2.3.全部使えるんですけど・・・
1.不特定多数の人に:8080の入力を強要するのはどうだろう?
2.ルータに目的の機能が無ければ使えない(力技だね)
という理由により、3.を行うことにする。
若干、WEBツールの使い勝手は悪くなるけど、これは仕方ない。

標準のWEB鯖(thttpd)のアクセスポート変更
	# vi /etc/thttpd.conf
		(変更)
		┃port=8080
			変更点:80を8080に
thttpdの再起動
	# /etc/init.d/thttpd restart
		注:以降、玄箱の設定(WEBツール)は http://kuro-box:8080/ となる
「http://www.hoge.com:8080/」
普段サイトにアクセスする時、特にポートの存在を気にしない・・・
っていうか、指定しないで使ってますよね?
上記のアドレスの意味は
httpプロトコルを使ってhoge.comというアドレスのwwwという鯖(ホスト)に8080番のポートを使ってアクセスする。
ということなんです。
でも、普段は「:80」とかポート番号なんて指定しませんね?
それは「httpプロトコルを使う=80番ポートを使ってアクセスする」という暗黙の了解があるからなんです。
だから、ポート番号まで指定すると
http://www.hoge.com:80/
となるはず・・・
面倒臭いから、:80は省略しちゃいますけどね。

APR関係のインストール

APR(Apache Portable Runtime)なる物をインストールする必要がある(かも?)
エラーで止まる人はAPRをインストールする。

	$ wget http://ftp.kddilabs.jp/infosystems/apache//apr/apr-1.5.2.tar.gz
	$ tar xvfz apr-1.5.2.tar.gz
	$ cd apr-1.5.2
	$ ./configure --prefix=/usr
	$ make
	$ make check
	# make install
インストールされるもの: install files list(default): use command is: ls -pR /usr/local >~/bin.txt
注:prefixを変更すると「APR」ディレクトリが生成されなくなる謎仕様。
	[prefix]/bin:
		apr-1-config

	[prefix]/build-1:
		apr_rules.mk libtool make_exports.awk make_var_export.awk mkdir.sh

	[prefix]/include/apr-1:
		apr.h apr_*.h

	[prefix]/lib:
		apr.exp libapr-1.a libapr-1.la libapr-1.so*

	[prefix]/lib/pkgconfig:
		apr-1.pc


APR-Utilもインストールする。
	$ wget http://ftp.kddilabs.jp/infosystems/apache//apr/apr-util-1.5.4.tar.gz
	$ tar xvfz apr-util-1.5.4.tar.gz
	$ cd apr-util-1.5.4
	$ ./configure --prefix=/usr --with-apr=/usr
	$ make
	$ make check
	# make install
インストールされるもの: install files list(default): use command is: ls -pR /usr/local >~/bin.txt
注:prefixを変更すると「APR」ディレクトリが生成されなくなる謎仕様。
	[prefix]/bin:
		apu-1-config

	[prefix]/include/apr-1:
		apr_*.h apu.h apu_*.h expat.h

	[prefix]/lib:
		aprutil.exp
		libaprutil-1.a libaprutil-1.la libaprutil-1.so*
		libexpat.a libexpat.la libexpat.so*

	[prefix]/lib/pkgconfig:
		apr-util-1.pc


pcreもインストールする。
なんじゃこりゃ?Perlのライブラリかも?とかあるけど・・・よう分らん。
要:zlib(openssl参照)
	$ wget http://downloads.sourceforge.net/project/pcre/pcre/8.34/pcre-8.34.tar.gz
	$ tar xvfz pcre-8.34.tar.gz
	$ cd pcre-8.34
	$ ./configure --prefix=/usr
	$ make
	$ make check
	# make install
インストールされるもの: install files list(default): use command is: ls -pR /usr/local >~/bin.txt
	[prefix]/bin:
		pcre-config pcregrep pcretest

	[prefix]/include:
		pcre.h pcre_scanner.h pcre_stringpiece.h pcrecpp.h pcrecpparg.h pcreposix.h

	[prefix]/lib:
		libpcre.a libpcre.la libpcre.so*
		libpcrecpp.a libpcrecpp.la libpcrecpp.so*
		libpcreposix.a libpcreposix.la libpcreposix.so*

	[prefix]/lib/pkgconfig:
		libpcre.pc libpcrecpp.pc libpcreposix.pc

	[prefix]/share/doc/pcre/*

	[prefix]/share/doc/pcre/html/*

	[prefix]/share/man/man1:
		pcre-config.1 pcregrep.1 pcretest.1

	[prefix]/share/man/man3:
		pcre*.3 pcre16*.3 pcre32*.3 pcre_*.3
APR/APR-util
あっれ〜?
前までは必要なかったんだけどな〜?
なんで、必要になったのかな〜??

apacheさんがインストールしないとダメだよ?って言ってくる。
昔はソースツリーに含まれてたみたいだけど、今は入ってない???

apache2のインストール

httpd-2.2.31.tar.gzを探してくる。
Welcome! - The Apache HTTP Server Project
で、ユーザーのホームディレクトリにFFFTPで送る。
例のあれ

	$ tar xvfz httpd-2.2.31.tar.gz
	$ cd httpd-2.2.31
	$ ./configure --prefix=/opt/apache2 --enable-suexec \
	--with-suexec-caller=apache2 --with-suexec-docroot=/home
	または(2.2.15以降)
	$ ./configure --prefix=/opt/apache2 --enable-suexec --enable-reqtimeout \
	--with-suexec-caller=apache2 --with-suexec-docroot=/home
	または(proxy機能を追加)
	$ ./configure --prefix=/opt/apache2 --enable-suexec --enable-reqtimeout \
	--with-suexec-caller=apache2 --with-suexec-docroot=/home \
	--enable-proxy --enable-proxy-http  --enable-proxy-ftp --enable-proxy-connect \
	--enable-file-cache --enable-cache --enable-disk-cache --enable-mem-cache
		

option説明など
--with-mpm=apacheの動作タイプを変更する
prefork(デフォルト)/worker/perchildが使用可能
phpを利用する場合にはpreforkが推奨されている
--enable-suexecsuexecを有効にする
--enable-reqtimeoutmod_reqtimeoutを有効にする
--with-suexec-caller=suexecの初期実行ユーザーの指定
--with-suexec-docroot=suexecの実行ディレクトリの指定
--enable-proxy*
--enable-*cache
proxy関係の機能を追加する
\改行しても実行に移らないようにする呪文
本来はバックスラッシュ(キーボードの右下にある/の右隣のキー)
日本語環境では\になる

$ make # make install 注:バージョンアップ(例:2.0.x=>2.2.xに変更)の時はPHPの再コンパイルが必要。
おまじない
	# strip -p /opt/apache2/bin/*
	# strip -p /opt/apache2/lib/*
suexecの設定の確認
	# /opt/apache2/bin/suexec -V
		┃ -D AP_DOC_ROOT="/home"
		┃ -D AP_GID_MIN=100
		┃ -D AP_HTTPD_USER="apache2"
		┃ -D AP_LOG_EXEC="/opt/apache2/logs/suexec_log"
		┃ -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
		┃ -D AP_UID_MIN=100
		┃ -D AP_USERDIR_SUFFIX="public_html"
			注:デフォルトではユーザーID、グループIDともに100未満のユーザーでは
			  実行できないようになっています。なので、rootだとエラーが出ます。
設定変更
	# vi /opt/apache2/conf/httpd.conf
		(最低限の変更)
		┃User apache2
		┃Group  httpd
		┃
		┃ServerName 玄箱のIP:80
		┃ServerName 取得ドメイン名:80
			注:ServerNameにはDDNS名も登録しておく(複数表記可能)
テスト1
	# /opt/apache2/bin/apachectl start
		玄箱( http://kuro-box/ )にアクセスして「予想に反して」ページが出るか確認
	# /opt/apache2/bin/apachectl stop
自動起動の設定
	# cp /opt/apache2/bin/apachectl /etc/init.d/httpd
	# chmod 755 /etc/init.d/httpd
	# ln -s /etc/init.d/httpd /etc/rc.d/rc2.d/S25httpd
	# ln -s /etc/init.d/httpd /etc/rc.d/rc0.d/K25httpd
	# ln -s /etc/init.d/httpd /etc/rc.d/rc6.d/K25httpd
テスト2(起動|再起動|停止)
	# /etc/init.d/httpd start
	# /etc/init.d/httpd restart
	# /etc/init.d/httpd stop
成功なら再起動
	# shutdown -r now
で、確認
	$ ps ax
「デフォルトでコンパイル・ロードされるモジュール」
apache関係のサイトでてんこ盛りのオプションをつけてconfigureしているサイトを良く見かけます。
でも、あれってapache1.x系のころの情報を引きずっているだけみたいです(あとは明示的に指定しないと落ち着かない人とか)
実際、何も指定しない状態( ./configure --prefix=/opt/apache2 のみ)で2.0.54をコンパイルした時、
$ /opt/apache2/bin/httpd -l
	┃Compiled in modules:
	┃  core.c		Apache のコア
	┃  mod_access.c	クライアントのホスト名や IP アドレスによってアクセス制御を行なう
	┃  mod_auth.c	テキストファイル形式の認証ファイルを使用した ユーザ認証機能を提供する
	┃  mod_include.c	サーバがパースする html ドキュメント
	┃  mod_log_config.c	サーバへのリクエストのロギング
	┃  mod_env.c	CGI スクリプト及び SSI ページに渡される環境変数を変更する機能を提供する
	┃  mod_setenvif.c	リクエストの特徴に基づいた環境変数の設定を可能にする
	┃  prefork.c	スレッドを使わず、先行して fork を行なうウェブサーバを実装
	┃  http_core.c
	┃  mod_mime.c	リクエストされたファイルの拡張子とファイルの振る舞い (ハンドラとフィルタ)、
			内容 (MIME タイプ、言語、文字セット、エンコーディング) とを関連付ける
	┃  mod_status.c	サーバの活動状況と性能に関する情報を提供する
	┃  mod_autoindex.c	Unix の ls コマンドや Win32 の dir シェルコマンドに似た ディレクトリインデックスを生成する
	┃  mod_asis.c	自分用の HTTP ヘッダの書かれているファイルを送信する
	┃  mod_cgi.c	CGI スクリプトの実行
	┃  mod_negotiation.c	コンテントネゴシエーション 機能を提供する
	┃  mod_dir.c	「最後のスラッシュ」のリダイレクトと、ディレクトリのインデックスファイルを扱う機能を提供する
	┃  mod_imap.c	Server-side imagemap processing
	┃  mod_actions.c	メディアタイプやリクエストメソッドに応じて CGI スクリプトを実行する機能を提供
	┃  mod_userdir.c	ユーザ専用のディレクトリを提供
	┃  mod_alias.c	ホストファイルシステム上のいろいろな違う場所を ドキュメントツリーにマップする機能と、 
			URL のリダイレクトを行なう機能を提供する
	┃  mod_so.c		起動時や再起動時に実行コードとモジュールをサーバにロードする
				内臓マニュアル http://kuro-box/manual/mod/ より解説抜粋(上記説明部分)
と、これだけのモジュールが読み込まれます。
ほとんどのサイトで指定される --enable-so (作られるモジュールはmod_so.c)も何も指定せずにコンパイルされてますね。
みんな、無駄が多すぎるよ(;´Д`)

ユーザーディレクトリを有効にする

アドレス表記例:http://kuro-box/~ruche/

ユーザーのディレクトリからサイトを公開する方法
問題点は

まぁ、あるものは使えるようにしておくって事で。

WEBテスト用ユーザーを作る
	# useradd -g users -d /home/ruche -s /bin/bash ruche
	# mkdir /home/ruche
	# passwd ruche
	# chown ruche /home/ruche
設定ファイルの煮詰め
	httpd.confを書き直して、
	/opt/apache2/bin/httpd -t で確認。
		を繰り返す。納得できる設定になるまで。
ユーザーディレクトリ使用のための変更部分(参考程度)
	# vi /opt/apache2/conf/httpd.conf
		(変更)
		┃    Options FollowSymLinks Includes ExecCGI MultiViews
		(中略)
		┃<Directory /home/*/public_html>
		┃    AllowOverride FileInfo AuthConfig Limit Indexes
		┃    Options MultiViews SymLinksIfOwnerMatch IncludesNoExec
		┃#     <Limit GET POST OPTIONS PROPFIND>
		┃#         Order allow,deny
		┃#         Allow from all
		┃#     </Limit>
		┃    <LimitExcept GET POST OPTIONS PROPFIND>
		┃        Order deny,allow
		┃        Deny from all
		┃    </LimitExcept>
		┃</Directory>
		┃
		┃<Directory /home/*/public_html/cgi-bin/>
		┃Options ExecCGI
		┃# SetHandler cgi-script
		┃</Directory>
			他に、管理者のメールアドレスなど
			注:直す場所と結果は上記の通りですが、どこをどう直したか忘れました(をひ
他にやったこと
	rucheのディレクトリに public_html を作って「トロピカルフルーツ@避難所」をアップ(を
	cgiの改行コードがCR+LF(Win標準)なのでLFに変更
	cgiのperlへのパスが間違ってるので修正(1行目:#!/usr/bin/perl)
「public_html」
ユーザーディレクトリのルート(一番上)を公開するとそれより下はすべて公開されます。
それは危険(いや?)なので、public_htmlというWEB公開用のディレクトリを作って、そこにhtmlを放り込みます。
もし、ルートを公開してmaildir形式を採用、アクセス権を間違えるとメールが全部丸見え・・・ガクガク(((;゚Д゚)))ブルブル

「納得できる設定」
どういう設定をするかは、利便性と安全性を天秤にかけて決めます。
管理者の気持ち一つなので詳細な設定は出せませんが、サイト巡りをして自分にあった設定を見つけ出しましょう。
私の場合は、
基本的にデフォルト
隠しファイルとか置くからディレクトリのインデックス化は無効
ユーザーディレクトリではcgi-bin以下でのみCGIを使えるようにする(テスト用)
servers以下ではsuexecでCGIを実行する
といった感じ(気まぐれで変わるかも)

「suexecを使うときの注意点」
ディレクトリのguestのアクセス権にwをつけるとエラーを吐いて止まります。
だって、guestがアクセスしてもuser権限で動作させることを目的としてるんですもの。矛盾するからね。

バーチャルホストを有効にする

アドレス表記例:http://fuga.hoge.com/

アドレスが判りやすいので、多分、こっちがメインになっていくと思われ。

httpd.confの修正

	# vi /opt/apache2/conf/httpd.conf
		(変更)
		┃# ScriptAlias /cgi-bin/ "/opt/apache2/cgi-bin/"
			ScriptAliasをコメントアウト(404notFound防止)
		┃# ### Section 3: Virtual Hosts
			以下、全部コメントアウト
http.confの最後にvhost.confを読み込むように指定する
	# vi /opt/apache2/conf/httpd.conf
		(追加)
		┃# </VirtualHost>
		┃Include conf/vhost.conf
vhost.confの作成(最低限の設定?)
	# vi /opt/apache2/conf/vhost.conf
		(新規)
		┃NameVirtualHost *:80
		┃
		┃<VirtualHost *:80>
		┃    ServerAdmin [your@mail]
		┃    DocumentRoot /home/www/default
		┃    ServerName fuga.hoge.com
		┃    UserDir disable    SuexecUserGroup ruche users
		┃    <Directory "/home/www/default">
		┃      Options FollowSymLinks Includes
		┃      AllowOverride None
		┃      Order allow,deny
		┃      Allow from all
		┃    </Directory>
		┃    <Directory "/home/www/default/cgi-bin">      Options ExecCGI      AllowOverride None      Order allow,deny      Allow from all    </Directory>    ErrorLog logs/default-error_log    CustomLog logs/default_log combined env=!nolog
		┃</VirtualHost>
			注:ServerAdminは省略可能(省略時はhttpd.confのメールアドレスを使用)
			注:CGIを使わないなら赤文字の部分を削除する。
			注:ログをaccessから分離する必要が無いなら青文字の部分を削除する。
			注:combined env=!nolog は後で使うからここでは説明は省く。
/home/www/defaultを作成
	$ mkdir [-p] /home/www/default
		注:適宜、chmodやchownを実行すること
htmlを/home/www/defaultにUPする

複数のバーチャルホストを立てたい場合は、
<VirtualHost *:80>〜</VirtualHost>を立てたいバーチャルホスト分だけ作成する。
一番最初のバーチャルホストがデフォルトホストになり、間違ったホスト名が入力されたとき表示される。
デフォルトホスト
一番ロボット検索に探されるホスト。言い換えれば、一番攻撃を受けるホスト。
私の場合、デフォルトホストにはhtmlとcssの簡単なページをつくり、CGIを無効にしている。
とにかくウイルスからCGIの狙い撃ちなど、いろんな中の人がやってくる場所になります。
アドレス(ホスト部分)の記述ミスでも表示される場所だから、誘導するリンクを作っておくのも手。
まぁ、検索の誘導にもなると思うけど・・・

あぁ、間違っても/home/wwwや/homeにデフォルトホストとかを作らないこと。
自分用の隠しページも開かれてしまう可能性があるので(指定したディレクトリ以下が見れるようになるから)

--設定変更時の注意点--

設定変更をしたら構文チェックをしてapacheを再起動する

	# /opt/apache2/bin/httpd -t
	# /etc/init.d/httpd restart
バーチャルホストの確認方法
	1.WAN側のproxyサーバーを経由する
	2.おやじ氏のチェッカーを利用する
	3.Winのhostsファイルを編集してしまう(あまりお勧めしません)
		注:プロバイダがproxyサーバーを提供してるならそっちを使ったほうが楽
ルータのポートを開くのを忘れないように


ログの設定(最低限やっておきたいこと)

問題発生時にはログを確認して状況を把握するのが基本となるわけだけど・・・

デフォルトのまま運用してしまうと
ウィルスにアクセスされて不必要なログができたり、
画像のアクセスログとかいろいろなログがいっぱい録られたり、
ログが肥大化したりして、
不必要なログに必要なログが埋もれて見づらくなってしまう。

だから、最低限やっておきたいことを記載しておく。

事前処置

	# vi /opt/apache2/conf/httpd.conf
		(変更)
		┃#CustomLog logs/access_log common
ウィルスログの分離
不要なログの破棄
	# vi /opt/apache2/conf/vhost.conf
		(追加)
		┃##logging settings
		┃
		┃#CSS,gif,png,jpg,js logging off
		┃SetEnvIf Request_URI "\.(gif)|(jpe?g)|(png)|(css)|(js)$" nolog
		┃#BGM files(midi,mp3) logging off
		┃SetEnvIf Request_URI "\.(midi?)|(mp3)$" nolog
		┃#local ip logging off
		┃SetEnvIf Remote_Addr 192.168. nolog
		┃#worm log is other log-file
		┃SetEnvIf Request_URI "^/_mem_bin/" worm nolog
		┃SetEnvIf Request_URI "^/_vti_bin/" worm nolog
		┃SetEnvIf Request_URI "^/c/" worm nolog
		┃SetEnvIf Request_URI "^/d/" worm nolog
		┃SetEnvIf Request_URI "^/msadc/" worm nolog
		┃SetEnvIf Request_URI "^/MSADC/" worm nolog
		┃SetEnvIf Request_URI "^/scripts/" worm nolog
		┃SetEnvIf Request_URI "^/default\.ida" worm nolog
		┃SetEnvIf Request_URI "root\.exe" worm nolog
		┃SetEnvIf Request_URI "cmd\.exe" worm nolog
		┃SetEnvIf Request_URI "NULL\.printer" worm nolog
		┃SetEnvIf Request_URI "NULL\.IDA" worm nolog
		┃
		┃CustomLog logs/access_log combined env=!nolog
		┃CustomLog logs/worm_log combined env=worm
			注:別にhttpd.confに書いてもかまわない
			  管理しやすいからvhost.confに書いているだけ
上記設定でもれるウィルスログの処理
W32.HLLW.Gaobot.gen対策
ウィルスの情報:W32.HLLW.Gaobot.gen
ログの例
	$ cat /opt/apache2/logs/access_log | grep SEARCH
		┃... "SEARCH /\x90\x02\xb1\x02\xb1 ...
	$ cat /opt/apache2/logs/error_log | grep "URI too long"
		┃... request failed: URI too long (longer than 8190)
処置方法
	# vi /opt/apache2/conf/httpd.conf
		(変更)
		┃LogFormat "%h %l %u %t \"%!414r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
ログの肥大化防止
	# vi /etc/logrotate.d/httpd
		...ってviで書くよりも、Winで書いてFFFTPでアップしたほうが楽(を
			設定はログローテートを参照。
過去ログ保存用ディレクトリ(olddirの指定先)の作成
	# mkdir /opt/apache2/logs/old
長かった・・・orz
「問題発生時にはログを確認して状況を把握」
クラッカーに関してはよくわからないけど、ソフトウェアの問題についてはよくわかります。
ほとんどはログを根気よく読んで、サイト検索を地味に続ければ解決します。
ただ使うだけのWinに慣れちゃうとログって意味あるの?と思ってしまいがちですが・・・

「問題点の特定」
これって、本当に地味な作業だからもう二度とやりたくないものばかりですね。
だから、このサイト作ってるんだけど・・・(;´Д`)


戻るなら押せ!