ThinkStation P520cにDebian GNU/Linux 11をインストール

以下のスペックのThinkStation P520cをサーバ用に購入した。購入したものはWindows 10 Pro Workstationのプレインストール機だった。

ThinkStation P520c 30BYS54Q00

  • OS: Windows 10 Pro Workstation
  • CPU: Intel Xeon W-2223 (3.6GHz x 4core)
  • Memory: 32GB (16GB x 2)
  • SSD: 256GB
  • HDD: 2TB
  • GPU: NVIDIA Quadro P620 2GB (Mini Display board)

Debian 11(debian-11.0.0-amd64-netinst.iso)で無事にインストールできた。Lenovo ThinkStation P520cのインストールメモは以下の通り。

  • ブートデバイスの選択はロゴ表示時にF12
  • インストール時のパーティション設定の際にはSSD上のプレインストールされているWindowsを削除し、そこをルートディレクトリにした
  • HDDの方は分割し、/var (100GB)、swap(32GB)、残りを/homeとした。
  • Debian 11 (bulleye)を用いたサーバ設定メモ - 発声練習
  • NVIDIA Quadro P620 2GBを読み込むためのFirmware(nvidia/gp107/nvdec/scrubber.bin)は別途インストールが必要。各種設定後にfirmware-misc-nonfreeをインストールし、再起動する。

Debain本体はSSDの方に入れたのでSSDの寿命を伸ばす処置をする

slacknotebook.com
wiki.debian.org
wiki.archlinux.jp

よくわからなかったので、fstrimを定期的に実行する設定をする。

sudo systemctl enable fstrim.timer
sudo systemctl start fstrim.timer

/etc/fstabの設定もしておく。該当部分。

# / was on /dev/nvme0n1p3 during installation
UUID=6e213a60-4819-4197-bc10-68b47752146a /               ext4    discard,noatime,errors=remount-ro 0       1

編集したら以下を実行する。

% sudo update-initramfs -u -k all

Debian 11 (bulleye)のnftablesでアクセス制御

はじめに

Debian 11 のインストールはDebian 11 (bulleye)を用いたサーバ設定メモ - 発声練習

方針

Debian 10からアクセス制御をiptablesからnftablesで行うようになった。

  • Debian 9以前のiptablesの設定をテキストファイルに出力する
  • Debian 10上で iptables-restore-translate でiptablesの設定をnftablesの設定に変更する。
  • 編集したものを /etc/nftables.conf にコピーし、設定を反映させる。

(必要に応じて) iptablesの設定をテキストファイルに出力

% sudo iptables-save > iptables.conf

nftablesのインストール

% sudo apt install nftables
% sudo  systemctl enable nftables.service

現在の設定を表示する。

% sudo nft list ruleset

iptablesの設定をnftablesの設定へ変換

% sudo /usr/sbin/iptables-restore-translate -f iptables.conf > /tmp/nftables-temp.conf

/tmp/nftables-temp.conf を適宜編集する。/etc/nftables.conf の先頭2行は必ず追加しないといけない。編集したら/etc/nftables.confとして保存する。

% cd /etc
% sudo cp -p nftables.conf nftables.conf.org
% sudo cp /tmp/nftables-temp.conf nftables.conf
% sudo nft -f /etc/nftables.conf
% sudo nft list ruleset

設定例

元のiptablesの設定は https://qiita.com/cocuh/items/e7c305ccffb6841d109cを参考にしている。

#!/usr/sbin/nft -f

# 既存の設定をリセット
flush ruleset

table inet filter {
	chain input {
		type filter hook input priority 0;
	}
	chain forward {
		type filter hook forward priority 0;
	}
	chain output {
		type filter hook output priority 0;
	}
}

