LPICレベル2 技術解説無料セミナー



開催日程:2014年2月23日（日）　13:30-16:30
主催:LPI-JAPAN

新出題範囲になったLPICレベル2（Ver4.0）受験に向け、実機を使ったデモを交えながら重要なポイントや技術的にわかりにくい点に焦点を当てて解説します。

---


### LPICレベル2の概要

* 小規模から中規模のネットワークシステムを管理できること
* Linux・UNIX・Windowsが混在する小規模なネットワークの設計・運用・補修ができ、安定かつ安全な稼働を維持し、トラブルシューティングができること
* アシスタントを管理できること
* 自動化および購入に関して管理者に助言ができること
* 2014年1月1日よりVer4の新試験範囲が提供されている

## レベル2試験の概要

* 201試験のポイント
  * サーバのスケーリング、メンテナンス、そしてトラブルシューティングに焦点を当てている
* 202試験のポイント
  * 主要なネットワークサービスの他に、システムとネットワークのセキュリティにも焦点を当てている
* レベル1の試験範囲もかなり出題されている
  * 復習が必要
  * レベル1より深い内容が問われる
  
トラブルシューティングは章がなくなったが、他の出題範囲（起動の仕組みなど）に含まれるようになり、出題もされている。  

## 主題200 キャパシティプランニング

* 200.1 リソースの使用率の測定とトラブルシューティング 6(重要度:非常に高い)
* 200.2 将来のリソース需要を予測する 2
  * collectdを使用してITインフラの使用を監視する
  * Negios、MRTG、Cactiといった監視ツールを知っている
  
「知っている」レベルなので知識レベルでOK。実際の使い方までは突っ込まれないのではないか。。。 

### vmstatコマンドの見方

vmstatコマンドでどこに負荷がかかっているのか出力結果からわかればよい

|項目|意味|
|---|---|
|r |実行待ちプロセス数
| b|割り込み不可能なプロセス数
|swpd|スワップサイズ
|free|空きメモリ
|buff|バッファメモリ
|cache|キャッシュメモリ
|si|スワップイン
|so|スワップアウト
|bi|受け取ったブロック
|bo|送られたブロック
|in|1秒あたりの割り込み
|cs|1秒あたりのコンテキストスイッチ
|us|ユーザー時間
|sy|システム時間
|id|アイドル時間
|wa|入力待ち時間
|st|ゲストOSがCPUが割り当ててもらえなかった時間

### リソース利用率の把握

コマンドでどのような情報が読み取れるのかを覚えておく

|コマンド|機能|
|---|---| 
| top |システムリソースの使用状況やプロセスの実行状態
| iostat |CPUの利用状況とディスクの入出力
| sar | ディスク関連、ネットワーク関連、メモリとスワップ関連の情報<br>sysstatパッケージに含まれる
| free | メモリの使用率

## 主題201:Linuxカーネル

* 201.1 カーネルの構成要素　2
* 201.2 Linuxカーネルのコンパイル 3
* 201.3 カーネル実行時における管理とトラブルシューティング 4

### Active Kernel releases

* カーネルの情報およびソースダウンロード先
  * http://www.kernel.org
* カーネルのバージョン

|バージョン名|意味|
|---|---|
|Prepatch|メインラインカーネルプレスリリース版
|Mainline|メインラインツリー。全ての新機能が導入される
|Stable|メインラインカーネルが開放された後、それを「安定」とする
|Longterm|「長期保守」のカーネルリリース。重要なバグが修正される

### カーネルの再構築

* gccが必要
* ディストリビューションによって置き場所は異なる。
* 以前のカーネルのセッティングを引き継ぐ場合は`cp /boot/config-2.8.**** ./.config`後に`make menuconfig`などする
* あとはコンパイルしてインストール

```bash
$make bzimage
$make modules_install
$make install
```

### カーネルパラメータ

例えばルータとして利用したい場合。

* カーネルパラメータの調整→カーネルの動作をチューニング
  * パケットの転送を有効にする(ルータ機能)
  * `echo 1 > /proc/sys/net/ipv4/ip_forward`
* sysctlコマンド
  * `sysctl -w net.ipv4.ip_forward=1`
* 設定方法
  * 再起動後も有効にするためには`/etc/sysctl.conf`に記述する
  * `net.ipv4.ip_forward=1`
  
  
