Upgrade to Pro — share decks privately, control downloads, hide ads and more …

42tokyo-born2beroot-review

love42
December 29, 2022

 42tokyo-born2beroot-review

love42

December 29, 2022
Tweet

More Decks by love42

Other Decks in Programming

Transcript

  1. Born2beRoot
    レビュー用資料
    42Tokyo - Born2beRoot
    by terabu 1

    View Slide

  2. 目次
    1.
    概要 (Project overview)
    2.
    簡易設定 (Simple setup)
    3.
    ユーザー設定 (User)
    4.
    ホスト名&
    パーティション (Hostname and partitions)
    5. sudo
    設定 (SUDO)
    6. UFW
    設定 (UFW)
    7. ssh
    設定 (SSH)
    8.
    モニタリングスクリプト (Script monitoring)
    42Tokyo - Born2beRoot
    by terabu 2

    View Slide

  3. 概要
    (Project overview)
    42Tokyo - Born2beRoot
    by terabu 3

    View Slide

  4. 仮想マシンについて
    <仮想マシンとは>
    1
    台のコンピュータ内に擬似的に再現したコンピュータ
    物理的なリソース(CPU
    、メモリ、ディスクなど)
    を論理的に統括・分割し
    て構築される
    <仮想マシンの利点>
    複数の OS
    を扱える
    効率的なリソース活用
    42Tokyo - Born2beRoot
    by terabu 4

    View Slide

  5. Linux
    について
    < Linux
    とは>
    OS
    の一つ
    無料で使えるオープンソース
    <ディストリビューションとは>
    Linux
    のアプリケーションやライブラリをひとまとめにして、PC
    にイン
    ストールすれば使える状態にした配布物
    Debian
    、Ubuntu
    、Rocky
    、CentOS
    など
    42Tokyo - Born2beRoot
    by terabu 5

    View Slide

  6. Debian
    と Rocky
    の違い
    項目
    Debian Rocky
    先祖 OS - (Debian
    が初代) RHEL(Red Hat Enterprise Linux)
    リリース年 1993
    年 2021

    用途 汎用 主に商用
    PKG
    管理 apt dnf(yum)
    費用 無料 無料
    サポート 充実 充実
    42Tokyo - Born2beRoot
    by terabu 6

    View Slide

  7. パッケージ管理について 1
    <パッケージとは>
    ソフトウェアの実行に必要なファイルをまとめたもの
    下記のようなもの
    実行ファイル
    ライブラリ
    設定ファイル
    リソース(
    画像・音楽ファイル)
    42Tokyo - Born2beRoot
    by terabu 7

    View Slide

  8. パッケージ管理について 2
    <パッケージ管理とは>
    パッケージのインストール/
    アンインストールを管理する
    パッケージをリポジトリから自動で探す
    リポジトリ:パッケージの保管場所 (
    配布サイト)
    パッケージの依存関係を自動で解決
    依存関係:パッケージ A
    を利用するために、パッケージ B
    をインスト
    ールする必要がある状態
    Linux
    では apt
    、yum
    、rpm
    などがある
    42Tokyo - Born2beRoot
    by terabu 8

    View Slide

  9. aptitude
    と apt
    の違い
    項目
    apt-get aptitude apt
    違い 設計にミ
    スあり
    外部プロジェクトとして生まれ
    た GUI
    をもったもの(
    未完成)
    apt-get
    の設計
    上のミスを修正
    使用
    推奨 X X

    42Tokyo - Born2beRoot
    by terabu 9

    View Slide

  10. APPArmor
    セキュリティ機能の一つ
    強制アクセス制御
    外部・内部からの脅威に対して OS
    やアプリケーションを防護
    各プログラムにセキュリティプロファイルを結びつけ、プログラムのでき
    ることに制限をかける
    プロファイルは、ネットワークアクセス、ファイルへの読み書き実行など
    の機能を制限できる
    42Tokyo - Born2beRoot
    by terabu 10

    View Slide

  11. 簡易設定
    (Simple setup)
    42Tokyo - Born2beRoot
    by terabu 11

    View Slide

  12. 仮想マシン起動
    <確認項目>
    グラフィック環境がないこと
    接続時にパスワードが要求されること
    ユーザーで接続すること(root
    ではない)
    パスワードが規則通りであること
    < OS
    確認(Debian
    であることを確認)

    $ uname -a
    42Tokyo - Born2beRoot
    by terabu 12

    View Slide

  13. サービス起動確認
    < UFW

    $ sudo ufw status
    < SSH

    $ sudo systemctl status ssh
    42Tokyo - Born2beRoot
    by terabu 13

    View Slide

  14. ユーザー設定
    (User)
    42Tokyo - Born2beRoot
    by terabu 14

    View Slide

  15. ユーザー確認
    <ユーザー名確認>
    $ id -un
    <所属グループ確認>
    $ groups // (getent group sudo user42)
    42Tokyo - Born2beRoot
    by terabu 15

    View Slide

  16. パスワードポリシー確認
    <やること>
    1.
    新規ユーザー作成
    2.
    パスワード登録
    3.
    設定ファイルの確認
    common-password
    login.defs
    42Tokyo - Born2beRoot
    by terabu 16

    View Slide

  17. 新規ユーザー作成
    <ユーザー作成コマンド>
    $ sudo adduser [new_username]
    42Tokyo - Born2beRoot
    by terabu 17

    View Slide

  18. パスワード登録
    <確認パターン(NG)

    abcdeABCDE //
    数字が足りない
    abcde12345 //
    英大文字が足りない
    ABCDE12345 //
    英小文字が足りない
    Born2beRo // 10
    文字より少ない
    Born2bbbeRo //
    同じ文字を3回繰り返している
    XXXXXXAB12 //
    ユーザー名が含まれている
    XXXXXXXX //
    古いパスワードにない文字が 6
    文字以下(
    設定で確認)
    42Tokyo - Born2beRoot
    by terabu 18

    View Slide

  19. パスワード登録
    <確認パターン>
    (OK)
    Born2beRoot
    42Tokyo - Born2beRoot
    by terabu 19

    View Slide

  20. 設定ファイル(
    ポリシー)
    確認
    $ sudo nano /etc/pam.d/common-password
    minlen
    :最低文字数
    lcredit
    :アルファベットの小文字の最低文字数(
    負数で指定)
    ucredit
    :アルファベットの大文字の最低文字数(
    負数で指定)
    dcredit
    :数字の最低文字数(
    負数で指定)
    maxrepeat
    :同一文字の連続繰り返し最大文字数
    usercheck
    :ユーザーが含まれているかどうか確認(0
    以外を指定)
    difok
    :古いパスワードとは異なる必要がある最小文字数
    enforce_for_root
    :root
    にも同ポリシーを適用する
    42Tokyo - Born2beRoot
    by terabu 20

    View Slide

  21. 設定ファイル(
    有効期限)
    確認
    $ sudo nano /etc/login.defs
    PASS_MAX_DAYS
    :パスワードの最大有効日数
    PASS_MIN_DAYS
    :パスワード変更の最短日数
    PASS_WARN_AGE
    :パスワード有効期限の警告通知日(
    何日前に警告する
    か)
    <確認>
    $ sudo chage -l [username]
    42Tokyo - Born2beRoot
    by terabu 21

    View Slide

  22. グループ割当て
    <グループ割当て>
    $ sudo groupadd evaluating //
    作成
    $ sudo usermod -aG evaluating [new_username] //
    割当て
    <確認>
    $ id [new_username] -Gn
    42Tokyo - Born2beRoot
    by terabu 22

    View Slide

  23. パスワードポリシーのメリデメ
    <メリット>
    パスワードの推測が困難になる
    ID
    乗っ取り対策向上
    <デメリット>
    管理者及びユーザーの手間が増える
    管理者:ポリシーの設定作業
    ユーザー:ポリシー通りの設定、定期的なパスワード変更作業
    42Tokyo - Born2beRoot
    by terabu 23

    View Slide

  24. ホスト名&
    パーティション
    (Hostname and partitions)
    42Tokyo - Born2beRoot
    by terabu 24

    View Slide

  25. ホスト名の確認と変更
    <確認>
    $ hostnamectl
    <変更>
    $ hostnamectl set-hostname [new_hostname]
    42Tokyo - Born2beRoot
    by terabu 25

    View Slide

  26. パーティションの確認
    <パーティションとは>
    ハードディスクの記憶領域を論理的に分割した領域のこと
    <パーティション確認>
    $ lsblk
    42Tokyo - Born2beRoot
    by terabu 26

    View Slide

  27. LVM
    < LVM
    とは>
    ディスク管理機能
    複数のハードディスクやパーティションにまたがった記憶領域を一つの論
    理ボリューム(LV)
    にまとめて扱うことができる
    システムを停止せずに論理ボリュームの拡大・縮小を行える
    42Tokyo - Born2beRoot
    by terabu 27

    View Slide

  28. sudo
    設定
    (SUDO)
    42Tokyo - Born2beRoot
    by terabu 28

    View Slide

  29. sudo
    について
    < sudo
    とは>
    現在ログインしているユーザーとは別のユーザーの権限でプログラムを実
    行するもの
    一部のプログラムを一般ユーザーに管理者権限で実行させたい場合に利用
    される
    42Tokyo - Born2beRoot
    by terabu 29

    View Slide

  30. sudo
    確認
    <インストール確認>
    $ sudo --version
    < sudo
    に割当て>
    $ sudo usermod -aG sudo [new_username] //
    割当て
    $ id [new_username] -Gn //
    確認
    42Tokyo - Born2beRoot
    by terabu 30

    View Slide

  31. sudo
    の操作例
    < sudo
    なし>
    nano /etc/hosts
    ※開けない、もしくは readonly
    で開かれる
    < sudo
    あり>
    sudo nano /etc/hosts
    ※書き込み可で開ける
    42Tokyo - Born2beRoot
    by terabu 31

    View Slide

  32. sudo
    設定確認
    <設定ファイル>
    $ sudo visudo // sudo nano /etc/sudoers
    <確認事項>
    1.
    パスワード入力制御&
    失敗時メッセージ
    2.
    ログファイル
    3. TTY
    モード
    4.
    使用パスの制限
    42Tokyo - Born2beRoot
    by terabu 32

    View Slide

  33. sudo
    設定 パスワード入力制御&
    失敗時
    メッセージ
    <確認事項(sudoers
    の設定項目)

    パスワードのリトライが 3
    回まで(passwd_tries)
    失敗時に指定したメッセージが表示されるか(badpass_message)
    42Tokyo - Born2beRoot
    by terabu 33

    View Slide

  34. sudo
    設定 ログファイル
    <確認事項(sudoers
    の設定項目)

    ログファイルの PATH
    が"/var/log/sudo"(logfile/iolog_dir)
    【入力】
    $ sudo less /var/log/sudo/sudo.log
    【出力】
    $ sudo sudoreplay -d /var/log/sudo
    【ログ番号】
    42Tokyo - Born2beRoot
    by terabu 34

    View Slide

  35. sudo
    設定 TTY
    モード
    <確認事項(sudoers
    の設定項目)

    TTY
    モードが有効になっている(requiretty)
    有効にすることで cron
    等からの実行を許可させない
    < TTY
    とは>
    接続端末のデバイスファイル名
    tty
    コマンドで表示できる
    42Tokyo - Born2beRoot
    by terabu 35

    View Slide

  36. sudo
    設定 使用パスの制限
    <確認事項(sudoers
    の設定項目)

    パスが制限されていること(secure_path)
    <補足>
    sudo
    は実行時に環境変数 PATH
    を secure_path
    に指定されたパスで初期
    化する
    設定することにより意図しないコマンドの実行を防ぐ可能性が UP
    42Tokyo - Born2beRoot
    by terabu 36

    View Slide

  37. UFW
    設定
    (UFW)
    42Tokyo - Born2beRoot
    by terabu 37

    View Slide

  38. UFW
    について
    < FW
    とは>
    外部アクセスの制御を行う仕組み
    「⁠
    外部からの接続は受け付けない」「⁠ssh
    だけは許す」のような設定がで
    きる
    不正なアクセスを防げる可能性が UP
    UFW
    は FW
    を簡単に設定できるツール
    42Tokyo - Born2beRoot
    by terabu 38

    View Slide

  39. UFW
    の設定内容
    $ sudo ufw status
    <確認事項>
    正常にインストールされていること
    ポートが 4242
    のみ許可されていること
    <ポートとは>
    端末の接続口
    42Tokyo - Born2beRoot
    by terabu 39

    View Slide

  40. UFW
    ルールの追加・削除
    <ポートの追加>
    $ sudo ufw allow 8080 //
    ポート8080
    を追加
    $ sudo ufw status //
    確認
    <ポートの削除>
    $ sudo ufw delete allow 8080 //
    ポート8080
    のallow
    を削除
    $ sudo ufw status //
    確認
    42Tokyo - Born2beRoot
    by terabu 40

    View Slide

  41. ssh
    設定
    (SSH)
    42Tokyo - Born2beRoot
    by terabu 41

    View Slide

  42. SSH
    について
    < SSH
    とは>
    Secure Shell
    (セキュアシェル)の略称
    リモートコンピュータと通信するための仕組み
    <インストール確認 (
    ステータスの確認)

    $ sudo systemctl status ssh
    42Tokyo - Born2beRoot
    by terabu 42

    View Slide

  43. SSH
    設定確認
    <設定ファイル>
    $ sudo nano /etc/ssh/sshd_config
    <確認事項>
    ポートが 4242
    のみ使用されていること
    42Tokyo - Born2beRoot
    by terabu 43

    View Slide

  44. SSH
    操作確認
    ホスト側でユーザー ID
    でアクセス
    $ ssh [email protected] -p 4242
    アクセスできることを確認
    <他確認事項>
    異なるポートでアクセス  →
    アクセスできないこと
    root
    ユーザーでアクセス  →
    アクセスできないこと
    42Tokyo - Born2beRoot
    by terabu 44

    View Slide

  45. モニタリングスクリプト
    (Script monitoring)
    42Tokyo - Born2beRoot
    by terabu 45

    View Slide

  46. モニタリングスクリプトの概要
    詳細は課題参照
    bash
    で作成
    10
    分ごとにログインしている全ての端末に表示
    全ての端末に表示 → wall
    コマンドを利用
    10
    分ごと → cron
    を利用
    42Tokyo - Born2beRoot
    by terabu 46

    View Slide

  47. script
    出力内容の確認 1

    各種項目は以下のコマンド・ファイルで取得できる
    OS
    の構成及びカーネルのバージョン
    uname -a
    コマンド
    物理プロセッサの数
    「/proc/cpuinfo
    」ファイル:"physical id"
    仮想プロセッサの数
    「/proc/cpuinfo
    」ファイル:"processor"
    42Tokyo - Born2beRoot
    by terabu 47

    View Slide

  48. script
    出力内容の確認 2
    サーバー上で現在使用可能なメモリとその使用率(%
    表記)
    free
    コマンド:"Mem"
    の行(total/used)
    サーバー上で現在使用可能なディスクとその使用率(%
    表記)
    df -BM -T --total
    コマンド:”total”
    の行(1M-blocks/Used/Use%)
    現在のプロセッサの使用率(%
    表記)
    top -bn1
    コマンド:”load average”
    前回再起動の日時
    who -b
    コマンド
    42Tokyo - Born2beRoot
    by terabu 48

    View Slide

  49. script
    出力内容の確認 3
    LVM
    がアクティブかどうか
    lsblk
    コマンド:”lvm”
    の記述があれば LVM
    が利用されている
    アクティブな接続の数
    netstat
    コマンド:"ESTABLISHED"
    の数
    サーバーを使用しているユーザーの数
    who
    コマンド:ユーザー数(
    重複除外)
    42Tokyo - Born2beRoot
    by terabu 49

    View Slide

  50. script
    出力内容の確認 4
    サーバーの IPv4
    アドレスとその MAC
    アドレス
    IPv4
    アドレス
    hostname - I
    コマンド
    MAC
    アドレス
    ip a
    コマンド:”link/ether”
    sudo
    プログラムで実行されたコマンドの数
    「/var/log/sudo/sudo.log
    」ファイル:”COMMAND”
    の数
    42Tokyo - Born2beRoot
    by terabu 50

    View Slide

  51. cron
    について
    プログラムを定期的に自動実行させるための仕組み
    設定は crontab
    ファイルで行う
    $ sudo crontab -l
    crontab
    の基本書式

    分 時 日 月 曜日 実行スクリプト名"
    ”*”
    は何も指定しない意味
    ”/n”
    のように書くと n
    おきに実行する
    42Tokyo - Born2beRoot
    by terabu 51

    View Slide

  52. cron
    検証
    < cron
    の変更>
    $ crontab -u root -e
    ※指示の通り編集する
    < cron
    の停止>
    $ sudo sytemctl stop cron // cron
    停止
    $ sudo sytemctl disable cron // cron
    の自動起動無効化
    42Tokyo - Born2beRoot
    by terabu 52

    View Slide

  53. 終わり
    ありがとうございました!
    42Tokyo - Born2beRoot
    by terabu 53

    View Slide