# 以下、iptables-restore-translateで変換したときに 
# INPUT, FORWARD, OUTPUTが大文字だったので小文字にした。
#
# また、 counter の後ろに ”packets 数字 bytes 数字" という記述があるがこれは削っても良いので削った。
# 以下は IPv4に対する設定。
table ip filter {
	chain input {
		type filter hook input priority 0; policy accept;
		
                # ICMPを許可 
		ip protocol icmp counter accept

                # 接続確立済みのTCPパケットを許可 
		ct state established,related counter accept

                # ローカルホスト(127.0.0.1)からのアクセス許可 
		iifname "lo" counter accept

                # ipspoofing対策
		ip saddr 10.0.0.0/8 counter drop
		ip saddr 172.16.0.0/12 counter drop
		#ip saddr 192.168.0.0/16 counter drop
		counter
		ip saddr 127.0.0.0/8 counter drop
		ip saddr 169.254.0.0/16 counter drop
		ip saddr 192.0.2.0/24 counter drop
		ip saddr 224.0.0.0/4 counter drop
		ip daddr 255.255.255.255 counter drop

                # SSH(22番ポート)へのアクセスは許可
		tcp dport ssh counter accept

                # HTTP(80番ポート)、HTTPS(443番ポート)へのアクセスは許可
		tcp dport http counter accept
		tcp dport https counter accept

                # SMTP(25番)へのアクセスは許可
		tcp dport smtp counter accept

		# SMTP AUTH on TLS(465)とPOP3S(995)へのアクセスは許可
		tcp dport urd counter accept
		tcp dport pop3s counter accept

                # muninへのアクセスはXX.XX.XX.XX/24の中からのみ許可
		ip saddr XX.XX.XX.XX/24 tcp dport munin counter accept

                # ポートスキャン対策
		meter portscan size 65535 { ip saddr limit rate 10/second burst 10 packets}  counter jump portscanner

               # 上記に当てはまらないTCP, UDPのパケットは不可
		ip protocol tcp counter reject with tcp reset
		ip protocol udp counter reject
		counter reject with icmp type prot-unreachable
	}

	chain forward {
		type filter hook forward priority 0; policy accept;
		counter reject
	}

	chain output {
		type filter hook output priority 0; policy accept;
		counter accept
	}

	chain portscanner {
		counter  drop
	}
}

ポートの開き具合をチェックする。

設定したサーバ上で開いているポートを調べる。

% lsof -i

別のマシンからサーバで開いているポートを調べる(注意:これは攻撃の第一段階のポートスキャンにあたるので自分で管理しているサーバにだけおこなうこと)。なお、当該サーバのIPアドレスをYY.YY.YY.YY とする

% sudo nmap YY.YY.YY.YY  (TCPのポートをチェック)
% sudo nmap -sU YY.YY.YY.YY (UDPのポートをチェック)

fails2banのインストールと設定

以下のとおりに設定できた。
Debian 10 + nftables + fail2ban - 発声練習

Debian 11 (bulleye)を用いたサーバ設定メモ

Debian 11 (bulleye)を使ってサーバを構築した際のメモ。

バージョンの確認方法

$ more /etc/debian_version 
11.0

$ uname -a
Linux ホスト名 5.10.0-8-amd64 #1 SMP Debian 5.10.46-4 (2021-08-03) x86_64 GNU/Linux

/etc/apt/sources.list を編集する

contoribとnon-freeを追加する。

% su
# apt-get update
# apt-get upgrade

sudoのインストール

標準で入れておいて欲しいくらい。

% su
# apt install sudo
# visudo
# /usr/sbin/visudo

visudoでsudoを使えるユーザを設定する。

/etc/apt/source.listの修正

Debian Wiki: SourcesListを参考にして編集する。具体的には mainに加えて、contribとnon-freeを追加する。

% sudo cp -p /etc/apt/source.list /etc/apt/source.list.org
% sudo vi /etc/apt/source.list

ネットワークの設定

Debian 10 Buster : 初期設定 : ネットワークの設定 : Server Worldに基づいて固定IPアドレスの設定に変える。

% sudo cp -p /etc/network/interfaces /etc/network/interfaces.org
% sudo vi /etc/network/interfaces

NTFSフォーマットが読み込めるようにする

Windowsと共用で用いている外付けHDDをマウントできるようにする。カーネルイメージの作り直しが入るので要再起動。

% sudo apt install ntfs-3g
% sudo reboot 

外付けHDDをマウントする。

% sudo dmesg (外付けHDDのデバイス名を取得する。だいたい /dev/sdb や /dev/sdc)
% sudo mkdir -p /mnt/ext_hdd  (マウント用のディレクトリ作成)
% sudo mount /dev/sdb2 /mnt/ext_hdd (外付けHDDが/dev/sdbと認識されており、その2番目のパーティションにアクセスする場合)
% df -h (マウント状況を確認する)

