トレーニング > Linuxカーネル開発 > Linuxカーネルのデバッグとセキュリティ(LFD440)
インストラクター主導のコース

Linux Kernel Debugging and Security (LFD440)

このインストラクター主導のコースでは、カーネルのデバッグと監視に使用される重要なツール、およびセキュリティ機能の実装と制御の方法に焦点を当てています。

対象者

このコースは、Linuxカーネルのメソッドと内部インフラストラクチャを理解する必要がある経験豊富な開発者を対象としています。
少なく読む 続きを読む
学習内容

この4日間のコースには、Linuxカーネルコードの開発とデバッグに必要なツールを提供するために設計された広範な実践的な演習とデモンストレーションが含まれています。
少なく読む 続きを読む
身につく知識

Linuxカーネルについて十分に理解した上で、このコースを終了します。デバッグ手法とツール。
少なく読む 続きを読む
おもなテーマ
すべて展開
すべて折りたたむ
はじめに
- 目的
- あなたについて
- The Linux Foundation
-著作権および機密情報なし
- Linux Foundationトレーニング
- 認証プログラムとデジタル バッジ
- Linuxディストリビューション
- プラットフォーム
- システムの準備
-仮想マシンの使用とダウンロード
- Linuxにおける変化
- ドキュメントとリンク
準備
- プロシージャ
-カーネルバージョン
-カーネルソースとgitの使用
- 演習
OSSプロジェクトでの作業方法**
- 適切に貢献するには
- メインラインの近くでセキュリティと品質を保つ
- プロジェクトのDNAを研究して理解する
- スクラッチするべき部分を見つけ出す
- メンテナーおよび彼らのワークフローやメソッドを特定する
- 早い段階で意見を訊き、オープンに作業する
- 大きなコード ダンプではなく、差分のコードをコントリビュートする
- エゴを捨てよう。敏感にならないように。
- 忍耐強く、長期的な関係を築き、助けの手を差し伸べよう
カーネル機能
-カーネルのコンポーネント
-ユーザースペースとカーネルスペース
-システムコールとは何ですか?
-利用可能なシステムコール
-スケジューリングアルゴリズムとタスク構造
-プロセスコンテキスト
- 演習
監視とデバッグ
-Debuginfoパッケージ
-トレースとプロファイリング
-sysctl
-SysRqキー
--oopsメッセージ
-カーネルデバッガー
--debugfs
- 演習
Printk
-printkを使用したデバッグ
-printkのフォーマット指定子
-ハッシュポインタなしコマンドラインオプション
-初期のprintkを使用する
- 演習
procファイルシステム**
-procファイルシステムとは何ですか?
-エントリの作成と削除
-エントリの読み取りと書き込み
-seqファイルインターフェイス**
- 演習
kprobes
-kprobes
-kretprobes
--SystemTap **
- 演習
Ftrace
-ftraceとは何ですか?
--ftrace、trace-cmd、kernelshark
-利用可能なトレーサー
-ftraceの使用
-トレースディレクトリ内のファイル
-トレースオプション
-trace printk()を使用した印刷
-トレースマーカー
-バッファのダンプ
--trace-cmd
- 演習
性能
-パフォーマンスとは何ですか?
-パフォーマンス統計
-パフォーマンスリスト
-パフォーマンスレコード
-パフォーマンスレポート
-パフォーマンスアノテーション
-パフォーマンストップ
- 演習
eBPF
-BPF
-eBPF
-インストール
--bccツール
--bpftrace
- 演習
クラッシュ
-クラッシュ
-メインコマンド
- 演習
kexec
-kexec
-カーネル構成
--kexec-tools
-kexecを使用する
- 演習
カーネルコアダンプ
-カーネルコアダンプの生成と分析
- 演習
仮想化**
-仮想化とは何ですか?
-仮想化の輪
-ハイパーバイザー
QEMU
-QEMUとは何ですか?
-エミュレートされたアーキテクチャ
-画像フォーマット
-サードパーティのハイパーバイザー統合
- 演習
Linuxカーネルデバッグツール
-Linuxカーネル(組み込み)ツールとヘルパー
-kdb
--qemu + gdb
-kgdb:ハードウェア+シリアル+ gdb
- 演習
組み込みLinux **
-組み込みおよびリアルタイムオペレーティングシステム
-なぜLinuxを使うのですか?
-小さなLinux環境を作る
-リアルタイムLinux
通知者**
-通知機能とは何ですか?
-データ構造
-コールバックと通知
-通知チェーンの作成
- 演習
CPU周波数スケーリング**
-周波数と電圧のスケーリングとは何ですか?
-通知機能
- 運転手
-知事
- 演習
Netlinkソケット**
-netlinkソケットとは何ですか?
-ネットリンクソケットを開く
--netlinkメッセージ
- 演習
カーネルで非推奨のインターフェース
-廃止された理由
-非推奨
-BUG()およびBUG ON()
-kmalloc()の計算されたサイズ
-単純なstrtol()ファミリのルーチン
--strcpy()、strncpy()、strlcpy()
--printk()%pフォーマット指定子
-可変長配列
-スイッチケースのフォールスルー
-構造体のゼロ長および1要素配列
Linuxカーネルセキュリティの概要
-Linuxカーネルセキュリティの基本
-随意アクセス制御(DAC)
-POSIX ACL
-POSIX機能
-名前空間
-Linuxセキュリティモジュール(LSM)
-Netfilter
-暗号化手法
-カーネル自己保護プロジェクト
Linuxセキュリティモジュール(LSM)
-Linuxセキュリティモジュールとは何ですか?
-LSMの基本
-LSMの選択
-LSMのしくみ
-LSMの例:Tomoyo
SELinux
-SELinux
--SELinuxの概要
-SELinuxモード
-SELinuxポリシー
-コンテキストユーティリティ
-SELinuxおよび標準コマンドラインツール
-SELinuxコンテキストの継承と保存**
--restorecon **
--semanage fcontext **
-SELinuxブール値の使用**
--getseboolとsetsebool **
-トラブルシューティングツール
- 演習
AppArmor
-AppArmorとは何ですか?
-ステータスの確認
-モードとプロファイル
-プロファイル
-ユーティリティ
ネットフィルター
-netfilterとは何ですか?
-Netfilterフック
-Netfilterの実装
-Netfilterに接続する
--Iptables
- 演習
仮想ファイルシステム
-仮想ファイルシステムとは何ですか?
-利用可能なファイルシステム
-特別なファイルシステム
-tmpfsファイルシステム
-ext2 / ext3ファイルシステム
-ext4ファイルシステム
-btrfsファイルシステム
-一般的なファイルモデル
-VFSシステムコール
-ファイルとプロセス
-ファイルシステムのマウント
ユーザースペースのファイルシステム(FUSE)**
-FUSEとは?
-ファイルシステムの作成
- 演習
ジャーナリングファイルシステム**
-ジャーナリングファイルシステムとは何ですか?
-利用可能なジャーナリングファイルシステム
-対照的な機能
- 演習
まとめと評価サーベイ
- 評価サーベイ
カーネルアーキテクチャI
-UNIXおよびLinux **
-モノリシックカーネルとマイクロカーネル
-オブジェクト指向メソッド
-メインカーネルコンポーネント
-ユーザースペースとカーネルスペース
カーネルプログラミングプレビュー
-エラー番号とカーネル出力の取得
-タスク構造
-メモリ割り当て
-ユーザースペースとカーネルスペース間でのデータの転送
-オブジェクト指向の継承-一種の
-リンクリスト
-ジフィー
- 演習
モジュール
-モジュールとは何ですか?
-ささいな例
-モジュールのコンパイル
-モジュールと組み込み
-モジュールユーティリティ
-自動モジュールロード
-モジュール使用回数
-モジュールライセンス
-シンボルのエクスポート
-シンボルの解決**
- 演習
カーネルアーキテクチャII
-プロセス、スレッド、およびタスク
-カーネルプリエンプション
-リアルタイムプリエンプションパッチ
- 演習
カーネルの構成とコンパイル
-カーネルソースのインストールとレイアウト
-カーネルブラウザ
-カーネル構成ファイル
-カーネル構築とMakefiles
--initrdおよびinitramfs
- 演習
カーネルスタイルと一般的な考慮事項
-コーディングスタイル
-一般的なカーネルルーチンとメソッドの使用
-カーネルパッチの作成
-まばら
-possible()とlikely()の使用
-ポータブルコードの記述、CPU、32/64ビット、エンディアン
-SMPの作成
-ハイメモリシステム向けの書き込み
- パワー管理
-セキュリティを念頭に置いて
- 演習
競合状態と同期方法
-並行性と同期の方法
-不可分操作
-ビット演算
-スピンロック
-Seqlocks
-プリエンプションの無効化
-ミューテックス
-セマフォ
-完了関数
-リードコピーアップデート(RCU)
-参照カウント
- 演習
メモリアドレッシング
-仮想メモリ管理
-MMUとTLBがあるシステムとないシステム
-メモリアドレス
-高メモリと低メモリ
-メモリゾーン
-特別なデバイスノード
-NUMA
-ページング
-ページテーブル
-ページ構造
- 演習
メモリ割り当て
-ページのリクエストとリリース
- バディシステム
-スラブとキャッシュの割り当て
-メモリプール
--kmalloc()
--vmalloc()
-早期割り当てとbootmem()
-メモリの最適化
- 演習

