LinuC レベル2
技術解説セミナー
2.12.2 OpenSSH サーバーの設定と管理

株式会社ゼウス・エンタープライズ（LPI-Japanプラチナスポンサー）

鯨井貴博(LinuCエヴァンジェリスト)WHO ARE YOU?(講師紹介)
鯨井貴博

LPI-Japan プラチナスポンサー
LinuCエヴァンジェリスト

株式会社ゼウス・エンタープライズ

Linuxとの出会い

⼤学時代 Unixの存在を知り、⽇経Linuxを読み始める。
2000年にVine Linux 2.0で⼀度挫折を経験。
その悔しさを忘れきれず、2007年 他業種からIT業界に転職しLinuxに再チャレンジ。
SE・商⽤製品サポート・インストラクター・プロジェクト管理などを経験し、現在に⾄る。
⾃分⾃⾝が学習で苦労した経験から、初⼼者を含む受講者に分りやすい講義を⾏うように⼼がけている。
また、興味の向くIT技術・オープンソースソフトウェアなどについて、Opensourcetehブログ（https://www.opensourcetech.tokyo/）で執筆中。
実際に⾃分でやってみる/使ってみる・開発者本⼈から話を聞いてみることを⼤切にしています。

Linus Torvaldsさん(Linux開発者)

Igor Sysoevさん(nginx開発者)

Alexei Vladishevさん(Zabbix開発者)

2

WHO ARE YOU?(講師紹介)
Open Source Summit Japan 2023

Open Source Summit Japan 2023: ボランティアリーダーの体験記
https://www.opensourcetech.tokyo/entry/20231224/1703429785
3

アジェンダ
1. LinuCについて
試験概要と特徴

2.

技術解説

3.

Appendix

4.

お知らせ

5.

Q&A

2.12.2 OpenSSH サーバーの設定と管理
重要度
4
概要
SSHデーモンの設定と保護ができる。これには、鍵の管理とユーザ⽤にSSHを設定することも含まれる。
詳細
OpenSSH サーバーの設定ファイルとデーモン
sshd, /etc/ssh/sshd_config/etc/ssh/ssh_host_*_key および ssh_host_*_key.pub
スーパーユーザおよび⼀般ユーザのログインを制限する。
PermitRootLogin, PubKeyAuthentication, AllowUsers, PasswordAuthentication

4

本⽇のゴールØ

OpenSSHの設定を理解するØ

鍵の管理を理解するØ

ログイン制限を理解する

5

Linux技術者認定「LinuC（リナック)」とは■LinuCとはクラウド／DX時代のITエンジニアに求められるシステム構築から運⽤管理に必要なスキルを証明する技術者認定です。

ü クラウド活⽤に役⽴つスキルの習得• オンプレミス／仮想化・コンテナを問わず様々な環境下でのサーバー構築• 他社とのコラボレーションの前提となるオープンソースへの理解

ü 習得できるスキルが実践的問題作成にはトップエンジニアも参加するコミュニティ内の意⾒を取り込むことで、本当に必要な内容を網羅的に盛り込んでいます。

ü 上流⼯程を担うアーキテクトの領域までカバーシステムの運⽤管理からアーキテクチャ設計までの４つのレベルをひとつずつ習得していくことで、活躍できるエンジニアとして必要なスキルを網羅的に⾝につけていくことができます6

LinuCの４つのレベル
LinuCは、サーバーの運⽤管理からアーキテクト設計まで、システム開発・運⽤に必要な知識とスキルを体系⽴てて習得することができます。

7

LinuC レベル1
101試験

102試験