## 主題202:システムの再起動
/etc/initなどはレベル2でも出るのでレベル1の復習をしておくこと

* 202.1 Sys V-initシステムの起動をカスタマイズする 3
* 202.2 システムのリカバリ 4
* 202.3 その他のブートローダ
  * SYSLINUX、ISOLINUX、PXELINUX
  
###   起動スクリプト

ランレベルごとに/etc/rc[0-6].d/以下の起動スクリプトが存在する
実際のスクリプトは/etc/init.d/にあるスクリプトのシンボリックリンクである。
S85httpdなどというようなファイル名になっているが以下の意味がある。

* S ランレベルのときサービスがスタート
* K ランレベルの時サービスが終了
* 数字 小さい数字から順に実行される。

### サービスの制御

chkconfigコマンドで自動的にスクリプトを作成する

* 現状のサービスを制御
  * /etc/init.d/
  * /etc/init.d/httpd start
* 次回起動時のサービスを制御(CentOS)
  * `chkconfig httpd on` #Linux起動時に起動
  * `chkconfig --list httpd` #起動確認
  
デフォルトでは通常[2-5]になる。
ディストリビューションによって起動方法は異なるの注意

## 主題203

* 203.1 Linuxファイルシステムを操作する 4
* 203.2 Linuxファイルシステムの保守 3
  * SMARTデバイスの監視
  * Btrfsを知っている
* 203.3 ファイルシステムを作成してオプションを構成する 2

### スワップ領域の利用

スワップ領域を後から増やす方法

```bash
$dd if=/dev/zero of=/tmp/swapfile bs=1M count=10
$mkswap /tmp/swapfile
$swapon /tmp/swapfile
$swapon -s #スワップ領域の確認
```

`/dev/zero`は特殊ファイル

### オートマウント

* オートマウントとは？
  * 指定したディレクトリにアクセスすると、自動的にマウントする。
* 設定ファイル
  * `/etc/auto.master`
  * マップファイル(`/etc/auto.sda5`)
* オートマウントの実行
* `/etc/init.d/autofs start`(auto.masterを変更したらautomountデーモンを再起動する)
* 確認: `/mnt/auto/sda5`に移動する

```bash:/etc/auto.master
/mnt/auto /etc/auto.sda5 
#マウントベース　マップファイルのパス
```

```bash:/etc/auto.sda5
sda5   -fstype=ext3,rw :/dev/sda5 
#マウントベースの下に置かれるディレクトリ マウントオプション デバイスファイル名
```

## 主題204:高度なストレージ管理

* 204.1 RAIDを構成する 3
* 204.2 記憶装置へのアクセス方法を調整する 2
  * iSCSIのツールとユーティリティ 
* 204.3 論理ボリュームマネージャ 3

### パーティションタイプの設定

```
$ fdisk /dev/sdb
コマンド(mでヘルプ):t
領域番号(1-4):1  
16進数コード(L コマンドでコードリスト表示): fd (8e: LVM, fe:RAID)   

コマンド (mでヘルプ):p パーティション確認
```

### 論理ボリュームマネージャ(LVM)

|ボリューム(PV)|ボリュームグループ(VG)|論理ボリューム(LV)|
|---|---|---|
|sdc1<br>sdc2|vg01|lv01|

### LVMの構成

```bash
$pvcreate /dev/sdc1 /dev/sdc2 #物理ボリューム作成
$vgcreate vg01 /dev/sdc1 /dev/sdc2 #ボリュームグループ差kスエイ
$lvcreate -L 200M -n lv01 vg01 #論理ボリューム作成
$mkfs -t ext3 /dev/vg01/lv01 #ファイルシステム作成
$mount -t ext3 /dev/vg01/lv01 /mnt #マウント
```

* 論理ボリュームの確認 `lvdisplay /dev/vg01/lv01`

### RAID

ソフトウェアRAID（LinuxがRAIDを管理）

### RAIDの構成

```bash
$mdadm -C /dev/md0 --level=1 --raid-devices=2 --spare-devices 1 /dev/sdb1 /dev/sdb2 /dev/sdb3 #RAIDを作成 RAIDアレイmd0
$cat /poc/mdstat #RAIDアレイを確認
$mdadm --query /dev/md0 #RAIDアレイmd0の状態を確認
``` 

## 主題205:ネットワーク構成

