SlideShare a Scribd company logo
1 of 21
OSPN
今さら聞けない人のための
SSH超入門
日本仮想化技術株式会社
宮原 徹(@tmiyahar)
OSPN
本資料のライセンスについて
• 本資料はクリエイティブコモンズの「表示 -
継承 4.0 国際 (CC BY-SA 4.0) 」でライセン
スされています。
2
表示 — あなたは適切なクレジットを表示し、ライセンスへのリンク
を提供し、変更があったらその旨を示さなければなりません。あな
たはこれらを合理的などのような方法で行っても構いませんが、許
諾者があなたやあなたの利用行為を支持していると示唆するよう
な方法は除きます。
継承 — もしあなたがこの資料をリミックスしたり、改変したり、加工
した場合には、あなたはあなたの貢献部分を元の作品と同じライセ
ンスの下に頒布しなければなりません。
OSPN
本日の内容
SSHの基本について理解することを目標に関係
する知識についても解説します
• Linuxの管理者権限
• 公開鍵認証を使ったSSH接続
以下の環境を使って検証しています
• OS:AlmaLinux 9.2(ARM版)
• SSHクライアント:macOS版sshコマンド
3
OSPN
管理者権限
SSHの話に入る前に
root権限の取り扱いと
suコマンドやsudoコマンドを理解する
4
OSPN
なぜ管理者権限の話?
• SSHでリモートログインするのはシステム
管理が目的
• SSHはセキュアなユーザー認証や暗号化
通信でリモート作業を保護
• システム管理権限の適切な理解と設定が
無いとセキュリティを担保できない
5
OSPN
root権限の取り扱い
A. rootで直接ログイン
– sshdの設定で制御可能(PermitRootLogin)
– 公開鍵認証でrootとしてログインさせる
• パスワード認証は無効化
B. 一般ユーザーでログインさせる
a. suコマンドを実行してrootに変更
• 設定作業が多いインストール直後には向いている
• rootとして実行したコマンドは記録されない
b. sudoコマンドを実行してroot権限でコマンド実行
• コマンド実行履歴が/var/log/secureに記録される
OSPN
su コマンド実行の制限
• PAMを設定してsuコマンドの実行を制御
– trust:suコマンド実行時にrootパスワードを要求しない
– require:suコマンドを実行するにはwheelグループに所
属している必要がある
• /etc/pam.d/suを編集
– 設定のコメントアウトを外して保存すると即時有効
# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth sufficientpam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the "wheel" group.
#auth required pam_wheel.so use_uid
参考
OSPN
sudo コマンドの制御
• /etc/sudoersで制御
– パーミッション400なので編集できない
– 編集にはvisudoコマンドを使用
• 実行ユーザーのパスワードが必要
– 設定でパスワード不要にできる
• sudoersの書式は以下の通り
ユーザー ホスト=(実行ユーザー) [NOPASSWD:] コマンド
%グループ ホスト=(実行ユーザー) [NOPASSWD:] コマンド
OSPN
/etc/sudoersの設定例
## Allow root to run any commands anywhere
root ALL=(ALL) ALL ←rootは何でもOK
(略)
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
↑wheelグループ所属は何でもOKだがパスワードが必要
## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL ALL
↑wheelグループ所属は何でもOKでパスワードが不要
## Allows members of the users group to mount and unmount the
## cdrom as root
# %users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom
↑usersグループで実行できるコマンドを指定した形式
## Allows members of the users group to shutdown this system
# %users localhost=/sbin/shutdown -h now
↑usersグループでこのホストだけで実行できるコマンドを指定した形式
9
このいずれかを有効に
することが多い
OSPN
公開鍵認証を使ったSSH接続
10
OSPN
SSHをしっかり理解しよう
• SSHは暗号化通信でリモートログインする
仕組み
– ファイル転送やX11プロトコル等の転送も可能
• パスワード認証、公開鍵認証、ホスト認証
などをサポート
– パスワード認証は危険
– 公開鍵認証を設定後にSSHサーバーでパス
ワード認証は無効に設定
11
OSPN
公開鍵認証の設定
1. 公開鍵・秘密鍵の生成
– ssh-keygenコマンドを実行
– 秘密鍵にパスフレーズを設定
– ~/.sshディレクトリに秘密鍵、公開鍵のペアが生成
2. 公開鍵をサーバーに設置
– ~/.ssh/authorized_keysに追加
– 所有権をログインするユーザー、パーミッションを
~/.sshは700、authorized_keysは600に設定
3. サーバーに接続
– sshコマンドを実行
– 初回のみホスト証明書の受け入れ確認
– 2回目以降は~/.ssh/known_hostsと照合
OSPN
公開鍵・秘密鍵の作成
% ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/tmiyahar/.ssh/id_rsa):(エンターキー)
Enter passphrase (empty for no passphrase):(パスフレーズは非表示)
Enter same passphrase again:(パスフレーズは非表示)
Your identification has been saved in /Users/tmiyahar/.ssh/id_rsa
Your public key has been saved in /Users/tmiyahar/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:E59fCUG1YBC8frrfcDCtyvTi9vNUQHcLuo7Zik/hSnE tmiyahar@Toru-MBP-16
↑フィンガープリントは公開鍵のハッシュ値
$ ls -l .ssh
合計 8
-rw------- 1 tmiyahar staff 2655 10 22 12:37 id_rsa ←秘密鍵
-rw-r--r-- 1 tmiyahar staff 574 10 22 12:37 id_rsa.pub ←公開鍵
13
OSPN
公開鍵の種類
• ssh-keygenコマンドの–tオプションで指定
• 選択可能な鍵
– dsa
– ecdsa
– ecdsa-sk
– ed25519
– ed25519-sk
– rsa
14
←FIDOとかに関係あるらしい
←TTSSHのデフォルトになったみたい
←ssh-keygenのデフォルトらしい
OSPN
公開鍵の設置
1. 接続先サーバにユーザーを作成
2. (passwdコマンドでパスワードを設定)
3. 作成したユーザーにsuコマンドで切り替え
4. ~/.sshディレクトリを作成
– 所有者は作成したユーザー
– パーミッションは700
5. ~/.ssh/authorized_keysファイルを作成
– 所有者は作成したユーザー
– パーミッションは600
6. 公開鍵(id_rsa.pub)の内容をauthorized_keysに追記
– 公開鍵の情報をどうやってサーバーに持って行く?
15
OSPN
サーバーに公開鍵を設置
# useradd sshuser ←ログインするユーザーを作成
# su - sshuser ←作業するユーザーを変更
$ mkdir .ssh
$ chmod 700 .ssh
$ cd .ssh
$ touch autorized_keys
$ chmod 600 autorized_keys
$ cat id_rsa.pub >> autorized_keys
↑ファイルがあらかじめ配置されている前提だが、どうやっ
てファイルを持ってくるかが問題
16
OSPN
公開鍵のサーバへの転送
A) ターミナルに対してコピー&ペースト
– 公開鍵は単なるテキストなので
– 安全な接続を経由して行うこと
B) scpコマンドやsftpコマンドで転送
– SELinuxが有効な場合、/tmpなどに転送したファイル
をコピーして使わないこと
– 必ずcatコマンドでauthorized_keysに追記
C) ssh-copy-idコマンドを実行
– 転送からauthorized_keys配置まで自動実行
• クラウドの場合、あらかじめ登録しておく
17
OSPN
sshコマンドで接続
% ssh sshuser@192.168.156.101
The authenticity of host '192.168.156.101 (192.168.156.101)' can't be established.
ED25519 key fingerprint is SHA256:nKWsgCAF9YdR02YZKp0QqIk0/TDy/PzUJHCQnNCtxjM.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.156.101' (ED25519) to the list of known hosts.
Enter passphrase for key /Users/xxx/.ssh/id_rsa ': (パスフレーズを入力。非表示)
[sshuser@server ~]$
• 初めて接続するサーバーはホスト証明書が送られ
てくる
• yesと入力することで~/.ssh/known_hostsに
記録される
• 次回以降はホスト証明書を照合
– 異なっている場合には警告を表示して接続させない
(サーバーのすり替えなどの防止)
18
OSPN
OpenSSHサーバの設定
• /etc/ssh/sshd_configを設定
– デフォルトのままではセキュリティ的にやや問題
– 特に以下の2点については設定変更が必要
– 設定後sshdサービスを再起動
① PasswordAuthentication
– パスワード認証の可否を設定
– 公開鍵認証を設定後、設定をnoに変更する
• 設定しないとパスワード総当たり攻撃の対象に
② PermitRootLogin
– 直接rootでログインすることの可否を設定
– noに設定し、一般ユーザーでログイン後にsuやsudoでroot
権限を取得するやり方が多い?
OSPN
最近のSSHサーバーの設定
• /etc/ssh/sshd_configの設定
– PermitRootLogin prohibit-password
– rootでのパスワード認証は許可されていない
• これとは別に/etc/ssh/sshd_config.d/01-
permitrootlogin.confが作成されている
– インストール時に「パスワードによるroot SSHログ
インを許可」をチェックしている場合
– sshd_configを修正するだけでなく01-
permitrootlogin.confも削除する必要がある
20
# This file has been generated by the Anaconda Installer.
# Allow root to log in using ssh. Remove this file to opt-out.
PermitRootLogin yes
OSPN
その他メモ
• 公開鍵認証の完全で詳細な仕組みは複雑すぎて
説明しにくい
– セッションID、共通鍵、電子署名等、複数の要素を同
時に処理しているため
– 興味がある人は自分で調べてみて
• Tera Termがバージョンアップ(V5)
– TTSSH V3でRSA鍵/SHA-2署名に対応
– AWSで嬉しいらしい
• 二段階認証とかもできるよ
– Google Authenticatorを使ったり
• いろいろ便利な使い方もあるみたいだけど、その
辺は自分で調べてみてね
21