1.01︓Linuxのインストールと仮想マシン・コンテナの利⽤
1.01.1Linuxのインストール、起動、接続、切断と停⽌
1.01.2仮想マシン・コンテナの概念と利⽤
1.01.3ブートプロセスとsystemd
1.01.4プロセスの⽣成、監視、終了
1.01.5デスクトップ環境の利⽤
1.02︓ファイル・ディレクトリの操作と管理
1.02.1ファイルの所有者とパーミッション
1.02.2基本的なファイル管理の実⾏
1.02.3ハードリンクとシンボリックリンク
1.02.4ファイルの配置と検索
1.03︓GNUとUnixのコマンド
1.03.1コマンドラインの操作
1.03.2フィルタを使ったテキストストリームの処理
1.03.3ストリーム、パイプ、リダイレクトの使⽤
1.03.4正規表現を使⽤したテキストファイルの検索
1.03.5エディタを使った基本的なファイル編集の実⾏
1.04︓リポジトリとパッケージ管理
1.04.1apt コマンドによるパッケージ管理
1.04.2Debianパッケージ管理
1.04.3yumコマンドによるパッケージ管理
1.04.4RPMパッケージ管理
1.05︓ハードウェア、ディスク、パーティション、ファイルシステム
1.05.1ハードウェアの基礎知識と設定
1.05.2ハードディスクのレイアウトとパーティション
1.05.3ファイルシステムの作成と管理、マウント
https://linuc.org/linuc1/range/101.html
https://linuc.org/linuc1/range/102.html

1.06︓シェルおよびスクリプト
1.06.1シェル環境のカスタマイズ
1.06.2シェルスクリプト
1.07︓ネットワークの基礎
1.07.1インターネットプロトコルの基礎
1.07.2基本的なネットワーク構成
1.07.3基本的なネットワークの問題解決
1.07.4クライアント側のDNS設定
1.08︓システム管理
1.08.1アカウント管理
1.08.2ジョブスケジューリング
1.08.3ローカライゼーションと国際化
1.09︓重要なシステムサービス
1.09.1システム時刻の管理
1.09.2システムのログ
1.09.3メール配送エージェント(MTA)の基本
1.10︓セキュリティ
1.10.1セキュリティ管理業務の実施
1.10.2ホストのセキュリティ設定
1.10.3暗号化によるデータの保護
1.10.4クラウドセキュリティの基礎
1.11︓オープンソースの⽂化
1.11.1オープンソースの概念とライセンス
1.11.2オープンソースのコミュニティとエコシステム

8

LinuC レベル2201試験

2.01︓システムの起動とLinuxカーネル
2.01.1 ブートプロセスとGRUB
2.01.2 システム起動のカスタマイズ
2.01.3 Linux カーネルの構成要素
2.01.4 Linuxカーネルのコンパイル
2.01.5 カーネル実⾏時における管理とトラブルシューティング
2.02︓ファイルシステムとストレージ管理
2.02.1 ファイルシステムの設定とマウント
2.02.2 ファイルシステムの管理
2.02.3 論理ボリュームマネージャの設定と管理
2.03︓ネットワーク構成
2.03.1 基本的なネットワーク構成
2.03.2 ⾼度なネットワーク構成
2.03.3 ネットワークの問題解決
2.04︓システムの保守と運⽤管理
2.04.1 makeによるソースコードからのビルドとインストール
2.04.2 バックアップとリストア
2.04.3 ユーザへの通知
2.04.4 リソース使⽤状況の把握
2.04.5 死活監視、リソース監視、運⽤監視ツール
2.04.6 システム構成ツール
2.05︓仮想化サーバー
2.05.1 仮想マシンの仕組みとKVM
2.05.2 仮想マシンの作成と管理
2.06︓コンテナ
2.06.1 コンテナの仕組み
2.06.2 Dockerコンテナとコンテナイメージの管理
https://linuc.org/linuc2/range/201.html
https://linuc.org/linuc2/range/202.html

202試験