* 205.1 基本的なネットワーク構成 3
* 205.2 高度なネットワーク構成 4
* 205.3 ネットワークの問題を解決する 4

### tcpdumpの実行例

`tcpdump icmp`など

## 主題206:システムの保守

* 206.1 ソースからプログラムをmakeしてインストールする 2
* 206.2 バックアップ操作 3
* 206.3 システム関連の問題をユーザに通知する 1


### ソースからインストール

```bash
$tar xzvf httpd-2.2.26.tar.gz
$cd httpd-2.2.26
$./configure #インストール環境の調査、Makefileの生成
$make #コンパイル
$make install #インストール
```

### ユーザへの通知

* ユーザへの通知
* `/etc/issue` ログイン前にシステム情報やメッセージを表示
* `/etc/motd`  ログイン後にメッセージを表示
* `wall` ログイン中のユーザへの通知

## 202試験

* WebサーバがApacheだけでなく、Nginxが追加された。
* LDAPクライアントではなく、LDAPサーバとしての知識が必要になった。


## 主題207:ドメインネームサーバ

* 207.1 DNSサーバの基本的な設定 3
* 207.2 DNSゾーンの作成と保守 3
* 207.3 DNSサーバを保護する 2

### DNSの基本

* 名前解決の種類
　　* 正引き:ホスト名→IPアドレス
　　* 逆引き:IPアドレス→ホスト名
* BIND ver9
  * DNSサーバのアプリケーション
* ゾーン
  * DNSサーバが管理する名前空間の範囲
* FQDN(Full Qualified Domain Name:完全修飾ドメイン名)　　
  * ホスト名+ドメイン名の形式で表す
* インストール
  * `yum install bind bind-chroot`
  
### BINDの設定ファイル

* /etc/named.conf #管理するゾーン、BINDの基本設定などを記述
* /var/named #ソースファイルの置き場所
* exapmle.net.zone #正引き設定
* 133.168.192.in-addr.arpa #逆引き設定
* その他、ループバック用ファイル、ルートDNSサーバ用ファイルが必要

### named.confの設定例
* /etc/namedの基本設定と管理するゾーンを記述
* 設定例:

```named.conf
options {
      directory "/var/named"; #ゾーンファイルのディレクトリ
};
zone "example.net" { #管理するゾーン
      type master;
      file "example.net.zone"; #正引きゾーンファイルの名前
};
zone "130.168.192.in-addr.arpa" {
      type master;
      file "133.168.192.in-addr.arpa"; #逆引きゾーンファイルの名前
};
```

### ゾーンファイル（正引き）

設定例:

```/var/named/example.net.zone
TTL 86400
@         IN     SOA    centos.example.net root.example.net. (
ゾーン名                 2014022301 # シリアル値
                        86400
                        21600      スレーブサーバに対する設定
                        864000     設定を変更した場合は値を変更しないとスレーブサーバへ通知されない。
                        86400 )
          IN     NS     centos.example.net. #DNSサーバ
          IN     MX   10  mail.example.net. #プリファレンス値とメールサーバ
centos    IN     A      192.168.130.128 #ホストのIPアドレスを指定
www       IN     CNAME  centos.example.net #別名
```

### ゾーンファイル（逆引き）
設定例:

```/var/named/133.168.192.in-addr.arpa
TTL 86400
@         IN     SOA    centos.example.net root.example.net. (
ゾーン名                 2014022301 # シリアル値
                        86400
                        21600
                        864000
                        86400 )
          IN     NS     centos.example.net. #DNSサーバーバ
128       IN     CNAME  centos.example.net. #逆引き設定
#↑128.130.168.192.in-addr.arpaとなる
```

digコマンドで正しく設定されているか確認する。

### TSIG

* dnssec-keygenで鍵を生成
   * `dnssec-keygen -a HMAC-MD5 -b 512 -n HOST example.net`
   * 生成した鍵により、スレーブサーバを認証
   
##  主題208: Webサービス

* 208.1 Apacheの基本的な設定 4
* 208.2 HTTPS向けのApacheの設定 3
* 208.3 キャッシュプロキシとしてのAquidの実装 2
* 208.4 WebサーバおよびリバースプロキシのしてのNginxの実装 2

### Apache httpd