More Related Content

More from Toru Miyahara

2024/03/02 『Linuxサーバー構築標準教科書』V4をリリースしました
2024/03/02 『Linuxサーバー構築標準教科書』V4をリリースしました2024/03/02 『Linuxサーバー構築標準教科書』V4をリリースしました
2024/03/02 『Linuxサーバー構築標準教科書』V4をリリースしましたToru Miyahara
 
2024/03/01 今さら聞けない人のためのDevOps超入門 OSC2024 Online/Spring
2024/03/01 今さら聞けない人のためのDevOps超入門 OSC2024 Online/Spring2024/03/01 今さら聞けない人のためのDevOps超入門 OSC2024 Online/Spring
2024/03/01 今さら聞けない人のためのDevOps超入門 OSC2024 Online/SpringToru Miyahara
 
2024/03/01 爆速!DBチューニング超入門 〜DB性能の基礎とGPU活用による高速化〜
2024/03/01 爆速!DBチューニング超入門 〜DB性能の基礎とGPU活用による高速化〜2024/03/01 爆速!DBチューニング超入門 〜DB性能の基礎とGPU活用による高速化〜
2024/03/01 爆速!DBチューニング超入門 〜DB性能の基礎とGPU活用による高速化〜Toru Miyahara
 
DevOps超入門 〜DevSecOps実現に向けたはじめの一歩〜
DevOps超入門 〜DevSecOps実現に向けたはじめの一歩〜DevOps超入門 〜DevSecOps実現に向けたはじめの一歩〜
DevOps超入門 〜DevSecOps実現に向けたはじめの一歩〜Toru Miyahara
 
