MENU of Ubuntu Linux

私のメモです。参考になればいいですが、間違っていたらごめんなさい。18.04LTSのクリーンインストールのメモです。@2018.10.11

戯れ言

--------------------------------------------------------




























Ubuntu Linux

8月に18.04LTSにアップグレードしたのもつかの間、2018年10月4日にHDDが完全に逝ってしまい、急遽HDD「ST2000LX001」を購入して18.04LTSをmini.isoからクリーンインストールしました。

BIOSの設定変更と固定IPの注意点

18.04LTSのインストーラは、DN2820FYKHのHDDをBIOSの設定に依らずにUEFIと認識するようです。そのため、BIOSでLegacyなHDDを選択し、HDDに/をマウントするパーティションを作成してインストールすると、インストール後に起動できませんでした。また、ネットワークに接続してインストールをする際、固定IPの設定ができるのは「expert install」を選択した時だけでした。他のモード(rescueモード含む)を選択した場合、IPアドレスをDHCPで取得できないとaptサーバに接続できず、先に進めませんでした。

試行錯誤して、以下の設定等で無事インストールできるようになりました。

あとは特に問題なく進めることができました。

Back to MENU

文字コードの変更

インストール後、18.04LTSのアップグレードの時と同様に、ja_JP.UTP-8がLANGに設定されていると、do-release-upgradeでのメッセージが全て文字化けして読めません。そこで、LANGコマンドで文字コードを「C」に設定しておきます。

# LANG=C

Back to MENU

sshの設定

PuTTYを使ってWindowマシンから設定できるよう、最初にsshの設定を行いました。apt-get install openssh-serverでsshサーバをインストールした後、以下の設定を/etc/sshd_configファイルで行いました。

Protocol 2
PermitRootLogin no
RSAAuthentication no
PasswordAuthentication no
ChallengeResponseAuthentication yes
X11Forwarding no
UsePAM yes
# プロトコルは2のみ許可
# rootでのログインは許可しない
# DSAを使用するためRSAはプロトコル1のみ
# パスワード認証によるログインは拒否
# チャレンジ・レスポンス認証は使用:PuTTYで必要
# X11の転送はしない
# チャレンジ・レスポンス認証:PuTTYで必要

チャレンジレスポンス関係の2つの項目は、14.04LTSの際は「no」で動いていましたが、18.04LTSでは「yes」しないとPuTTYが公開キーを要求されてしまい、接続できませんでした

上記の設定後、/etc/init.d/ssh restartでsshdを再起動して設定を反映させます。また、PuTTYで作成したssh2用の公開鍵をユーザの.sshディレクトリ(/home/username/.ssh)にauthorized_keys2という名前でコピーし、パーミッションを400に設定します。これでPuTTYを使ってWindowsからログインできるようになります。

実際のsshd_configファイルはこちらになります。

Back to MENU

iptablesの設定

18.04LTSでは、IPアドレスなどの設定は/etc/netplanの下にある×××.yamlというファイルで行い、これまでのように/etc/network/interfacesでは設定しないようになっていました。iptablesの設定もそこでできるようですが、扱いやすいifupdwonパッケージを使うことにしました。

iptablesを設定し、それを起動時に実行するにはiptablesパッケージとifupdownパッケージが必要です。apt-get install iptables ifupdownでインストールします。

ifupdownをインストールすると、/etc/networkの下に if-pre-up.d というディレクトリが作成されます。このディレクトリ内にあるスクリプトファイルは、ネットワークインターフェースが有効になる際に実行されます。そこで、set_iptablesというファイルにiptablesのコマンドを記載しておきます。注意点は、ピリオドを含むファイルは実行されないことです。set_iptables.shなどと名前を付けると実行されなくなってしまいます。

設定した内容は次の通りです。ここの「サーバ」とはubuntuをインストールしたNUCのことです。

実際のinterfaceファイルはこちらをご覧下さい。また、UbuntuのiptablesコマンドはDNS逆引きオプションがオンになっています。iptalbes -Lで設定を確認する際は、iptables -nLとDNS逆引きをオフにすると表示が速いです。

