Debian
SimCity

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

当然ながら、Debian の公式の説明書 は一通り読んでおく。

港の準備/インストール

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

いざ!自分の港へ接続!

  • 自分の港をすべて把握して、セキュアな港を構築する
  • Debian はインストール時に root と一般ユーザを登録する
  • 「su -」で完全 root に切り替えて作業する (root が馴染み深くなる。passwd忘れ防止)
  • usermod -aG sudo y でユーザを sudo グループにしても良い
  • 旧:城管理者のチェックリスト / Linuxマシンのセットアップ も参考

SSH接続

[管制室マシン]
$ cat /proc/sys/kernel/random/entropy_avail
$ ssh-keygen -t ed25519   // 秘密鍵(ローカル保管)と公開鍵(サーバ保管)のペアを作成
$ vi ~/.ssh/config
 HOST hoge
    HostName 192.168.86.171
    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
# systemctl get-default
# systemctl set-default multi-user.target    // GUIを使わないサーバ環境
  • SSHの鍵認証で最も広く使われているのはRSA暗号
  • でも最近はRSAよりも「Ed25519」という暗号化アルゴリズムが強固でパフォーマンスも良く安全面と性能面で最強
  • VPS やコンテナはエントロピーが不足しやすいから、新しく鍵を作るときは haveged などでエントロピーを増やしてからがベスト!

SSHエージェントの起動

毎回の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環境は接続元マシンの設定が反映?

港ざっくり把握

  1. 港内マップ:FHS
  2. 港内の常駐さん:ユニット/ダイモン (35/218名ほど)
  3. 港内の職員たち:アプリ/コマンド (836名ほど)
  4. 港内の特別職員たち:派遣アプリ/dpkg (無限)
  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.
$ systemctl -t service [--state=running]
  • 詳しいことは GPT に聞く
  • ユニット(サービス)の起動に関係のあるsystemdソケット・ターゲットについても軽く把握

3. 港内の職員たち(コマンド/アプリ)

lrwxrwxrwx 1 root root 8 Nov 28 14:35 /sbin -> usr/sbin
lrwxrwxrwx 1 root root 7 Nov 28 14:35 /bin -> usr/bin
  • Debian11では「sbin - システム管理者用(209個)」と「bin - 一般ユーザ用(627個)」の2種類のコマンドがある
  • 「sbin」は一般ユーザからは which で見えない root用コマンド。使うためには sudo か rootになる必要がある
  • オプション「--help」や「-V」、「man」でコマンドの解説が見れる。必要になったら読めばいい
  • 当然ながら全部覚える必要はない。20:80の法則
  • 以前作成したページ:Linuxコマンドの内容も参照

4. 港内のAPT職員たち(dpkg/派遣アプリ)

  • とりま 公式の説明 を参照
  • 全てのパッケージを最新のものにアップデートしてシステムを最新の状態にする
$ apt list --installed
# apt update
# apt upgrade
# apt full-upgrade    // メジャーアップデート
# dpkg -l | grep '^rc'    // removed, config-file remain.を見る
# dpkg -l | grep '^rc' | awk '{print $2}' | xargs apt purge -y
  • 一般的なサーバなら apt upgrade は手動推奨
  • セキュリティアップデートのみ自動化する
# apt install unattended-upgrades -y
# dpkg-reconfigure unattended-upgrades
# less /etc/apt/apt.conf.d/50unattended-upgrades

5. 港レポート(港に関する報告ログ)

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

  • journalctl:システム内の警備員が逐一記録するバイナリ形式の日誌
  • rsyslog:サービスやアプリが書くテキスト形式の日記
  • journalctl -f とか、tail -f /var/log/apache2/access.log | grep mysite.com とか面白い

港のセキュリティ

fail2banの導入

# fail2ban-client status
# fail2ban-client status sshd
# tail -f /var/log/fail2ban.log
  • リアルタイムで不審なIPの Ban が監視できる

一般ユーザでのログ監視

# usermod -aG adm ユーザー名
  • Debian では、/var/log の多くのログは admグループ(admin) に読み取り権限がある

港のチューニング

ガシガシRAM利用で機動力UP!

# systemctl status systemd-sysctl.service
# echo "vm.swappiness = 30" | sudo tee -a /etc/sysctl.conf
# sysctl -p
  • Debian等のデフォルトは60。サーバマシンなら10がいい
  • ただメモリが少ない(1GB~2GB)マシンなら 20~30くらいが無難

さくらVPS でディスク拡張

  • fdisk で手動で拡張。growpart, parted できないし
  • GCPとかAWSで主流なswapファイルを利用。簡単で柔軟
  • /dev/vda2 にスワップパーティションとか古い
  • 詳しくは GPTアーカイブ「さくら ディスク拡張」参照