* Webサーバ用アプリケーション
* 設定ファイル
* `/etc/httpd/httpd.conf
* 「ディレクティブ名　値」という形で設定

### UserDir

* ユーザーごとにページ公開領域を設定できる

```/etc/httpd/httpd.conf
<ifModules mod_usermod.c>
  UserDir public_html
<ifModule>  
```

### ディレクトリごとの設定情報

* .htaccessというファイルに設定を記述し、ディレクトリごとに設定を上書きすることができる。
* 設定可能な範囲はAllowOverrideで許可されている範囲

```/etc/httpd/httpd.conf
<Directory /home/*/public_html/>
AllowOverride AuthConfig indexes
</Directory>
AccessFileName .htaccess
```

```/home/*/public_html/.htaccess
DirectoryIndex index.html index.htm
Authtype Basic
AuthName "Enter Password"
AuthUserFile /etc/httpd/conf/.htpasswd
Require vaild-user
```

### HTTPSの設定
* opensslを利用する
    * 事前の設定
    * 公開鍵と暗号鍵を作成
    * 証明書発行要求書を認証局(CA)へ送る
    * 認証局からサーバ証明書を受け取る
    * サーバ証明書をWebサーバに設定する
* SSlのモジュールをインストールしておく
    * `yum install mod_ssl`
    
### SSLの設定

* `/etc/httpf/conf.d/ssl/conf`に設定

### Squid

* Webプロキシ・キャッシュサーバ
* 設定ファイル:`/etc/squid/squid.conf`
* http_accessディレクティブで許可されていないと接続できない
    * aclディレクティブで接続元アドレスなどを指定
* squidの起動
    * `/etc/init.d/squid start`
    
### Nginxの設定

* Webサーバとして動作させる場合
* 設定ファイル:`/etc/nginx/nginx.conf`（パッケージからインストール）
* リバースプロキシとして動作させる場合
* 設定ファイルは同じ

### 主題209:ファイル共有

* 209.1 Sambaサーバの設定 5
* 209.2 NFSサーバの設定 3

### Samba

* Windowsネットワークにおけるファイルサーバ機能を提供
* サービス
* `smbd nmbd winbind`
* 設定ファイル
* `/etc/samba/smb.conf/`
   * smb.confの構文にミスがないか確認→ testparm
* Sambaユーザの追加
   * `pdbedit -a centuser`
* smbclientで接続を確認する
   * `smbclient -U centuse//samba3/public` //netbios名/公開ディレクトリ
   
### Sambaの設定例

### NFS

* UNIX/Linuxネットワークにおけるファイルサーバ機能を提供
* インストール
  * `yum install nfs-utils nfs-utils-lib portmap`
* サービス
  * portmap nfsd moutd
* 起動方法
  * `/etc/init.d/portmap start` 必ずportmapから起動する。クライアントもportmapを起動
  * `/etc/init.d/nfs start`
* 設定ファイル
  * `/etc/exports`
* ユーザー管理
  * クライアント側でログインしたUIDを利用
  
###  NFSの設定と接続

/etc/exportsに記載する

```
/share 192.168.130.0/255.255.255.0(rw)
公開するディレクトリ　公開するクライアントのネットワーク
```

* クライアントからの接続
   * `mount -t nfs centos:/share /mnt/nfs/share`
   
## 主題210:ネットワーククライアントの管理

* 210.1 DHCPの設定 2
* 210.2 PAM認証 3
* 210.3 LDAPクライアントの利用方法 2
* 210.4 OpenLDAPサーバの設定 4

### DHCPサーバ

* 設定ファイル: /etc/dhcpd.conf  
  * ファイルは`/usr/share/doc/dhcp*/dhcp.conf.sample`をコピーして使用する
* 固定IPを割り当てることも可能
* DHCPサーバの起動
  * `/etc/init.d/dhcpd start`
  
###   PAM

* PAM(Pluggable Authentication Modules)
* 各アプリケーションに認証機能を提供
* `/etc/pam.d/`ディレクトリに各種アプリケーション用の設定ファイルが用意されている。

各種プロトコルからPAMライブラリを介してユーザ情報と認証する。

### PAMの設定例

* 設定例:`/etc/pam.d/su`

```
auth     sufficient    pam_rootk.so #順番に実行していく
auth     required      pam_wheel.so use_id
auth     include       system-auth
#モジュールタイプ　コントロール　モジュールのパス　引数
```