マウントを終了する場合は以下のようにする。

% sudo umount /mnt/ext_hdd

以前のサーバからのユーザ情報の移行

以前のサーバの以下のファイルからユーザアカウント(一般的に1000番以降)をコピーする。

  • /etc/passwd
  • /etc/shadow
  • /etc/group
  • /etc/gshadow

ただし、Debian10以前からの移行には注意が必要となる。

ローカルアカウントに対して、デフォルトのパスワード暗号化が SHA-512 からyescrypt(詳細は crypt(5)) に変更されました。これにより、辞書ベースのパスワード推測攻撃に対して時間と空間計算量の観点からセキュリティの向上が期待されます。

この改善されたセキュリティ機能の利点を享受するには、ローカルパスワードを変更する必要があります。passwd コマンドを使うなどしてください。

以前のパスワードの生成にどのようなパスワードハッシュ方法で使っていたとしても、そのパスワードは使い続けられます。

yescrypt は Debian 10 (buster) ではサポートされていません。そのため、bullseye システムのshadow パスワードファイル (/etc/shadow) を buster システムにはコピーできません。これらのファイルがコピーされた場合、bullseye システム上で変更されたパスワードは buster システムでは動作しません。同様に、bullseye システムで暗号化されたパスワードは buster システムへカット&ペーストできません。
5.1.4. パスワードのハッシュ化に yescrypt がデフォルトで利用されます

以前のサーバのファイルを〜.oldとしてサーバ上にコピーしておく。

% sudo vipw (/etc/passwdを編集するためのviコマンド呼び出し)
% sudo vipw -s (/etc/shadowを編集するためのviコマンド呼び出し)
%  sudo vigr (/etc/groupを編集するためのviコマンド呼び出し)
%  sudo vigr -s (/etc/gshadowを編集するためのviコマンド呼び出し)

