LPIC-3 Exam 300: Mixed Environments （バージョン３）合格体験記

# 初めに
LPIC-3 Mixed Environments がバージョン３になったにもかかわらず参考書や問題集が全く無く、何を勉強して良いのか解らず苦労したので、ここに合格までの体験記を記載しておきます。

ちなみに私は、今回の受験前に既にバージョン１は保持していて、今回は更新試験としてバージョン３を受けました。バージョン１の知識がある前提での記載になります。
とは言え、バージョン１との試験範囲の被りは少ない（Active Directory との連携の基本的な所ぐらい）と思っています。Sambaで自分で共有フォルダを設定できたり、ある程度のアクセス制限をかけたりする基本的な方法を知っているのであれば、わざわざバージョン１の書籍を買って勉強するほどのことは無いかなと思います。
（でも、バージョン１のLDAPの知識とか、Kerberosの知識は、試験とは別に知っていると何かと役立ちます。）
もし、Sambaを何も知らない状態から勉強するのであれば、バージョン１の参考書から始めることになるのかな。
この場合も細かく用語を覚えるのは後回しで、ざっくり知識を付ける感じで。

# 何からすればいいの状態
試験範囲見ると、膨大すぎて気が遠くなりますよね。

https://www.lpi.org/ja/exam-300-objectives/#.E8.A9.A6.E9.A8.93.E7.AF.84.E5.9B.B2

記載されていることがほとんど理解できないので、まずは、試験範囲に記載されている「用語とユーティリティ」をネットで検索して、何のことなのか調べてみました。
で、Red Hat のドキュメントにけっこうヒットするんですよね。Red Hat のドキュメントをベースに学べばいい、というのに気づきました。
それにしても、用語が膨大すぎて、この辺ではかなり凹んでました。

結果的に言うと、試験はこんな膨大な用語が出るわけではありません。
知識分野に「Samba ClusteringとCTDBの知識。」と記載されていますが、クラスタリング関係の問題なんて全く出ませんでした。

# 足掛かりは、LPI日本支部の動画
なんか学習の足掛かりが無いか調べたところ、LPI日本支部 がYoutubeを出してました。
参考になるのは以下かな。