2.07︓ネットワーククライアントの管理
2.07.1 DHCPサーバーの設定と管理
2.07.2 PAM認証
2.07.3 LDAPクライアントの利⽤⽅法
2.07.4 OpenLDAPサーバーの設定
2.08︓ドメインネームサーバー
2.08.1 BINDの設定と管理
2.08.2 ゾーン情報の管理
2.08.3 セキュアなDNSサーバーの実現
2.09︓HTTPサーバーとプロキシサーバー
2.09.1 Apache HTTPサーバーの設定と管理
2.09.2 OpenSSLとHTTPSの設定
2.09.3 nginxの設定と管理
2.09.4 Squidの設定と管理
2.10︓電⼦メールサービス
2.10.1 Postfixの設定と管理
2.10.2 Dovecotの設定と管理
2.11︓ファイル共有サービス
2.11.1 Sambaの設定と管理
2.11.2 NFSサーバーの設定と管理
2.12︓システムのセキュリティ
2.12.1 iptables や firewalld によるパケットフィルタリング
2.12.2 OpenSSH サーバーの設定と管理
2.12.3 OpenVPNの設定と管理
2.12.4 セキュリティ業務
2.13︓システムアーキテクチャ
2.13.1 ⾼可⽤システムの実現⽅式
2.13.2 キャパシティプランニングとスケーラビリティの確保
2.13.3 クラウドサービス上のシステム構成
2.13.4 典型的なシステムアーキテクチャ

9LinuC 学習のコツ①出題範囲の内容について調べてみる
公式ドキュメント・技術書など②実際に操作してみる
これが⼤事︕③学習の補助教材などを利⽤する・メールマガジン
・標準教科書・過去のセミナー資料
詳細は、https://lpi.or.jp/learning/

10LinuC 学習のコツ④過去セミナーの動画
https://www.youtube.com/user/LPIJapan

11

LinuC 学習のコツ
学習の具体的な進め⽅(2~3か⽉程度)●⽉頃、受験しようという⽬標を⽴てる
試験範囲の確認(LinuC HP)↓
LinuC認定教材の購⼊・1週⽬読込 https://lpi.or.jp/linuc1/book.shtml
https://lpi.or.jp/linuc2/book.shtml↓
LinuC認定教材・Webサイトを参考に、実機操作(サーバ構築やコマンド操作)を試す※操作やトラブルシュートで⼒が⾝に付く︕
1ヶ⽉↓●⽉●⽇頃、受験しようと決める
LinuC認定教材 2週⽬読込↓問題集やメルマガサンプル問題で理解⼒確認 https://linuc.org/study/samples/※理解不⾜箇所の洗い出し↓
LinuC認定教材 3週⽬
2ヶ⽉※弱点の補強↓仕上げ
受験⽇の変更も可能なので安⼼受験申込(80%)↓
問題を8~9割以上、正解となるまで繰り返し解く
苦⼿な部分を重点的に復習・受験まで継続して学習すること↓
2.5ヶ⽉
・繰り返し学習し、理解度/問題正解率を⾼めた状態で受験すること完全に理解した︕ 受験(100%)

学習開始(0%)

12

技術解説

2.12.2 OpenSSH サーバーの設定と管理試験としての重要度(出題割合)は⾼く、現場においても頻繁に利⽤されるため しっかりとした理解が必要

13

技術解説
2.12.2 OpenSSH サーバーの設定と管理
重要度 4
概要
SSHデーモンの設定と保護ができる。これには、鍵の管理とユーザ⽤にSSHを設定することも含まれる。
詳細
OpenSSH サーバーの設定ファイルとデーモン
sshd, /etc/ssh/sshd_config/etc/ssh/ssh_host_*_key および ssh_host_*_key.pub
スーパーユーザおよび⼀般ユーザのログインを制限する。
PermitRootLogin, PubKeyAuthentication, AllowUsers, PasswordAuthentication

14

技術解説

SSHとは

15

技術解説(SSHとは)
Secure SHellの略
何がSecureなのか︖ →通信の暗号化
以前は、telnet(⾮暗号化 = 平⽂でのやりとり)であった

16

技術解説(SSHによるアクセス)
安全なリモートアクセスを提供
秘密鍵/公開鍵のペアによる認証
サーバへの通信暗号化

インターネット

SSHアクセス

17

技術解説

OpenSSHを使ってみる