vi(vim)で他のファイルを挿入する場合は「: r ファイル名」とする。(参考:vi で編集中に別のファイルの内容を読み込む – DACELO SPACE
ユーザ上のの以降に関する参考サイト

セキュリティ関係の設定

https://qiita.com/cocuh/items/e7c305ccffb6841d109cを参考に以下を実行する。

  • sshでrootにlogin出来なくする
  • sshdのプロトコルを2に限定する
  • sshguardかfail2banを導入する
  • 使わないポートを閉じる
  • passpromptを変える
  • logwatchを入れる

passpromptを変える

sudoを実行した際のパスプロンプトをhttps://qiita.com/cocuh/items/e7c305ccffb6841d109cの設定を参考に変更する。

% su
# visudo

以下を加える。

Defaults passprompt = "%u@%h -> Password!!! -> "

sshdの設定の変更

/etc/ssh/sshd_configの設定をhttps://qiita.com/cocuh/items/e7c305ccffb6841d109cの設定を参考に変更する。

sshguardかfail2banを導入する

% sudo aptitude sshguard

logwatchを入れる

% sudo apt install logwatch

Debian 8 (Jessie) - ログ解析ツール logwatch インストール! - mk-mode BLOGに従い、設定ファイルを設置する。

% cp /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/

logwatch.conf の「MailTo =」でログを送信したい宛先メールアドレスを設定する。

自動時刻合わせ

ntpdateをインストールする。

% sudo apt install ntpdate

crontabで時間合わせする。/etc/cron.weekly にスクリプトを置く。

% sudo touch /etc/cron.weekly/ntpdate.sh
% sudo chmod 755 /etc/cron.weekly/ntpdate.sh

組織内のNTPサーバがhogehoge.jpとしたとき、ntpdate.shの内容は以下の通り。

#!/bin/sh
/usr/sbin/ntpdate hogehoge.jp > /dev/null 2>&1

GCC関連のインストール

% sudo apt install gcc g++ make autoconf m4 bison flex

その他インストール

% sudo apt install -y zsh

コロナワクチンの接種証明書(電子交付)の仕様に関する私の意見

はじめに

公開し、意見募集してくれたのは大変すばらしい。ただ、想定する使い方の説明がないので、仕様の妥当性を判断できない。こういうのどうにかならんものなのか。
www.digital.go.jp

www.itmedia.co.jp

ワクチン接種証明書についての報道

toyokeizai.net

現時点においてWHOは、以下の理由から、ワクチン接種証明書を使った海外渡航に対して慎重な姿勢を見せている。

ワクチン接種証明書を議論する際には、科学的内容に加え、以下の4つの軸を意識し、混同しないように議論することが重要である。
① 法的議論:国際法 vs.国内法
② 技術論:アナログ(紙)vs. デジタル(アプリなど)
③ 地理的範囲:海外渡航 vs. 国内移動
④ 受益者:利益を享受できる者(ワクチン接種可能者) vs. 利益を享受できない者(ワクチン接種不可能者)

digital.asahi.com

海外渡航のため希望する人を対象に、新型コロナウイルスワクチンを接種したことを証明する「ワクチン証明書」の申請受け付けが26日、全国の市区町村で始まった。イタリアやトルコなど5カ国で入国後の隔離や陰性証明書の提出が免除される。

希望する人は、自身のワクチン接種券を発行した市区町村の窓口で申し込む。郵送のみの自治体もある。接種券や接種済み証、パスポートなどが必要となる。証明書はA4サイズ1枚で、氏名や接種を受けたワクチンの種類、接種年月日が記載される。発行手数料は無料。

私が危惧する点

海外渡航時に要求される「ワクチン接種証明書」と国内での利用を想定している「ワクチン接種証明書」が区別されずに実装されそうな点を危惧している。

www.nri.com

こうした内外の事例を踏まえ、国内でのワクチン接種証明書のさらなる積極活用を支持する動きが広がってきている。政府の新型コロナウイルス感染症対策分科会は9月3日に、ワクチンが行き渡った後の経済社会活動の制限緩和について提言を示した。その中では、接種証明書や検査の陰性証明書を活用して、医療機関・高齢者施設での面会や県境をまたぐ旅行、大規模イベントなどの制限を緩める仕組みの検討を求めた。また、百貨店や飲食店での活用も検討する必要があるとも明記した。これは、個人が他者に二次感染させるリスクが低いと証明する「ワクチン・検査パッケージ」という仕組みである。

www.nikkei.com

利用者はアプリを通じて発行を申請する。マイナンバーカードを読み取って4桁の暗証番号を入力する。地方自治体の窓口に赴く必要なく、すぐに利用できるようになる。

発行されれば、スマホのアプリに表示するQRコードが接種証明書になる。生年月日などの本人情報や接種歴の情報を表示する。偽造防止の電子署名もつく。

国内向けの仕組みができあがれば、海外渡航用の接種証明書もスマホに搭載できるようにする。

2021年9月17日現在のデジタル庁の資料では二次元コードで読み取れる情報として以下が列挙されている。パスポートから読み取る情報は個々人が追加するかどうかを判断できる様子。

二次元コードに含まれる項目(案)
・漢字氏名
・ローマ字氏名★
・国籍・地域★
・旅券番号★
・生年月日
・ワクチン名・メーカー名
・ロット番号
・接種日
・証明書ID
・発行日
★:パスポートから読み取る情報

海外渡航の際に提示するデータとしては致し方ないと思うけれども、このデータを店舗・施設利用時や民間のイベント(たとえばライブなど)参加時に提示し、読み込み可能とするというのはやりすぎだと思う。また、これらのデータを提供される側も個人情報の管理についてかなり負担だと思う(個人情報取扱事業者の責務|組織幹部のための情報セキュリティ対策|企業・組織の対策|国民のための情報セキュリティサイト)。特に非営利イベント(たとえば、大学のオープンキャンパスや公開講義など)では、法律で規定がないならばデータ管理に費やすコストが厳しいので、大丈夫ならば個人情報の収集をしたくない。

また、風俗店などのその利用を他人に広めたくないような施設の利用の際に、ここまでの個人情報の取得ができるようになってしまうと、証明書の提示自体を拒否されることになり、結局、接種証明書の利用自体がされなくなる。結果として、感染拡大防止の観点から本当に利用してほしいところで利用が忌避されてしまうようになる。


次にAPIの仕様は以下の通り。

予約サイト等での利用を念頭に置き、ワクチン接種情報を取得するAPIも提供予定です。
(1)「接種券番号」「生年月日」の情報を入力する
(2)「最終接種回数」「最終接種日」等の情報を返す

たぶん、デジタル庁の前提としてワクチン接種済みの人の全員がワクチン接種証明書の取得をしない(なぜならば、マイナンバーカードの取得が前提のため)というのがあるのだと思う。
news.tbs.co.jp

結果として、接種券番号が利用されることに。

以上の認識の下で以下のように意見を送った。

二次元コードの仕様についての意見

以下の意見を送った。

第一に本二次元コードの主な利用状況の提示がないため、二次元コード中で読み取り可能なデータが妥当かどうか判断できません。たとえば、証明書IDの認証をネット経由で行うかどうかも示されていません。証明書IDの認証をどのように行うのかの方針がわかる資料の公開を希望します。

第二に現在公開されている二次元バーコードの仕様は公的機関やホテル・コンサートチケットなど日常的に個人情報を取得する機関や業態にとって必要なことと思います。しかし、一般の飲食店や非営利的イベントなどでは不必要に個人情報を取得してしまいます。まん延防止等重点措置の際と同様に記録を残す必要があるとしても、氏名と証明書ID、証明書発行日時、有効期限の読み取りだけで十分だと思います。ご提案の二次元コード表示に加えて、簡易版の二次元コードの実装も希望します。

APIの仕様についての意見

以下の意見を送った。

ワクチン接種済み者全員がデジタルワクチン接種証明書の発行を受けないという前提なのだと思いますが、入力データとして証明書ID or デジタルワクチン接種証明書アプリが発行したアプリIDでも、予約サイトで利用できるようにしていただきたいと思います。接種券番号をいつまでも保持しておくのは煩雑であるためです。

希望するアプリの画面遷移

国内用と海外渡航用の画面を分けてほしい。

用途を考えると国内では頻繁に接種済みであることを証明する必要があるのでアプリ起動と同時に国内用画面が表示されるのが好ましい。たとえば以下のような起動時画面。多くの場合は目視で確認してもらえれば十分なので氏名などは提示しない。QRコードには証明書ID or アプリ生成のアプリIDを含める。まん延防止等重点措置の際と同様に記録を残す必要があるならば、QRコードに氏名をいれることが合っても良いかもしれない。

f:id:next49:20210918171924p:plain
アプリ画面起動時

海外渡航用は個人情報を含むのでパスコードを入力し、画面を遷移させるべきだと思う(これにより間違えて提示するということを防げる)。

f:id:next49:20210918172028p:plain
アプリ画面海外渡航用

メモ:スキルマーケット

言われてみれば納得できる流れ。アウトソーシングからクラウドソーシングと発注先の不特定化が進むとともに、日々発生する業務を細分化することによるマイクロワークとする。マイクロワークへの報酬が通常は成果払いのみだったところに、時間払いという項目も入る。そしてできあがるのがスキルマーケットという概念か。

以下の記事で問題視されているのは実質「研究の代行」と代行せざる得なくなった環境であって、スキルマーケットというあり方はまだ議論の対象に入っていないと感じる。世界の潮流や国が推し進めている政策からすると、組織を超えたコラボレーション(そのコラボレーションが金銭的に行われるのか、信頼で行われるのかの違いはあれど)は別に悪い話じゃない。そして、存在が可視化されていなかった「スキル」の持ち主が可視化されるようになって、利用可能になるのは悪い話じゃない。

mainichi.jp

研究者が研究技術を販売するビジネス「研究スキル売買」が広がっている。インターネット上のスキルマーケットなどで依頼を募り、学術論文の執筆支援などの見返りに料金を得る仕組みで、国内最大級のサイトでは現役の大学教授などを名乗る約120人がスキルを販売していたことが確認できた。匿名同士での売買が主流で、専門家は「研究能力の偽装につながる」と危険性を指摘しているが、学界のルール整備は進んでいない。

mainichi.jp

こうしたサイトを介して研究スキルを購入して学術論文を完成させた関東地方の私立大助教の40代女性が毎日新聞の取材に応じた。女性は国際学術誌へ投稿する論文に盛り込むデータの解析や本文の執筆などに関する研究スキルを約8万円で購入したという。スキルの購入を禁止する決まりはないが、女性は研究倫理違反行為に該当する恐れがないか不安を感じている。

「スキルマーケット」という概念はまったく知らなかった。こういうスキルの裏付けを保証する仕組みとしてOpen Badgeなどのデジタルクレデンシャルの話がくるのか。
fukugyo-laboratory.com