今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門Toru Miyahara
 
DBチューニング超入門
DBチューニング超入門DBチューニング超入門
DBチューニング超入門Toru Miyahara
 
これから始めるDevOps
これから始めるDevOpsこれから始めるDevOps
これから始めるDevOpsToru Miyahara
 
今さら聞けない人のためのバックアップ超入門
今さら聞けない人のためのバックアップ超入門今さら聞けない人のためのバックアップ超入門
今さら聞けない人のためのバックアップ超入門Toru Miyahara
 
やってみよう!Pi-Stopで学ぶRaspberry Pi+Pythonプログラミング
やってみよう!Pi-Stopで学ぶRaspberry Pi+Pythonプログラミングやってみよう!Pi-Stopで学ぶRaspberry Pi+Pythonプログラミング
やってみよう!Pi-Stopで学ぶRaspberry Pi+PythonプログラミングToru Miyahara
 
今さら聞けない人のためのDocker超入門
今さら聞けない人のためのDocker超入門今さら聞けない人のためのDocker超入門
今さら聞けない人のためのDocker超入門Toru Miyahara
 
Raspberry Piでハイレゾ音源を鳴らそう
Raspberry Piでハイレゾ音源を鳴らそうRaspberry Piでハイレゾ音源を鳴らそう
Raspberry Piでハイレゾ音源を鳴らそうToru Miyahara
 
Raspberry Piでハイレゾ音源を鳴らそう RuneAudio+Pi-DAC+編
Raspberry Piでハイレゾ音源を鳴らそう RuneAudio+Pi-DAC+編Raspberry Piでハイレゾ音源を鳴らそう RuneAudio+Pi-DAC+編
Raspberry Piでハイレゾ音源を鳴らそう RuneAudio+Pi-DAC+編Toru Miyahara
 
『仮想化』ってなに?
『仮想化』ってなに?『仮想化』ってなに?
『仮想化』ってなに?Toru Miyahara
 