なお、以前の設定をコピーして使おうとしたら、ネットワークインターフェース名(iオプションで指定)が変わっているのに気づかず、しばらく悩んでしまいました(^_^;;

Back to MENU

Sambaの設定

Sambaサーバを使うために、まずはapt-get install sambaで必要なパッケージをインストールします。Sambaの設定は14.04LTS設定ファイルをそのまま使うことできました。

useraddコマンドでSambaユーザを追加することを忘れないように。

Back to MENU

Apache2.4の設定

1. apache2.confの設定

14.04LTSと同じように以下の設定をしました。他は元のファイルの記述から変更していません。

・ServerRoot "/etc/apache2"
・# Mutex file
・KeepAliveTimeout 15
・ServerTokens Prod
# Apache2の設定ファイルがあるディレクトリを指定
# lockfileはトラブルの元のようなので使用せず
# 元のファイルは5に設定されています。ちょっと長めに
# SeverTokenは製品名のみを返す

14.04LTSではその前の設定をコピーして使っていたので見落としましたが、デフォルトのapache2.confファイルではDirectoryディレクティブのOptionsに「Index」が含まれものがあります。「Index」は、そのDirectoryにindex.htmlなどのインデックスファイルがない場合、ディレクトリをリストするというオプションです。余計なファイル見える可能性があるので削除しています。また、これを一度削除しないと、なぜかトップページがapache2をインストールした直後のページになってしまいました。

2. モジュールの設定

読み込むモジュールの設定を変えたい場合、/etc/apache2/mods-available以下にあるモジュール名.confファイルを編集します。たとえば、Webページを表示する際の言語の優先順位で日本語を最優先にしたい場合、negotiationモジュールの設定ファイルnegotiation.confで、LanguagePriorityを以下のように編集します。

修正前:LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv tr zh-CN zh-TW
修正後:LanguagePriority ja en ca cs da de el eo es et fr he hr it ko ltz nl nn no pl pt pt-BR ru sv tr zh-CN zh-TW

僕の環境では、SSI(Serve Side Include)用としてindex.shtmlをインデックスファイルに使っていることがあるため、dir.confにindex.shtmlを追加しました。

修正前:DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
修正後:DirectoryIndex index.shtml index.html index.cgi index.pl index.php index.xhtml index.htm

僕の環境で追加が必要なモジュールは、SSIに必要なIncludeモジュール、cgiに必要なcgidモジュールでした。また、server-statusを表示しないため、statusモジュールを外しました(a2dismod status)。

モジュールを読み込む際は、a2enmod モジュール名 で読み込みます。このコマンドを実行すると、/etc/apache2/mods-enabled以下に/etc/apache2/mods-availableへのシンボリックリンクが作成され、apache2を再起動してa2enmodで読み込むように設定したモジュールが読み込まれます。a2enmodコマンド、a2dismodコマンドは、このシンボリックを作成、削除するコマンドでしかないため、モジュールの設定を変えたらapache2を再起動するまで設定は変更されません。

SSI(Serve Side Include)に必要なIncludeモジュール、cgiに必要なcgidモジュールを読み込んでからapache2を再起動するまでの手順は次のようになります。。

# a2enmod include      ### Includeモジュールの読み込み
# a2enmod cgid        ### cgidモジュールの読み込み
# service apache2 restart ### apache2の再起動

ちなみに、読み込み可能なモジュールは、/etc/apache2/mods-available以下にあります。どのようなモジュールが読み込まれているかは、apache2ctl -l、apache2ctl -M で確認できます。さらに、サーバの状態はapache2ctl -V で表示されます。

3. siteの設定

apache2の設定を終えたら、siteの設定を行います。siteの設定は、000-default.confを編集する、或いは/etc/apache2/site-available以下に「ファイル名.conf」というファイルを作成して行います(.confを付けないとエラーになるという噂もあり)。作成したサイトを有効にするには、a2ensite 作成したファイル名 を実行します。これもa2enmod同様、/etc/apache2/sites-availableにシンボリックリンクを作成するだけです。そのため、設定変更を有効にするにはapache2を再起動する必要があります。

僕のウェブページのように、トップページに設定したカウンタをSSIで動かす場合、/var/www/htmlディレクトリに次のように記述します。SSI用にOptionにIncludesを入れておく必要があります。また、index.htmlファイルがない場合、ディレクトリの一覧を表示しないようIndexesオプションを外しています。

  <Directory /var/www/html>
     Options Includes FollowSymLinks
     Order allow,deny
     Allow from all
  </Directory>

4. cgiの設定

cgiを動かす場合、/etc/apache2/conf-availableにあるserve-cgi-bin.confを修正して使います。以下の例は、serve-cgi-bin.confでcgiのディレクトリを/var/www/cgi-binに変更しただけの例です。

<IfModule mod_alias.c>
    <IfModule mod_cgi.c>
        Define ENABLE_USR_LIB_CGI_BIN
    </IfModule>

    <IfModule mod_cgid.c>
        Define ENABLE_USR_LIB_CGI_BIN
    </IfModule>

    <IfDefine ENABLE_USR_LIB_CGI_BIN>
        ScriptAlias /cgi-bin/ /var/www/cgi-bin/
        <Directory "/var/www/cgi-bin">
            AllowOverride None
            Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
            Require all granted
        </Directory>
    </IfDefine>
</IfModule>

serve-cgi-bin.confを有効にするために、site設定ファイルに以下の1行を加えます。

Include conf-available/serve-cgi-bin.conf

また、cgiのモジュールを有効にするため、次のコマンドでcgidモジュールを有効にします。

# a2enmod cgid

5. 認証ページの設定

認証が必要なディレクトリは、次のようにディレクティブを記述します。この例は、/var/www/html/secret以下のディレクトリに、Digest認証をパスする全ての人(valid-user)にアクセスを認める設定です。ユーザIDとパスワードのファイルはAuthUserFileに記述されたファイル(/etc/apache2/.htdigest)となります。

<Directory /var/www/html/secret>
    AuthName "Restricted Space"
    AuthType Digest
    AuthDigestDomain /secret/
    AuthUserFile /etc/apache2/.htdigest
    require valid-user
</Directory>

次に、パスワードファイルを作成します。たとえば、fishers fellowというユーザIDを作成する場合、次のように入力します。

# htdigest -c /etc/apache2/.htdigest "Restricted Space" "fishers fellow"
# Adding password for fishers fellow in realm Restricted Space.
# New password:{パスワードを入力}
# Re-type new password:{パスワードを再入力}

パスワードファイルにユーザIDとパスワードを追加する場合、-cオプションが不要です。たとえば、fishers guestというユーザIDを追加する場合、次のように入力します。

# htdigest /etc/apache2/.htdigest "Restricted Space" "fishers guest"
# Adding password for fishers guest in realm Restricted Space.
# New password:{パスワードを入力}
# Re-type new password:{パスワードを再入力}

上記でDigest認証の設定が終わりました。最後にDigest認証が可能になるように、auth_digestモジュールを有効にしてから、apache2を再起動します。

# a2enmod auth_digest
# service apache2 restart

ちなみに、auth_digestモジュールを有効にする前にapache2を再起動しようとするとエラーになります。

Back to MENU

Let’s encryptの導入

Office YUAiさんのブログが参考になります。僕の環境では、iptablesでポート443番を開けてからLet’s encryptの導入し、apacheの設定ファイルを修正しました。

Back to MENU

Namazuの導入

ウェブページに全文検索機能Namazuを設置しました。

  1. パッケージのインストール
  2. Ubuntu 18.04LTSでは、「namazu2」というパッケージになります。また、インデックスを作成するのに必要な「namazu2-index-tools」、「libnkf-perl」、「libtext-kakasi-perl」もインストールします。

    # sudo apt-get install namazu2 namazu2-index-tools libnkf-perl libtext-kakasi-perl


  3. cgiとテンプレートのコピー
  4. ウェブサーバで使う/usr/lib/cgi-bin/namazu.cgiを/var/www/cgi-binにコピーし、パーミッションを読み取りと実行、所有者とグループをwww-dataに変更します。

    # sudo cp /usr/lib/cgi-bin/namazu.cgi /var/www/cgi-bin
    # sudo chmod 500 /var/www/cgi-bin/namazu.cgi
    # sudo chown www-data /var/www/cgi-bin/namazu.cgi
    # sudo chgrp www-data /var/www/cgi-bin/namazu.cgi

    namazuが使うテンプレートもコピーしておきます。コピーしたテンプレートを自分のウェブページに合わせてカスタマイズすると良いです。パーミッションは読み取りにします。

    # sudo cp /usr/share/namazu/template/NMZ.*.ja /var/www/cgi-bin
    # sudo chmod 400 /var/www/cgi-bin/NMZ.*.ja
    # sudo chown www-data /var/www/cgi-bin/NMZ.*.ja
    # sudo chgrp www-data /var/www/cgi-bin/NMZ.*.ja


  5. cgiの設定ファイルの作成
  6. namazuのcgiは同じディレクトリにある.namazurcを優先的に読みに行きます。そこで、設定ファイル/etc/namazu/namazurcをnamazu.cgiのあるディレクトに.namazurcとしてコピーして使います。

    # sudo cp /etc/namazu/namazurc /var/www/cgi-bin/.namazurc
    # sudo chown www-data /var/www/cgi-bin/.namazurc
    # sudo chgrp www-data /var/www/cgi-bin/.namazurc


  7. cgiの設定ファイルの編集
  8. 設定ファイル.namazurcのコメントアウトを外して、自分の環境に合わせて設定します。以下は僕の環境の例で、#以降は説明で、実際の設定ファイルには記述しません。

    Index  /var/www/cgi-bin/nmz  # インデックスファイル置き場
    Template  /var/www/cgi-bin  # テンプレートファイルNMZ.*.ja置き場
    Replace  /var/www/html/ https://fishers.mydns.jp/  # ファイルパスをURLへ変換
    Lang  ja  # 日本語で表示
    Charset  "ja_JP.ecujp" "ECU-JP"  # 文字セットはEUC-JPに

    編集を終えたらパーミッションは読み取りにします。また、インデックスや結果の表示などで使う文字セットはここで設定したものに合わせます。namazuでは文字セットがECU-JPを前提にしている節があるので、それに従ってECU-JPにしました。

    # sudo chmod 400 /var/www/cgi-bin/.namazurc


  9. ja_JP.ecujp文字セットのインストール
  10. インデックス作成の前に、Ubuntu18.04LTSで使用できる文字セットにja_JP.ecujpが入っているかを「locale -a」で確認します。僕の環境で日本語の文字セットはja_JP.utf8しかありませんでした。そこで、次のコマンドで使用できる文字セットを確認し、EUC-JPをインストールします。

    # sudo cat /usr/share/i18n/SUPPORTED
    # sudo locale-gen ja_JP.EUC-JP


  11. インデックスの作成
  12. 次にインデックスを作成します。デフォルトでは、/usr/share/namazu/filter/hnf.plとmp3ファイルのIDタグを検索する/usr/share/namazu/filter/hnf.pl というnamazuのフィルタがエラーを起こすので、このファイルを名前を変更して無効化します。

    # sudo mv /usr/share/namazu/filter/hnf.pl /usr/share/namazu/filter/hnf.pl_back
    # sudo mv /usr/share/namazu/filter/mp3.pl /usr/share/namazu/filter/mp3.pl_back

    インデックスの作成はmknmzコマンドで行います。-Lで文字セットを、-Oで出力先を指定でき、そのあとにインデックスを作成するディレクトリを指定すると、そのディレクトリ以下をインデックス化します。下の例では、animalディレクトリ以下が/var/www/cgi-bin/nmz以下にインデックス化されます。

    # sudo mknmz -L ja_JP.eucjp -O /var/www/cgi-bin/nmz /var/www/html/animal/

    複数のディレクトリを1つのインデックスにする場合、ディレクトリをスペースで区切って指定します。

    # sudo mknmz -L ja_JP.eucjp -O /var/www/cgi-bin/nmz /var/www/html/animal/ /var/www/html/bird/

    注意点として、インデックスは追加だけされてるようです。自宅サーバ程度の規模であれば、定期的にインデックスファイルを全て削除してからインデックスを作成した方が良いかも知れません。

  13. 入力フォームの追加
  14. ウェブページで検索が行えるよう、検索機能を付けるページに次の行を追加します。

    
    <form action="https://fishers.mydns.jp/cgi-bin/namazu.cgi" method="get">
    <input type="text" name="query" size="50">
    <input type="submit" name="submit" value="K's Pageの検索">
    <input type="hidden" name="whence" value="0">
    	

Back to MENU

MyDNSとウェブページの更新の設定

ウェブページの更新はウィンドウの共有フォルダをこのサーバにマウントして行っています。Windowsの共有フォルダをLinuxにマウントするため、cifs-utilsをインストールしました。また、後述のMyDNSの更新のためにwgetもインストールしました。

# sudo apt-get install cifs-utils wget

これで次のコマンドで192.168.0.1にある共有フォルダ「share」を/mntにマウントできるようになります。

# sudo mount -t cifs -o username=WindowsUserName //192.168.0.1/share /mnt

コマンド入力後、WindowsUserNameのパスワードを尋ねられます。正しいパスワードを入力するとマウントされます。

最後にMyDNSの更新を設定します。MyDNSには最低でも8日に一度MyDSNのサイトにアクセスして、ウェブサーバのIPアドレスを通知する必要があります。これはcronに次の行を追加することで対応できます。

# sudo crontab -e

最下行に以下を追記します。

58 23 * * * wget -q -o /dev/null http://MyDNS_ID:ID_Password@ipv4.mydns.jp/login.html

上の設定は、毎日23:58にwgetを使ってhttp://ipv4.mydns.jp/login.htmlにユーザMyDNS_ID、パスワードID_Passwordでログインするという設定です。

Back to MENU

自動でセキュリティアップデート

自動でセキュリティのみのアップデートを行うには、unattended-upgradesパッケージをインストールします。

# sudo apt-get install unattended-upgrades

これで/etc/apt/apt.confの下に20auto-upgrades、50unattended-upgradesが作成されます。50unattended-upgradesにアップデートの対象とするものが記載されており、デフォルトはセキュリティアップデートになっています。

Back to MENU