18技術解説(OpenSSHとは)

OpenSSHは、SSHに対応したソフトウェア
SSHプロトコルを使⽤してログイン、ファイル転送、リモートコマンドの実⾏が可能
オープンソースソフトウェアとして公開されており、多くのOSで使⽤されている
サーバデーモンは、sshd
https://www.openssh.com/

19

技術解説(OpenSSH環境の⽤意)
サーバプログラムとして、openssh-serverをインストール通信元(クライアント)として、sshコマンドやそれを実装したクライアントソフトウェアを利⽤する

20

技術解説(OpenSSHの⽤意)
SSHクライアントソフトウェア
sshコマンド(CLI)
TeraTerm
rloginPutty
scpコマンド・winscp ※sshを使ったファイル転送21

技術解説(sshコマンドの使い⽅)
ssh オプション username@SSHサーバのIPアドレス
オプション-4︓IPv4のみを使⽤-6︓IPv6のみを使⽤-p︓ポート番号指定

22

技術解説(scpコマンドの使い⽅)
scp オプション username@SSHサーバのIPアドレス:ファイルのパス ファイル置場所※サーバ上にあるファイルをローカルにコピーする例
オプション-P︓ポート番号指定

23

技術解説

OpenSSHの設定

24

技術解説(OpenSSH設定ファイルの概要)
OpenSSHのサーバー設定は、 /etc/ssh/sshd_config ファイルで設定する

25

技術解説(OpenSSH設定ファイルの概要)
ディレクティブ

設定内容

設定例

Port

OpenSSHが公開するポート番号

22、10022

Protocolサポートするバージョン2

ListenAddress接続を受け付けるアドレス指定

0.0.0.0 ※全てのアドレス

HostKey

秘密鍵の指定/etc/ssh/ssh_host_ed25519_key

LOGLEVEL

ログの出⼒レベル指定

INFO・DEBUG・ERROR

PermitRootLoginrootユーザのログイン可否

yes・no・without-password・forced-commands-only

MaxAuthTries

1接続当たりの認証の試⾏回数

6MaxSessions

接続ごとに許可されるセッション数

10

AuthorizedKeysFile

ユーザ認証に使われる公開鍵指定.ssh/authorized_keys .ssh/authorized_keys2

UsePAM

PAMによる認証の許可

yes・noInclude