**
これらのセクションは、部分的にまたは全体を
オプションとして考えることができます。これらのセクションには、
背景となる参考資料、専門的なトピック、または高度なテーマが含まれています。
講師は、教室での経験や時間の制約に応じて、
これらをカバーするかしないかを選択することができます。
前提条件
このコースを最大限に活用するには、次のことを行う必要があります。

  • Cプログラミング言語に精通している。
  • ls、grep、tarなどの基本的なLinux(UNIX)ユーティリティに精通している。
  • 利用可能なテキストエディタ(emacs、viなど)を快適に使用できます。
  • 主要なLinuxディストリビューションの経験は役立ちますが、必ずしも必要ではありません。
  • LFD420:Linux Kernel Internals and Developmentを取得した経験と同等の経験があります。

クラスの前に、クラス前の準備資料が提供されます。

レビュー
2022年2月
非常に知識豊富なインストラクター。
2022年2月
インストラクターは素晴らしく、この分野の多くのストーリーと背景知識を持っていました。彼はテクノロジーにコンテキストを取り入れ、歴史的な理由と意思決定を理解するのに役立ちました。
2022年2月
カーネルの設計の背後にある考え方を見るのは本当に興味深いです。
2022年2月
Behanが資料を提示するのに素晴らしい仕事をしたと感じました。
2021年12月
デバッグの章、特にftraceとperf。
2021年12月
モジュールをロードして実行することによる関連する演習。
2021年12月
このコースは非常に興味深く、いくつかのコアカーネル内部およびデバイスドライバークラスとは異なり、簡単に達成できる、はるかに小規模でわかりやすいラボがあるように見えました。また、各ラボでは、これまで使用したことのないカーネルデバッグまたはセキュリティの領域を強調しました。これはすばらしいことでした。
2021年11月
コースが気に入り、同僚にも強くお勧めします。
2021年11月
カバーされているトピックの幅が本当に気に入りました。私は、デバッグ機能とイントロスペクション機能がそれほど魅力的であるとは思っていませんでした。
2021年11月
kprobes + debugfsがどのように組み合わされるかを理解することで、デバッグの可能性の世界が開かれます。私は今、実験に行き、サイドプロジェクトについてブログを書く準備ができているように感じます!
2021年10月
Behanは素晴らしいです。彼に昇給してください。
2021年10月
Behanは単に素晴らしいです。
2021年10月
ベハン!彼は素晴らしかった。優れた背景コンテキスト、歴史、物事が進んでいる場所、および各トピックを他のトピックに結び付けることで、コースを本当にトップティアにしました。
2021年10月
インストラクターはコンテンツを非常にうまく配信しました。
2021年10月
ベハンは素晴らしいインストラクターでした、彼は本当にコースを素晴らしい経験にしました。
2021年9月
概念を説明する図がありました。
2021年9月
ラボでは、より複雑なトピックのいくつかに取り組みました。
2021年9月
資料は詳細であり、優れたスキルの構築を提供しました。
2021年9月
先生はとても自信があり、落ち着いてフレンドリーな声で話し、関連する質問を説明したり、ファイルをリアルタイムで編集したりすることを恐れていませんでした。
2021年7月
カールは本当に良いインストラクターです!
2021年7月
以前はユーザースペースアプリケーションでしか実行できなかった方法で、カーネルの低レベルの問題をデバッグおよび分析できるようになりました。
2021年7月
これは、以前はキャッチできなかった問題の分析とデバッグに役立ちました。
2021年7月
コースでカバーされているコンテンツは素晴らしいです。
2021年5月
素材は良いです。
2021年3月
私はラボが好きです。
2021年3月
私は今、LFD420とLFD440を受講しました。これらのコースがトピックの概要を提供し、ラボを使用してさらに調査する方法が本当に気に入っています。これは素晴らしいバランスを提供し、さらに自主的な探索への道を提供します。
2021年2月
私はLinuxについて非常に幅広い知識を得て、未知のテクノロジーを紹介されました。
2021年2月
資料のほかに、メンテナについて共有された洞察や、歴史的にどのように物事が起こったのかなどが大好きでした。インストラクターは、優れた、簡潔で、より実用的な説明を頻繁に思い付きました。
2021年2月
トレーニングエイド(仮想マシンなど)は通常どおりに使用されていました。トレーニングを最大限に活用するのに役立ちます。インストラクターは知識が豊富で、実際の経験でトピックを強化するのに役立ちました。 Behanにトレーニングを受けさせていただきありがとうございます。
2021年2月
インストラクターは素晴らしく、とても親切で思いやりがありました。
2021年2月
ラボを一緒に解決し、デモをライブで行います。
2021年2月
コンテンツ、ラボ、トレーナーの専門知識。