オープンソースカンファレンスのご紹介@クラウド合同セミナー in 金沢
オープンソースカンファレンスのご紹介@クラウド合同セミナー in 金沢オープンソースカンファレンスのご紹介@クラウド合同セミナー in 金沢
オープンソースカンファレンスのご紹介@クラウド合同セミナー in 金沢Toru Miyahara
 
How To Make Open Source Conference 〜OSCの作り方〜
How To Make Open Source Conference 〜OSCの作り方〜How To Make Open Source Conference 〜OSCの作り方〜
How To Make Open Source Conference 〜OSCの作り方〜Toru Miyahara
 

More from Toru Miyahara (15)

2024/03/02 『Linuxサーバー構築標準教科書』V4をリリースしました
2024/03/02 『Linuxサーバー構築標準教科書』V4をリリースしました2024/03/02 『Linuxサーバー構築標準教科書』V4をリリースしました
2024/03/02 『Linuxサーバー構築標準教科書』V4をリリースしました
 
2024/03/01 今さら聞けない人のためのDevOps超入門 OSC2024 Online/Spring
2024/03/01 今さら聞けない人のためのDevOps超入門 OSC2024 Online/Spring2024/03/01 今さら聞けない人のためのDevOps超入門 OSC2024 Online/Spring
2024/03/01 今さら聞けない人のためのDevOps超入門 OSC2024 Online/Spring
 
2024/03/01 爆速!DBチューニング超入門 〜DB性能の基礎とGPU活用による高速化〜
2024/03/01 爆速!DBチューニング超入門 〜DB性能の基礎とGPU活用による高速化〜2024/03/01 爆速!DBチューニング超入門 〜DB性能の基礎とGPU活用による高速化〜
2024/03/01 爆速!DBチューニング超入門 〜DB性能の基礎とGPU活用による高速化〜
 
DevOps超入門 〜DevSecOps実現に向けたはじめの一歩〜
DevOps超入門 〜DevSecOps実現に向けたはじめの一歩〜DevOps超入門 〜DevSecOps実現に向けたはじめの一歩〜
DevOps超入門 〜DevSecOps実現に向けたはじめの一歩〜
 
今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門
 
DBチューニング超入門
DBチューニング超入門DBチューニング超入門
DBチューニング超入門
 
これから始めるDevOps
これから始めるDevOpsこれから始めるDevOps
これから始めるDevOps
 
今さら聞けない人のためのバックアップ超入門
今さら聞けない人のためのバックアップ超入門今さら聞けない人のためのバックアップ超入門
今さら聞けない人のためのバックアップ超入門
 
やってみよう!Pi-Stopで学ぶRaspberry Pi+Pythonプログラミング
やってみよう!Pi-Stopで学ぶRaspberry Pi+Pythonプログラミングやってみよう!Pi-Stopで学ぶRaspberry Pi+Pythonプログラミング
やってみよう!Pi-Stopで学ぶRaspberry Pi+Pythonプログラミング
 
今さら聞けない人のためのDocker超入門
今さら聞けない人のためのDocker超入門今さら聞けない人のためのDocker超入門
今さら聞けない人のためのDocker超入門
 
Raspberry Piでハイレゾ音源を鳴らそう
Raspberry Piでハイレゾ音源を鳴らそうRaspberry Piでハイレゾ音源を鳴らそう
Raspberry Piでハイレゾ音源を鳴らそう
 
Raspberry Piでハイレゾ音源を鳴らそう RuneAudio+Pi-DAC+編
Raspberry Piでハイレゾ音源を鳴らそう RuneAudio+Pi-DAC+編Raspberry Piでハイレゾ音源を鳴らそう RuneAudio+Pi-DAC+編
Raspberry Piでハイレゾ音源を鳴らそう RuneAudio+Pi-DAC+編
 
『仮想化』ってなに?
『仮想化』ってなに?『仮想化』ってなに?
『仮想化』ってなに?
 
オープンソースカンファレンスのご紹介@クラウド合同セミナー in 金沢
オープンソースカンファレンスのご紹介@クラウド合同セミナー in 金沢オープンソースカンファレンスのご紹介@クラウド合同セミナー in 金沢
オープンソースカンファレンスのご紹介@クラウド合同セミナー in 金沢
 
How To Make Open Source Conference 〜OSCの作り方〜
How To Make Open Source Conference 〜OSCの作り方〜How To Make Open Source Conference 〜OSCの作り方〜
How To Make Open Source Conference 〜OSCの作り方〜
 

SSH超入門