OSのインストールと初期設定


目次

  1. このページについて
  2. NetBSDのインストール
  3. ネットワーク接続
  4. すべて遮断する
  5. ユーザの作成
  6. pkgsrc(7)のインストール

このページについて

ここではなんらかの環境(ノートPC・デスクトップPCのような物理的なものやVirtualBox・KVM・Bhyve・Xenなどの仮想マシン)にNetBSDをインストールし、日本語デスクトップ環境をインストールする前段階について説明する。なので内容についてはNetBSDに強く依存してしまうが、手順そのものはほとんどのUnix系OSに通じると思う。NetBSD以外のOSをインストールしたい場合、NetBSD以外のBSD Unixであればpkgsrc(7)のインストールを読み飛ばしてもらい、GNU/Linuxであればインストーラの時点でほぼすべての手順が完了していると思うのですべて遮断するだけを読んでもらえればいい(ただしSlackware系のディストリビューションは除く。しかしこれを選んだのであればこの文書自体読む必要はないだろう)。

NetBSDのインストール

多くの場合amd64(64bit)アーキテクチャのインストーラをFTPサーバからダウンロードしてそれをブートすることになる。http://nycdn.netbsd.org/pub/NetBSD-daily/netbsd-8/latest/images/ からISOファイルやgzip圧縮されたimgファイルをダウンロードできる。

多くのIT技術系ブログでNetBSDのインストール手順について画像つきで詳しく解説されている。しかし僕はThe NetBSD Projectから提供されているChapter 3. Example Installationを読むことをおすすめする。これがあるのでインストール手順について改めて紙面を割く必要もない。この文書は英語だが、どのみちNetBSDのインストーラも英語なので気にしなくていい。

仮想マシンにNetBSDをインストールするのであれば、NetBSDで遊ぼうのこーなを参考に仮想化ソフトウェアを選ぶといい。このページから引用し、さらに僕が普段使っているBhyveや使ったことのあるXenも加えると次のようになる。

ソフトウェア Addin 状況
VirtualBox x GuestAdditionsは未対応だが他問題なし
VMware o 非ネット共有フォルダに失敗
クライアントHyper-V x SMPとACPIを無効化しないとネット不可。ネットはレガシーアダプタ要
QEMU x 起動に失敗
Bhyve ? vm-bhyveで確認。
Xen ? Domain 0はNetBSD

物理的な環境にインストールする場合、まずは動作が確認されている機器を慎重に選ぶところから始まる。ThinkPadはだいたい動くようだ。僕が使ってきたマシンについてはNetBSD on ThinkPadを参照してほしい。

ネットワーク接続

ifconfig(8)でネットワークインタフェースの名前を確認する。有線接続する場合はmedia: Ethernet autoselect、無線接続する場合はmedia: IEEE802.11となっているネットワークインタフェースを探す。

# ifconfig
wm0: flags=0x8802 mtu 1500
        capabilities=7ff80
        capabilities=7ff80
        capabilities=7ff80
        enabled=0
        ec_capabilities=7
        ec_enabled=0
        address: 4d:a8:1f:24:ab:03
        media: Ethernet autoselect (none)
        status: no carrier
iwn0: flags=0x8843 mtu 1500
        ssid SSID nwkey *****
        powersave off
        bssid 6d:d4:18:01:a6:14 chan 10
        address: 7d:99:25:7a:23:c9
        media: IEEE802.11 autoselect (OFDM36 mode 11g)
        status: active
        inet 192.168.100.102/24 broadcast 192.168.100.255 flags 0x0
        inet6 fe80::629b:d0c1:135b:eb24%iwn0/64 flags 0x0 scopeid 0x2
        inet6 2001:268:c146:5657:63c1:78ae:4457:e5ae/64 flags 0x0
lo0: flags=0x8049 mtu 33624
        inet 127.0.0.1/8 flags 0x0
        inet6 ::1/128 flags 0x20
        inet6 fe80::1%lo0/64 flags 0x0 scopeid 0x3

この出力は既に無線接続が設定されているものだが、ここで有線接続のネットワークインタフェースはwm0、無線ではiwn0ということがmediaの行から分かる。

ネットワークの設定後はnetworkデーモンを再起動する。

# service network restart

有線接続(固定IPアドレス)

あらかじめどのIPアドレスを使うか定められており有線接続する場合、ifconfig.if(5)を書く。IPアドレスが192.168.200.40/24でネットワークインタフェースがwm0だとすると/etc/ifconfig.wm0を次のように編集する。

inet 192.168.200.40 netmask 255.255.255.0

有線接続(動的IPアドレス)

DHCPサーバに問い合わせてIPアドレスを動的に割り振るネットワーク環境の場合dhcpcd(8)を使うだけでいい。ネットワークインタフェースがwm0だとすると次のように実行する。

# dhcpcd wm0

OS起動時に自動的にdhcpcd(8)を実行するには/etc/rc.confに次の2行を追記する。

dhcpcd=YES
dhcpcd_flags="wm0"

無線接続(動的IPアドレス)