外部設定ファイルの参照先/etc/ssh/sshd_config.d/*.conf

PasswordAuthentication

パスワード認証の許可

yes・noAllowUsers

許可するユーザを指定

ユーザ名

PubKeyAUthentication

公開鍵認証の許可

yes・no26

技術解説(sshdデーモンの操作)起動
systemctl start sshd
停⽌systemctl stop sshd
再起動 ※設定変更後など
systemctl restart sshd
ステータス確認
systemctl status sshd

27

技術解説(OpenSSHの鍵の種類)
DSA: 桁数の⼤きい半素数の素因数分解が⾮常に難しいという性質を利⽤
RSA: 離散対数問題の困難性に基づく
ECDSA: 楕円曲線暗号を利⽤
ED25519: エドワーズ曲線を利⽤ ※デフォルト
ECDSA-SK︓ECDSA + セキュリティキーを使⽤
ED25519-SK︓ED25519 + セキュリティキーを使⽤
セキュリティキーとは︖ (ECDSA-SK・ED25519-SK)
USBデバイスによる指紋認証などハードウェア認証を併⽤するもの

28

技術解説

共通鍵暗号⽅式と公開鍵暗号⽅式

29

技術解説(共通鍵暗号⽅式とは)
共通鍵暗号⽅式とは、暗号化と復号化に同じ鍵を使⽤する⽅式
受信者と送信者は、共有の鍵を所有している必要がある
データの暗号化には、共通鍵アルゴリズムが使⽤される共通鍵の強度が重要

30

技術解説(公開鍵暗号⽅式とは)暗号化と復号化に異なる鍵を使⽤する
公開鍵は誰でも使⽤できる⼀⽅、秘密鍵は⾮公開で管理する

公開鍵暗号化

秘密鍵復号化31

技術解説(公開鍵暗号⽅式のメリット・デメリット)
暗号化データと公開鍵が流出しても、秘密鍵がなければ復号出来ない
秘密鍵の管理が重要
データの送信者と受信者が多い場合、鍵の管理が複雑になる

32技術解説(キーペアの作成⽅法)
ssh-keygen -t 鍵の種類[dsa/rsa/ecrsa/ed25519]
ubuntu@ubuntu:~/.ssh$ ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/ubuntu/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ubuntu/.ssh/id_ed25519
Your public key has been saved in /home/ubuntu/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:655rmPD5yLLmfS/g8ciScSFsKYkkzuD6stfHb8L32fE ubuntu@ubuntu
The key's randomart image is:+--[ED25519 256]--+|||o.
||B. o .
||.+o = .
||. o . .S||. o + .
|| . . @ O. . ||. o *o&oB. o o ||.+ oo=+XB=+ . E |+----[SHA256]-----+
ubuntu@ubuntu:~/.ssh$ ls
authorized_keys id_dsa.pub id_ecdsa.pub id_ed25519.pub id_rsa.pub
id_dsaid_ecdsa id_ed25519 id_rsa

https://linux.die.net/man/1/ssh-keygen33

技術解説(作成したキーペアを使ったsshアクセス)①キーペアの作成②設定(sshd_config)を変更
PasswordAuthentication no
PubKeyAuthentication yes※sshdへの反映もお忘れなく③公開鍵(id_ed25519.pub)の内容をauthorized_keysにコピー
ubuntu@ubuntu:~/.ssh$ cat id_ed25519.pub
ssh-ed25519
AAAAC3NzaC1lZDI1NTE5AAAAICj12/EeJt5AG2RZXITcC8XwO1VQRcZsCyUmwRAhsKyT
ubuntu@ubuntu
ubuntu@ubuntu:~/.ssh$ cat id_ed25519.pub >> authorized_keys④秘密鍵(id_ed25519)をクライアントへ渡す⑤クライアントからサーバへssh実施
34

技術解説(脆弱性に要注意)
緊急度が⾼い脆弱性が確認された場合には、対応が必要

https://jvndb.jvn.jp/
35

技術解説(脆弱性に要注意)
公開された脆弱性の内容やその対策をチェック

https://www.security-next.com/148143
36技術解説(脆弱性に要注意)
本家(openssh)サイトの更新(リリース)情報もチェック

https://www.openssh.com/releasenotes.html
37

Appendix

Appendix38Appendix(踏み台サーバを使ったsshアクセス)
リモートアクセス(SSH/RDPなど)の踏み台サーバ Apache Guacamoleを使ってみる

https://www.opensourcetech.tokyo/entry/20230210/1676032369
39

Appendix
LinuCレベル2 202試験
主題2.12.2の例題と解説
https://linuc.org/study/samples/4964/

40

お知らせ

41

お知らせ
ゼウス・エンタープライズの提供サービス

https://www.zeus-enterprise.co.jp/solution/service/https://www.it-training.tokyo/

42

お知らせ
Kubernets研修、やってます︕

https://www.it-training.tokyo/kubernetes/

43

お知らせ
技術を楽しみながら、⼀緒に働ける仲間を募集中︕

https://www.zeus-enterprise.co.jp/recruit/

44本⽇のまとめØ OpenSSHの設定を理解する
Ø 鍵の管理を理解する
Ø ログイン制限を理解する

OpenSSHの設定ファイル(sshd_config)のディレクティブとその意味を知る
キーペアの作成⽅法を理解し・鍵の配布などは慎重にセキュリティは⼤事︕

45

Q&A

46

Thank you for joining my seminar!
https://www.opensourcetech.tokyo/

https://twitter.com/matt_zeus

https://www.facebook.com/takahiro.kujirai.1
47