* コントロール
* sufficient:モジュールの実行に成功すると、上位でrequiredが全て成功であれば認証成功
* required:モジュールの実行に失敗したら、同じタイプのモジュールの実行が全て完了した時点で認証を拒否

上記の設定は以下の様な設定になる

* rootユーザは認証なしでsuできる
* wheelグループに所属するユーザはsuでrootになる時認証する。
  その他のユーザはrootになるのを認証が拒否
* wheelユーザだけがsystem-authが認証する。

### LDAP

* 標準仕様のディレクトリサービス
* 識別名（DN: Distinguished Name）
* 例： dn: cn=Suzuki Ichiro, ou=People, dc=example, dc=net
* 相対識別名(RDN: Rlative Distinguished Name
* 例： cn=Suzuki Ichiro
* 設定ファイル：/etc/openldap/slapd.conf

dc:ドメイン要素　cn:組織名 cn:一般名

### LDIF形式とエントリの追加

* LDIF(LDAP Data Interchange Format)形式: 

```sample.ldif
dn: cn=Takahashi Jiro, ou=People, dc=example,dn=net
objectClass: Person
cn: Takahashi Jiro
sn: Takahashi
telephoneNumber: +81 3 1234 5678
```

* エントリの追加
 * `ldapadd -x -D 'cn=Manager, dc=exapmle, dc=net' -W -f sample.ldif`
 
###  LDAPのコマンド

|クライアントコマンド|機能|管理コマンド|機能
|---|---|---|---|
|ldapadd|エントリの追加|slapadd|エントリの追加|
|ldapsearch|エントリの検索|slapcat|データをLDIF形式で出力|
|ldapmodify|エントリの変更|sllappasswd|パスワード値を生成|
|ldapdelete|エントリの削除|slalpindex|インデックスの再構築|
|ldappasswd|エントリのパスワード変更|slaptest|slapd.confを構文テスト|


## 主題211:電子メールサービス

* 211.1 電子メールサーバの使用 4
* 211.2 ローカルの電子メール配信を管理する 2
* 211.3 リモートの電子メール配信を管理する 2

### メールシステム

* MTA(Mail Transfer Agent):メールの転送【Sendmail,Postfix,qmail】
* MDA(Mail Delivary Agent):【Procmail】
* MUA(Mail User Agent):【mailコマンド】
* MRA(Mail Retrieval Agent):【dovecot, courrier IMAP】

sendmailの占める割合は少なく、postfixの問題の割合が高くなった。
procmailの問題など。


### postfix

* sendmailとの互換性を意識しながら、sendmail,qmailの長所を採用して作られたMTA
* 主な設定ファイル
   * `/etc/postfix/main.cf`
   * `/etc/postfix/master.cf`
* 関連ディレクトリ
   * メールスプール
       * `/var/spool/mail`（メールボックス形式。1ユーザにつき1ファイル)
       * `~/Maildir`(メールディレクトリ形式。１通につき１ファイル）
   * メールキュー
       * `/var/spool/postfix`(postfix)

### postfixの設定
* 設定例: 


```/etc/postfix/man.cf
myhostname = centos.example.net
mydomain = example.net #自分で追記する必要があり。
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetwork = 192.168.130.0/24, 127.0.0.0/8
home_mailbox = Maildir/
mailbox_command = /usr/bin/procmail
```

### procmail

* 定義したレシピに従い、メール配送を行うMDA
* レシピファイル
* `~/procmailrc` ユーザごとに設定
* `/etc/procmairc` システム全体に設定

## 主題212:システムのセキュリティ

* 212.1 ルータを構成する 3
* 212.2 FTPサーバの保護 3
* 212.3 セキュアシェル（ssh) 4
* 212.4 セキュリティ業務 3
* 212.5 OpenVPN 2

### FTPサーバの保護

* vsftpdの設定
   * `/etc/vsftpd/vsftpd.conf`
* 起動
   * `/etc/init.d/vsftpd start`

### OpenVPN

* 通信するホスト間を暗号化して、セキュアな通信を実現
* デフォオルトのポート番号:1194
* サーバ用設定ファイル
  * `/etc/openvpn/server.conf`
* クライアント用設定ファイル
  * `/etc/openvpn/client.conf`


---

LDAPなどはレベル3の範囲も一読しておく必要があり。