Debian
SimCity

Debian港の「全体」を理解してまとめておく。聖書やSimcityと同じで Debian港も「全体をしっかり把握」していれば、本質を深く理解でき、情報不足ゆえのつまずきを避ける事ができ、管理運営そのものも最高に楽しくなる。システムを「全て把握」していると何事も最高になる!

港の準備/インストール

  • SHELL文字化けの恐れがあるので基本的に「英語」でインスト
  • ただしキーボードは「Japanese」で「¥/|」が正しく入力されるか確認
  • 少なくとも「rootパーテーション」は別にすることを考慮する。ここには最も基本的なシステムが収められており、もし他のパーティションが壊れたとしてもシステムを起動して補修作業ができるのでシステムをゼロから再インストするといったトラブルを防げる

いざ!自分の港へ接続!

SSH接続

[管制室マシン]
$ ssh-keygen -t ed25519   // 秘密鍵(ローカル保管)と公開鍵(サーバ保管)のペアを作成
$ vi ~/.ssh/config
 HOST hoge
    HostName moge.vs.sakura.ne.jp
    Port 55555
$ ssh-copy-id hoge    // サーバに公開鍵を転送
$ ssh-add   // ローカルにパスフレーズを保存
$ ssh-add -l
$ ssh hoge
[港マシン]
$ systemctl status sshd
$ ss -tan
# vi /etc/ssh/sshd_config
 Port 55555
# systemctl sshd restart
$ ss -tan
$ lsof -i:55555
# ls /etc/ssh
$ ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub   // フィンガープリントの確認
# vi /etc/ssh/sshd_config
 PasswordAuthentication no
$ cat ~/.ssh/authorized_keys
  • SSHの鍵認証で最も広く使われているのはRSA暗号
  • でも最近はRSAよりも「Ed25519」という暗号化アルゴリズムが強固でパフォーマンスも良く安全面と性能面で最強

SSHエージェント as systemd

毎回のssh秘密鍵パスフレーズ入力が面倒な場合はssh-agentをサービスとして自動起動させておく。ただしcronはssh-agentのキーチェーンにアクセスできないらしい。ちなみに、秘密鍵パスフレーズはZIPファイルのパスワードみたいに内部的なものなのでそもそも空設定でも良さそう

Create /etc/systemd/user/ssh-agent.service. Run the following commands (under your user account, not root) to install the systemd unit and start:

$ systemctl --user enable ssh-agent.service
$ systemctl --user start ssh-agent.service
$ systemctl --user status ssh-agent
$ ps aux | grep ssh-agent

Add the following to ~/.bashrc:

export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/ssh-agent.socket"

Logout then login, confirm ssh-agent is running:

$ systemctl --user status ssh-agent.service
$ ssh-add
$ ssh-add -L
# loginctl enable-linger username

設定した秘密鍵パスフレーズを削除する場合。

$ ssh-keygen -f .ssh/key -p

マシン環境の確認

$ hostnamectl
$ vi .bash_aliases
 alias ll='ls -lh --color=auto'
 alias less='less -N'
$ . ~/.bash_aliases
# vi /etc/hostname
# vi /etc/default/keyboard
 XKBOPTIONS="ctrl:nocaps"
# systemctl restart console-setup
$ localectl
  • リモートマシンBash環境は接続元マシンの設定が反映?

港ざっくり把握

大前提として Debian の説明書 を参照。その上で以下5点を把握すれば港の全体像が掴める。

  1. 港内マップ - 港全体のフロアマップ
  2. 港内ユニット/ダイモン - 住み込み常駐さん (30/218部隊)
  3. 港内アプリ/コマンド - 港で働く正社員 (836名)
  4. 傭兵アプリ/Debianパッケージ - 港で働く派遣社員 (無限)
  5. 港ログ - 港で働く社員たちからの報告レポート

1. 場内マップ(フロアマップ)

FHS 参照。英語ネイティブみたいに「home/自分の家」や「lib/図書館」や「tar-ball/油人形」などを見て生き生きとした映像やそれに伴う感情を味わいながら把握して行く。

2. 港内ユニット/ダイモン(常駐さん)

A daemon is a service process that runs in the background and supervises the system or provides functionality to other processes. Traditionally, daemons are implemented following a scheme originating in SysV Unix. Modern daemons should follow a simpler yet more powerful scheme (here called "new-style" daemons), as implemented by systemd(1). This manual page covers both schemes, and in particular includes recommendations for daemons that shall be included in the systemd init system.

  • Debian11でデフォルトで稼働しているユニット
  • 218個のユニット/部隊が初期登録されているので稼働部隊の採用/不採用を決定
  • セキュリティを考慮して使わないサービスは停止、自動稼働も無効にする
  • 「running」は常に戦闘モードな状態。一方「exited」は休んでいる状態
# systemctl -t service | grep running
# systemctl stop [service]
# systemctl disable [service]
  • ランレベル3(CUIモード)で自動起動するサービスを確認して停止、自動起動をオフにする
# chkconfig --list | grep 3:on
# service auditd stop
# service netfs stop
auditd(コマンド監視), ip6tables(IP6利用), netfs(NFSクライアント), postfix(SMTPサーバ利用)
  • メールサーバなど、ユーザアカウントは必要だけどシェルログインは不要なユーザは、ログインシェルを「/sbin/nologin」か「/bin/false」にする
#useradd -s /sbin/nologin march
#usermod -s /sbin/nologin march

3. 港内コマンド/アプリ(正社員)

  • Debian11では「sbin - システム管理者用(209個)」と「bin - 一般ユーザ用(627個)」の2種類のコマンドがある
  • とりあえず、上記2種類を把握すればDebianシステムがデフォルトでできる事のおおよそのイメージがつく
  • 「sbin」は一般ユーザからは見えない root用コマンド。rootになる必要がある
  • オプション「--help」や「-V」、「man」でコマンドの解説が見れる
  • ただしiPhoneアプリ等と同じで、深く理解すべきは全体の2割、よく利用されるコマンド (100個程)。故に、無意味な深掘りは厳禁。取捨選択が大切
  • 最後にLinuxコマンドの内容も統合する
lrwxrwxrwx 1 root root 8 Nov 28 14:35 /sbin -> usr/sbin
lrwxrwxrwx 1 root root 7 Nov 28 14:35 /bin -> usr/bin

4. 傭兵ソフト/パッケージ(派遣社員)

  • 派遣社員たち はパッケージ管理システム「apt」を使って管理
  • 全てのパッケージを最新のものにアップデートしてシステムを最新の状態にする
$ apt list --installed
# apt update
# apt upgrade
# apt full-upgrade
  • 管理パッケージのアップデートは自動化できる
# apt install cron-apt    ← vi /etc/cron-apt/config(アプデ自動化)
# timedatectl status
# timedatectl set-timezone Asia/Tokyo
# date
  • ユーザがディスクの空き容量を使い切ってしまわないように、ユーザが利用するファイルシステムには独立したパーティションを割り当てる
  • 変更されないデータを格納するファイルシステムは、リードオンリーでマウントすることによりファイルの改竄や破壊行為を抑えられる
  • アドレススキャン(港探索)回避のためにブロードキャスト宛リクエストを無視する。下記の設定ファイルに追記
/etc/sysctl.conf
net.ipv4.icmp_echo_ignore_broadcast=1

5. 港ログ(社員たちからの報告レポート)

港の状態を把握するために必要な現地からのフィードバック。