[LPIC-3(300 ver3.0混在環境) 旧バージョンからの変更点について](https://www.youtube.com/watch?v=x7ZxUhWw0Lg&t=7s)

[LPIC-3 (300混在環境）プロの講師がFreeIPA詳細解説！ ](https://www.youtube.com/watch?v=RtAAwxdZPs4&t=265s)

特に、FreeIPAのやつについては、今、FreeIPAに関するまともな解説が Red Hat のドキュメント以外ほとんど見つからない中、かなり詳しく解説されています。
しかも、これ FreeIPA だけじゃなくて、結局試験範囲全般の解説をされてるんですよね。
ここで説明されているものの多くがテストで出てました。この動画は必見です。

最初観たときは、ざっくりしすぎてて、つかみどころが無いよなあと思っていましたが、はっきり言ってテストに出る所を重点的に解説されてます。

# 自分用のメモを作った
主に上記の動画で、これは覚えておこう！みたいなことを集めて、Windowsパソコンで OneNote に自分用のメモを作り、隙間時間にスマホで見て覚える、みたいなことをやりました。
メモを作って、解からないことをネットで調べて（だいたい、Red Hat のドキュメントがヒットする。）、解かったことをメモに追加する、という感じです。

Red Hat のドキュメントはかなり役立ちました。FreeIPA、SSSD、NFSv4 は Red Hat のドキュメントを読んで運用方法を覚えました。

一番下に、この時作ったメモを張り付けてます。

# 学易を利用した
ネットでうろついている時に、[学易](https://gakuyasu.byaku.jp/) という所が [LPIC-3 300 バージョン3 の問題](https://gakuyasu.byaku.jp/exam/lpic300v3.html)を出してくれている数少ない学習サイトということを知りました。
画面を見ると、スタイルとか使っていない素のHTMLっぽい画面なので大丈夫か？？？とか思ってしまうのですが、はっきり言って、ここの問題を完璧に覚えれば、合格できます。
この問題集の問題と似た問題がかなり出ました。

ただ、学易の解説って全然解説になってないんですよね・・・・。
例えば、ユーザー、グループ情報を格納できるSambaバックエンドの解説が、
smbpasswd と ldapsam がある と書かれているんですよね。。。
なんで、最も基本の tdbsam を省略するんじゃあ！！ とツッコミどころがけっこうあります。

なので、ある程度学習し終えて試験形式で勉強できるようになった段階で使えば最強かと思います。
ちなみに、期間によりコースが分かれていますが、私がやった時は全120問だったので、1か月で十分でした。

問題に対する正解キーワードがなんとなく解ってくるので、実際、テストでも選択肢を全部読まなくても一瞬で答えを見つけられるようになります。
私は、試験時間90分のうち、50分近く余りました。（全部見直しに使ったけど）

# で、合格！
800満点中、合格ライン 500点 で、700点 ピッタリのスコアで合格しました。
バージョン１の時は、500うん十点だったので、それに比べてかなり余裕を持ったスコアでした。
バージョン１は試験範囲がかなり広かったので、バージョン１経験者だと出題範囲が狭まった分簡単になったかなと思うかも。

自分は、1年計画で計画して少しずつ勉強したのですが、要領のいい人ならもっともっと短縮できると思います。
ぶっちゃけ、学易を丸暗記するだけで合格する人もいるんじゃないだろうか。

まとめると、
・LPI日本支部のYoutubeは有益。
・Red Hat のドキュメントで、運用の流れが学べる。
・学易の問題を全問覚えたら合格できる。


# 最後に、俺様メモ
※間違ってる所があるかもしれません
### Samba の暗記
#### Samba関連のポート
|ポート|サービス|
|:-|:-|
|139/TCP|NetBIOS over TCP/IP|
|445/TCP|CIFS|
|137/UDP、138/UDP|nmbd|
|53/TCP・UDP|DNS|
|88/TCP・UDP|Kerberos KDC|
|389/TCP・UDP|LDAP|
|636/TCP・UDP|LDAPS|
|3268/TCP、3269/TCP|グローバル カタログ|

#### Samba変数
| 変数 | 意味 |
|:-:|:-|
|%L   |サーバのNetBIOS名   |
|%m   |クライアントマシンの NetBIOS 名。<br>Samba がポート 445 で待機している場合、クライアントがこの情報を送信しないため、この変数は利用できない。|
|%U   | サーバにアクセス中のセッションユーザー名。<br>ログインに使ったユーザー。force user などにより実際のユーザーは違う可能性がある。  |
|%G   |%Uの所属するプライマリグループ   |
|%S   |セッション名（共有名）   |
|%I   |クライアントマシンのIPアドレス   |
|%i   |クライアントが接続してきたサーバーの IP アドレス。   |
|%D   |現ユーザーが所属するドメイン名もしくはワークグル－プ   |
|%d   |サーバープロセスのプロセス ID。    |
|%h   |Samba が動作しているマシンの インターネットホスト名。   |
|%M|クライアントマシンのインターネットホスト名。|
|%T|現在の日付と時間。 |

#### Samba関連クライアントコマンド
| コマンド | 意味 |
|:-:|:-|
|smbclient -k   |--kerberos Kerberosによる認証を試みる   |
|smbclient -m   |--max-protocol 使用するSMBプロトコルのバージョンを指定   |
|smbcacls   |共有上のファイルアクセス権限の表示   |

#### smb.conf で気になる設定
| 設定 | 意味 |
|:-|:-|
|config backend = registry   |レジストリベースのSamba設定<br>net conf コマンドで設定<br>デーモン再起動が不要|
|msdfs root = yes   |DFS（分散ファイルシステム）の設定<br>複数のサーバに分散した共有ディレクトリを、ルートを頂点とした１つの共有ツリーとして構成する|

#### samba-tool
| サブコマンド | 意味 |
|:-|:-|
|domain provision   |ドメインコントローラへの昇格   |
|domain join   |既存のドメインにDCまたはMEMBERとして参加<br>MEMBERとして参加 は  net ads join と同じ   |
|user add、delete、list   |ユーザーの追加、削除、一覧表示   |
|group add、delete、list<br>group addmembers グループ名 メンバー名<br>group removemembers グループ名 メンバー名   |グループの追加、削除、一覧表示<br>グループにユーザーを追加<br>グループからユーザーを削除   |
|dns add、delete、query   |DNSレコードの追加、削除、クエリ   |
|drs|ディレクトリ複製サービス（DRS）の管理|

#### レプリケーションの確立
samba-tool drs replicate プライマリーDCのホスト名かIP セカンダリーDCのホスト名かIP ドメイン名
レプリケーションの確認
samba-tool drs showrepl

#### デフォルトで存在するグループポリシー
Default Domain Policy, Default Domain Controllers Policy
デフォルトで存在するビルトイン・グローバルグループ
Domain Admins, Domain Users, Domain Guests                          
デフォルトで初期ユーザーやグローバルグループが格納されるコンテナ
CN=Users ※コンテナはOU（組織単位）と違い、GPOを適用することができない

#### グローバルカタログ
頻繁に利用される属性のデータベース　ポート 3268/TCP、3269/TCP(SSL)

#### FSMO（Flexible Single Master Operation）
１台しか指定できない特定の枠割
　スキーママスタ、ドメインネーミングマスタ
　　フォレスト内に１台
　PDCエミュレータ、RIDプールマスタ、インフラストラクチャマスタ
　　ドメイン内に１台

#### インフラストラクチャマスタ
　ドメイン内のユーザーやコンピューターと、グループアカウントのメンバー情報とのマッピング情報を保持している。


#### 分散ファイルシステム（DFS）
Samba サーバーは、smb.conf ファイルのグローバル Boolean パラメーター host msdfsを設定することで DFS サーバーにできる。
共有レベルの論理値パラメーターmsdfs rootによって共有を DFS ルートとして指定できる。
Samba 上の DFS ルートディレクトリはシンボリックリンクの形式で DFS リンクを提供できる。
※参考
root# cd /export/dfsroot
root# chown root /export/dfsroot
root# chmod 755 /export/dfsroot
root# ln -s msdfs:サーバ名\\共有名 リンク名（リンク名は必ず小文字）

DFS が設定された smb.conf
[global]
netbios name = GANDALF
host msdfs = yes
[dfs]
path = /export/dfsroot
msdfs root = yes


#### pdbedit でユーザー一覧表示
pdbedit -L -v
　-L 全てのアカウント表示
　-v 詳細表示


#### kerberos認証サーバの設定ファイル
kdc.conf

#### kerberosクライアントの設定ファイル
krb5.conf
```
[libdefaults]
	default_realm=LPI.JP    ・・・レルムの指定
[realms]
	LPI.JP={
		kdc=krb.lpi.jp:88    ・・・Kerberos認証サーバの指定
	}
```	


#### Kerberosの設定ファイル(krb5.conf)において、利用できるセクション名
[libdefaults]
[realms]
[domain_realm]
[capaths]
[appdefaults]
[plugins]


### FreeIPA
#### FreeIPAの導入
ipa-server-install
ipa-replica-prepare
ipa-replica-install
ipa-client-install


#### FreeIPAのユーザーライフサイクル
Stage User・・・認証不可、準備状態
Active User・・・認証可能
Preserved（保存） User・・・認証不可、使用させないが残しておきたい場合
Deleted User・・・完全消去、復元不可

Stage User⇒Active⇒Active User
Active User⇒Preserve⇒Preserved User
Preserved User
　Restore⇒Active User
　Staging⇒Staging User
削除はどの状態からでも可能


#### ipaコマンドの種類
操作対象のオブジェクト
　user,group,host,dnsrecord,cert,trust など
操作の種類
　add,mod,del,find,show,status など

#### コマンド例
ipa user-add
Ipa user-show -all　ユーザー情報（すべての属性）表示
ipa user-find
ipa user-status
ipa trust-add　フォレスト間信頼の作成　Active Directoryとの連携で使用

※オプションはユーザー名の前に指定してもOK
ipa user-add testuser --password
　パスワード込みでアクティブユーザーを追加
ipa group-add testgroup
　グループを追加
ipa group-add-member testgroup --users=testuser          
　testgroup に testuser を追加
ipa group-show testgroup
　グループに所属しているユーザーの確認
ipa user-show --all testuser
　testuserの全ての属性を確認
ipa user-status testuser
　ログイン失敗回数、最終ログイン日時の確認
ipa user-find testuser
　testuserの検索　ユーザー情報、主な属性が表示される
ipa user-find --all
　ユーザーを指定していないので、全ユーザーを検索
　--all オプションは、全属性を表示する

アクティブユーザーは、cn=users に所属

ipa stageuser-add tsetuser2 --password
　ステージユーザーの追加
ipa stageuser-show testuser2 --all
　ステージユーザーの確認
ipa stageuser-active testuser2
　ステージユーザーのアクティブ化
ipa user-show testuser2 --all
　アクティブユーザーの確認
ipa user-del testuser2 --preserve
　アクティブユーザーの保存
ipa user-show testuser2 --all
　保存ユーザーの確認
ipa user-del testuser2
　保存ユーザーの削除
ipa user-undel testuser2
　保存ユーザーをアクティブユーザーにする
ipa user-stage testuser2
　保存ユーザーをステージユーザーにする


### NFSv4
NFSv4ではKerberos認証が可能
サーバ側設定（/etc/exports）
/share *(sync, wdelay, hide, sec=krb5:krb5i:krb5p, rw, root_squash)

クライアント側設定
mount -t nfs -o sec=krb5 server:/share /mnt,/nfs


NFSv4でACL情報を表示、操作するコマンド
nfs4_getfacl nfs4_setfacl, nfs4_editfacl

### SSSD
SSSD（System Security Services Daemon）
クライアントにユーザーと認証情報のローカルキャッシュを作成する

sssd.conf
[sssd]
services=nss,pam,ssh,sudo   ・・・利用するサービスを列挙

SSSDを利用するにはクライアント側の/etc/nsswitch.conf　に以下の記載が必要
password: filses sss
shadow: filses sss
group: filses sss