無線を使うには次の手順に従う。

    1. SSIDとパスフレーズ(パスワード)の確認
      wpa_passphrase(8)の実行
      wpa_supplicant(8)の実行
      dhcpcd(8)の実行
  • まず無線接続に必要なSSIDとパスフレーズを控える。ここではSSIDをhome-ssid、パスフレーズをpassword、ネットワークインタフェースはiwm0とする。

    wpa_passphrase ssid passphraseという形式でwpa_passphrase(8)を実行する。

    # wpa_passphrase home-ssid password
    network={
            ssid="home-ssid"
            #psk="password"
            psk=d5264ac3e0512b34b5f6856bbb224b87ce84256de9023decb076ff974fbe06a2
    }

    このコマンドで得られた出力を/etc/wpa_supplicant.confに書き込む。リダイレクトしてもいい。

    # wpa_passphrase home-ssid password >> /etc/wpa_supplicant.conf

    wpa_supplicant(8)を実行する。

    # wpa_supplicant -B -i iwn0 -c /etc/wpa_supplicant.conf

    無線のランプが光るなど無線デバイスが使えるようになったら、dhcpcd(8)でIPアドレスを取得する。

    # dhcpcd iwn0

    OS起動時にこれらの手順を自動でおこなうには/etc/rc.confに以下を追記する。

    wpa_supplicant=YES
    wpa_supplicant_flags="-B -i iwn0 -c /etc/wpa_supplicant.conf"
    dhcpcd=YES
    dhcpcd_flags="iwm0"

    すべて遮断する

    ネットワーク接続をしたあとはすぐに外からのあらゆるアクセスを遮断する。アクセスさせたいプロトコルやポート番号のみを開け、ユーザ認証が必要な場合はなるべくパスワード認証を避け公開鍵認証方式に切り替える。どうしてもパスワード認証を使わざるを得ないときはパスワード生成ソフトウェアを通じて可能な限り長くランダムなパスワードを使う。

    自宅で使うPCでこのポリシーは意味がないようにみえるが、これを習慣づけておくといざインターネットに公開するサーバを運用するとき役に立つ。HTTPサーバを運用するだけでも、ありもしないwp-login.phpにアクセスしようとしたりrootでSSHログインを試みた痕跡がつく。自衛のために日頃から訓練しておくのは悪いことではない。

    アクセス制御にはlibwrapによるものとnpf(7)によるものがある。ここでは前者について説明する。

    libwrapによるTCPアクセス制御

    NetBSDでTCPアクセス制御を実現するにはinetd(8)のlibwrapを設定する。設定ファイルはhosts.allow(5)hosts.deny(5)だ。

    はじめに/etc/hosts.denyを次のように書く。

    ALL: ALL

    そして必要に応じて/etc/hosts.allowを編集する。hosts.deny(5)のルールが優先されるので、hosts.deny(5)で全て遮断したあとはhosts.allow(5)に書いてあるルールだけが通るようになる。たとえばSSHを通したい場合つぎのようにする。

    sshd: ALL

    自宅や職場のローカルネットワークの場合、たとえばこのようにすれば十分だろう。

    sshd: LOCAL

    サーバを外部に公開している場合traceroute(8)でプロバイダのドメインを調べてそこからのみアクセスできるようにすればいい。

    traceroute(8)は次のように使う。

    # traceroute www.google.com

    出力の中ではauやKDDI、ソフトバンクのようなプロバイダの名前が確認できるはずだ。それを指定する。

    sshd: .au-net.ne.jp

    設定後は許可したネットワーク以外からはアクセスできないことを確認しておく。たとえ公開用のサーバで設定が失敗してSSHログインできなくても、Webのコンソールからいつでも操作できるので問題ない。

    ユーザの作成

    特権を持ったユーザで常にシステムにログインして作業し続けるのは一見快適かもしれない。が、操作ミスで消してはいけないファイルを誤って消す/編集してしまう危険を常に抱えることでもある。また一般的に、SSHであっても直接rootユーザでログインするのは避けられる傾向にある。

    そこで普段は特権を持たない一般ユーザを作り、それでログインしてなんらかの作業をおこなう。ソフトウェアのインストールや設定ファイルの編集などで権限が必要になったときだけsu(1)でrootユーザになるポリシーとする。

    ユーザはuseradd(8)を使う。作成予定のユーザ名をjohnとすると次のように実行する。NetBSDのuseradd(8)では-mオプションを付けないとホームディレクトリが作られないことに注意。

    # useradd -m john

    パスワードはpasswd(1)にユーザ名を渡して実行する。johnに設定するパスワードを2回尋ねられる。入力した文字は画面に印字されない(エコーされない)。

    # passwd john

    su(1)でrootユーザになるにはwheelグループにユーザを追加すればいい。/etc/groupを編集する。wheelの行にカンマ区切りでユーザ名を追記する。

    wheel:*:0:root,john

    pkgsrc(7)のインストール

    NetBSDでは第三者製ソフトウェアパッケージのビルドとインストールにpkgsrc(7)というビルドシステムを使う。

    pkgsrc(7)のtarballをダウンロードする。NetBSDのFTPサーバだけでなく、国内の大学や企業が運営しているFTPサーバからもダウンロードできるだろう。たとえばftp.iij.ad.jpやftp.jaist.ac.jpなどだ。ダウンロードしたtarballを/usrの下に展開するだけでNetBSDでのpkgsrc(7)のインストールは完了する。

    # ftp ftp://ftp.iij.ad.jp/pub/pkgsrc/stable/pkgsrc.tar.gz
    # tar zxf pkgsrc.tar.gz -C /usr
    # cd /usr/pkgsrc

    pkgsrc(7)はstable版とcurrent版の2種類選べる。stable版は3ヶ月に一度更新される安定版で、current版は不安定な開発版だ。しかし一番新しいFirefoxを使いたいときなど、最新のバージョンのソフトウェアを使いたい場合は後者を選ばざるを得ない。とりあえずここではstable版で話を進めるが、用途に応じてどちらを選ぶか考えてほしい。