サーバ版

インストール

Ubuntu18.04.3サーバー版

[ OK ] Reached target Cloud-init target.

みたいなところで止まってるなあと思って、エンターを押してみたら、 login:カーソルが出てくるので、ログインする。 一般ユーザーなので、sudo suでrootになる。 プロキシの設定とか、しなくて大丈夫かわからないが、まずは、MATEが入るかどうかやってみる。

# apt -y install ubuntu-mate-desktop 

ひとまずのインストール

sudo apt install apache2 fcitx-mozc fdclone mlocate net-tools nkf php7.4 vsftpd webalizer

rootログイン禁止、管理者ログインも禁止

#PermitRootLogin prohibit-password
の行を(1行コピーしてコメントはずして)
PermitRootLogin no
DenyUsers admin

に変更。adminは管理者ユーザー名

# sshd -t

で構文チェックし、何もエラーが表示されなければ、以下でsshdをリスタート。

# /etc/init.d/ssh restart

visudoエディターの変更(不採用)

# update-alternatives --config editor

sudoersを修正して、管理者アカウントからのsshログインを禁止しようと思ったのだけど、

admin  ALL=(ALL:ALL) ALL, !/usr/bin/ssh

みたいにやっても、adminでsshログインできてしまう。上記のsshd_configで禁止する方がよい。

タイムゾーンの変更

timedatectl set-timezone Asia/Tokyo

確認は、timedatectl

サービス管理

サービス一覧

 # systemctl list-unit-files -t service

Vine Linuxだとサービス管理がGUIで行えて便利だったのだけど、systemctlのGUIフロントエンドとかないものか。ちょっと検索した感じだとなさそうな...

バックアップ用ポータブルHDDの設定

まず、ボリューム名をそのポータブルHDDだとわかるような名前(iodataとか)に変える。 マウントされた状態で、メニュー→設定→ディスク→(左側に表示されるディスクのリストから、ポータブルHDDらしきものを選択) →(/media/kouzou/diskにマウント みたいに書かれていることでポータブルHDDであることを確認)→ 歯車2つの設定ボタンをクリック→「ファイルシステムを編集」→「ファイルシステムのラベルを変更」が出てきたら、 ラベルを「iodata」とか「buffalo」とか、そのポータブルHDDだと識別しやすい名前に変える。

ラベルを disk のままにしておくと、下の方法でバックアップを取ろうとすると、 /media/kouzou/disk の中にバックアップが取られてはいるのだが、 実は、これは内蔵ハードディスク内に作られた disk というディレクトリで、ポータブルHDDの方ではないという ことが起きたりする。そういうことが起きている場合、ポータブルHDDの方は /media/kouzou/disk1 の方にマウントされていたり ということが起きる。 よくわからないのだが、一番 最初にポータブルHDDが /media/kouzou/disk にマウントされたときだけ、 ポータブルHDDにバックアップが取られて、その後、マウントのやり直しをしたりしたときなのか、 ポータブルHDDは /media/kouzou/disk1 にマウントされるようになり、それを知らずに、 crontab とかで、/media/kouzou/disk にバックアップを取ると、そのタイミングでなのか、/media/kouzou/disk というディレクトリが 内蔵ハードディスク上に作られてしまい、以後、ポーターブルHDDではなく、内蔵HDD上の /media/kouzou/disk にバックアップが 取られているというようなことが起きていることにしばらく気づかないでいたりする。 そういう事態を避けるため、バックアップ目的のポータブルHDDのラベル名は、 自動的につけられる disk という名前から変更しておいた方が安全。

と思ったが、それでも十分ではなく、ポータブルHDDのラベル名をiodataとかにしておいても、 なにかの拍子に(ポータブルHDDを接続したまま再起動したとか?)、iodataの他にiodata1というディレクトリができてしまう。 iodataの方は、ポータブルHDDを最初につないだ際に/media/kouzou/内にマウントされたディレクトリで、たぶん、 ポータブルHDDをつなぎっぱなしで再起動すると、/media/kouzou内にiodataというディレクトリが残ったままで、 ポータブルHDDが新たに/media/kouzou/iodata1 の方にマウントされるのではないかと思う。 再起動の度に、ポータブルHDDを外して、/media/kouzou/iodata を削除してからポータブルHDDをつないで、 ポータブルHDDを /media/kouzou/iodata にマウントさせるというのは手間なので、 crontabで指定するバックアップ先を /media/kouzou/iodata1 の方にしてしまうという手もある。 外付けHDDにバックアップを取っている人たちは、どうやってるのやら?

いや、それでもだめみたい。今、ubuntu20とubuntu22それぞれで、ポータブルHDDをつないだままで再起動してみたが、 今回は、iodata1みたいなディレクトリは作られていない。うーん、さっきは一体なにをしたタイミングで iodata1ができてしまったのだろう。 再起動の度に、もしiodata1ができてたら、もう1つあるであろう(crontabによるバックアップ前であれば中身は空の)iodataの方を消して、 ポータブルHDDをマウントし直して、iodataでマウントされるようにするとかしなければならないだろうか。

fstabで固定マウント

自動マウントにしていると、なにかのはずみ?でポータブルHDDのマウントポイントが上のように変わってしまい、 crontabでの自動バックアップ先のディレクトリが違うところになってしまうので、バックアップ用のポータブルHDDは fstabで固定マウントするのがいいのではないかと思う。/etc/fstab の中に、以下のように書いておいたらどうだろうか。 UUIDの確認は、メニュー→設定→ディスク→ポータブルHDDらしきディスクを選択し、UUIDのところをコピペ。

UUID="abcd1-234efg-h56789i-jklmn01234"   /media/kouzou/iodata     ext4    defaults        0 0

crontab

crontabがまだ作られてない状態で

#crontab -e

と打つと、

no crontab for root - using an empty one
Select an editor.  To change later, run 'select-editor'.
 1. /bin/nano        <---- easiest
 2. /usr/bin/vim.basic
 3. /usr/bin/vim.tiny
 4. /bin/ed

と表示されるので2辺りを選んで、viで以下のように編集

00 00 * * * webalizer
10 00 * * * updatedb
20 00 * * * apt-get update && apt-get -y upgrade >/home/admin/apt.log
50 00 * * * rsync -auv /var/www /media/admin/iodata/ > /home/admin/www.log
20 01 * * * rsync -auv /home /media/admin/iodata/ > /home/admin/home.log
20 02 * * * clamscan –i –r –max-filesize=4095M –max-scansize=4095M –cross-fs=no $(mount | egrep -v 'type +(sysfs|proc)' | cut -d ' ' -f 3) > /home/admin/clam.log
50 02 1 * * clamscan -i -r / > /home/admin/clamfull.log

FTPサーバー

FTPサーバーはftpdではなく、vsftpdをインストール。 ftpdも使えるが、systemctl list-unit-files -t serviceをやってもサービス一覧に現れないので、サービス管理の方法が不明。vsftpdなら、サービス一覧に現れる。

gftpでアップロードできるようにする

vsftpdはデフォールトでは書き込み禁止になっているので、/etc/vsftpd.conf の以下のコメントを外して有効にする

write_enable=YES

そして、service vsftpd restart

apache2

以下の2行は追加しなくてもいいかも(KeepAlive Onは既にあるかも)

ServerTokens Prod
KeepAlive On
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">

ScriptAlias /cgi-bin/ /var/www/cgi-bin/
<Directory "/var/www/cgi-bin">

に。

AddHandler skin/css  css
AddHandler image/png png 

https

# a2enmod ssl
# a2ensite default-ssl
# service apache2 restart
これを実行することでmods-availableへのシンボリックリンクがmods-enabledに置かれ、
sites-availableへのシンボリックリンクがsites-enabledに置かれることになる。ただし、cgi.loadに関してはリンクが
生成されないので、上記のapache2の手動でリンクを貼る作業が必要。

そもそもk2とか外部に公開されてないサーバーでサーバー証明書を取れないのかもしれないが、 まずは、/var/www/html/.well-known/acme-challenge のディレクトリを作成してから、

# certbot certonly --webroot -w /var/www/html -d k2.hoge.jp

を実行。すると、以下のエラー

Failed authorization procedure. k2.hoge.jp (http-01): urn:acme:error:connection :: The server could not connect to the client to verify the domain :: Fetching http://k2.hoge.jp/.well-known/acme-challenge/dE9RRQ6FNEVCiUiKUWGPJhnI3KEoAScLREcWBUBwGQk: Timeout during connect (likely firewall problem)
IMPORTANT NOTES:
- The following errors were reported by the server:
  Domain: k2.hoge.jp
  Type:   connection
  Detail: Fetching
  http://k2.hoge.jp/.well-known/acme-challenge/dE9RRQ6FNEVCiUiKUWGPJhnI3KEoAScLREcWBUBwGQk:
  Timeout during connect (likely firewall problem)
  To fix these errors, please make sure that your domain name was
  entered correctly and the DNS A/AAAA record(s) for that domain
  contain(s) the right IP address. Additionally, please check that
  your computer has a publicly routable IP address and that no
  firewalls are preventing the server from communicating with the
  client. If you're using the webroot plugin, you should also verify
  that you are serving files from the webroot path you provided.

うまくいった場合は、

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
  /etc/letsencrypt/live/hogehoge.jp/fullchain.pem
  Your key file has been saved at:
  /etc/letsencrypt/live/hogehoge.jp/privkey.pem
  Your cert will expire on 2020-04-18. To obtain a new or tweaked
  version of this certificate in the future, simply run certbot
  again. To non-interactively renew *all* of your certificates, run
  "certbot renew"
- If you like Certbot, please consider supporting our work by:
  Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
  Donating to EFF:                    https://eff.org/donate-le

みたいに出る。

このログをコピペして、encrypt.logとかに保存しておく。 /etc/apache2/sites-availableに移動し、default-ssl.confの中の

SSLCertificateFile	/etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

の部分を、encrypt.logを参照しながら、

SSLCertificateFile	/etc/letsencrypt/live/hogehoge.jp/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/hogehoge.jp/privkey.pem

みたいに書き換えて、service apache2 restart

これで、/var/www/html の中も/var/www/cgi-bin の中も /home/hoge/public_html の中もhttps://でアクセスできるよう

# certbot renew

毎月1日の0時0分に実行するなら、crontabに以下のように書いておく

00 00 1 * * certbot renew

サーバー移行に伴うLet's Encrypt証明書の移行

httpsへのリダイレクト

httpのページへのアクセスをhttpsに飛ばしたい時は、

a2enmod rewrite
a2enmod headers
service apache2 restart

をやって、mod_rewirteとmod_headersを使えるようにしておいてから、 飛ばしたいディレクトリの.htaccessに以下を追加。

<ifModule mod_rewrite.c>
   RewriteEngine On
   RewriteCond %{HTTPS} off
   RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</ifModule>
<ifModule mod_headers.c>
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</ifModule>

Let's Encryptのルート証明書のうち、DST Root X3が2021/9/30に期限切れ

Let's Encrypt では、ISRG Root X1(Let's Encrypt)とDST Root X3(Identrust社)の2つのルート証明書を使っていたが、このうち、DST Root X3の方が9/30に期限切れになるそうだ。 でも、9/30以降もAndoroid7.0以前の端末でもLet's Encryptを引き続き使えることになったのかな。今ひとつわかりにくいが、9/30以降にAndroid7.0からアクセスしてみよう。

mathjaxの修正も必要

define('MATHJAX_URL', 'https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML');

この修正をしないと、httpからは数式表示できるが、httpsからは数式表示できなくなる。 この修正をすると、httpからでもhttpsからでも数式表示できる(ブラウザーにもよるかもしれないが)

pukiwiki

まず、synapticからphpをインストールすると、最新バージョンのphp7.2がインストールされる。 PukiWiki1.5.3の場合は、php7.4をインストールする。

左のメニューを上寄せで表示にするには、
/var/www/cgi-bin/pukiwiki/skin/pukiwiki.skin.phpの160行目辺りの
<td class="menubar">
を
<td class="menubar" valign="top">
に変更。PukiWiki1.5.3の場合は、デフォールトで上寄せになってるので不要。

mathjax.inc.phpのインストール

define('MATHJAX_URL', 'https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML');

この修正をしないと、httpからは数式表示できるが、httpsからは数式表示できなくなる。 この修正をすると、httpからでもhttpsからでも数式表示できる(ブラウザーにもよるかもしれないが)

編集制限

$auth_users = array(
       // Username => password
       'hoge' => '{x-php-md5}329435e5e66be809a656af105f42401e',
);   
$edit_auth_pages = array(
       // Regex                   Username
       '##'    => 'hoge',
);

メニューバーが表示されない

上記で、edit_auth_pagesではなく、間違って、read_auth_pages のところに、

$read_auth_pages = array(
 // Regex                   Username
       '##'    => 'hoge',
);

と設定してしまうと、左側のメニューバーが表示されなくなり、

#menu(): MenuBar is not readable

と表示される。

adminパスワード

凍結解除やadminしか編集できないページを編集するパスワードは、pukiwiki.ini.phpの

$adminpass = '{x-php-md5}!';

$adminpass = 'kanrisyanopasuwaado';

みたいに書き換える。

スタイルや画像バナーが読み込まれない

上記のapache2の設定のとこを参照して、/etc/apache2/conf-available/serve-cgi-bin.confを書き換える。

検索すると文字化け

根本解決ではないのだが、対処療法ということであれば、 libの中のhtml.phpの以下の箇所に//をつけてコメントアウトする。

//$body  = preg_replace_callback($whole_pattern, '_decorate_Nth_word', $body);

根本解決のためには、php.iniを編集してmbstringを有効にするとからしいのだけど、どうも、この方法がうまくいかないので。

pukiwikiの移転

バージョンが変わらないなら、/var/www/cgi-bin/にそのままコピー。 バージョンが変わっている場合は、まず新しいバージョンのpukiwikiをインストールしてから、attach, backup, cache, counter, diff, wikiのディレクトリを上書き移動。

pukiwiki移転後、メニューバーが下に表示される

サーバー移転に伴って、pukiwiki1.5.2から1.5.3に移行した場合、ブラウザーに古いpukiwikiを閲覧した際のcssとかのキャッシュが残っていると、メニューバーが左側に表示されず、下に表示されることがある。この場合は、ブラウザーの履歴を削除して、アクセスし直すとか、shftを押しながら更新とかをやっているうちに直るのでは。

スマホからアクセスするとメニューバーが下に表示される。

あと、1.5.3のpukiwiki.cssファイルは、/* Mobile-friendly Responsive layout */から下に、スマホ等のモバイル機器用のスタイルが書かれているので、スマホからアクセスすると、メニューバーが下に表示されるようになった。スマホのブラウザーの設定で、「PC版サイト」みたいなのにチェックを入れると、メニューバーが左に表示される。

スマホでも、デフォールトで左側にメニューバーが表示された方がいい場合は、 pukiwiki.cssの中の /* Mobile-friendly Responsive layout */ から下の @media print { より上の部分を削除する。

pukiwiki移転後、編集パスワードを設定して編集すると「編集できません」となる

pukiwiki.ini.phpの設定は間違ってなくても、旧サーバーにアクセスした際のキャッシュが残っていると、そうなることがあるみたい。ひとまず、履歴を削除してみる。

ubuntu20から22にアップグレード後にpukiwikiというかphpが動かない

apache2は機能していて、htmlも表示され、.htaccessのパスワードも機能しているが、pukiwikiにアクセスすると、以下のエラー。 アンケート等のcgiプログラムは機能していて、phpだけが動かない模様。 php8.1をインストールしても同様。

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at webmaster@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.

/var/log/apache2/error.log を見ると、

 [cgi:error] [pid 1706] [client 158.215.134.42:58688] AH01215: (13)Permission denied: exec of '/var/www/cgi-bin/pukiwiki/index.php' failed: /var/www/cgi-bin/pukiwiki/index.php

phpが動作しているかどうかを確認

pukiwikiが上記のエラーで動かないときは、まずは、/cgi-bin/内に以下のようなtest.phpとかを置いて、 それにアクセスし、php自体が動いているかどうかを確認。上のエラーが出れば、php自体が動いてないということ。test.phpは、動作確認をしたら削除しておくこと。

<?php
phpinfo();
?>

ちゃんと動作していれば、以下のようなリストがテーブルタグで表示される。

PHP Version 7.4.3-4ubuntu2.23
System 	Linux str 5.4.0-193-generic #213-Ubuntu SMP Fri Aug 2 19:14:16 UTC 2024 x86_64
Build Date 	Jun 17 2024 13:22:20
Server API 	Apache 2.0 Handler 

ubuntu20からubuntu22にアップグレードした場合は、php7.4のモジュールを無効にしてphp8.1のモジュールを有効にしなければならない。

a2dismod php7.4
a2enmod php8.1
systemctl restart apache2.service

これで、phpが動くようになり、pukiwikiも動くようになった。

enq.cgi

結城さんのアンケートcgiのenq.cgiを使う場合は、 enq.cgi内のjcode.plのパスの箇所を以下のように絶対パスに修正。

require "$jcodelib";

require "/var/www/cgi-bin/hoge/jcode.pl";

みたいに。 この辺 から新しいjcode.plを持ってきて置き換える。

IPアドレスの変更

不具合

ログアウトした状態でサーバーを立ち上げておくと20分後に勝手にサスペンドしてしまう

/etc/gdm3/greeter.dconf-defaults の以下の2行をコメントアウトして、時間を0にする。

# sleep-inactive-ac-timeout=1200
# sleep-inactive-battery-timeout=1200
sleep-inactive-ac-timeout=0
sleep-inactive-battery-timeout=0

アップデートしたら有線LANにつながらなくなった

どうもそうではなくて、有線LANは生きているのだけど、 画面上部メニュー右側のネットワークアイコンから有線接続の設定を参照したり、 編集したりができなくなったというだけのような。 というか、上記のようにIPを設定していたんだとすると、もともと、ここは使えてなかったのかな。 つまり、サーバー版にMATEをインストールしたマシンでは、右上のネットワークアイコンは、↑↓にはならずに扇型のままだけど、それでネットワークにはつながっているということ。

ubuntu22.04 LTSデスクトップ版とサーバー版の違い

https://forums.ubuntulinux.jp/viewtopic.php?id=4250

https://forums.ubuntulinux.jp/viewtopic.php?id=4461

セキュリティ対策

クリックジャッキング対策

service apache2 restartするとおそらく、以下のエラーが出て、

Job for apache2.service failed because the control process exited with error code.
See "systemctl status apache2.service" and "journalctl -xe" for details.

systemctl status apache2.service をやると、

Invalid command 'Header', perhaps misspelled or defined by a module not included in the server configuration

みたいに出ると思う。その場合は、まず、a2enmod headersをやってから、service apache2 restart

HSTSの設定

a2enmod headersをやってから.htaccessに以下を追加。上記のリダイレクト参照。

<ifModule mod_headers.c>
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</ifModule>

確認方法:まず、.htaccessでリダイレクトされないページが、httpのまま表示されることを確認する。 リダイレクトされるページにhttpでアクセスして、httpsに飛ばされることを確認した後、その端末からさっきの リダイレクトされないページにアクセスすると、httpsに飛ばされるようになっているかどうかで確認。

秋田大学のサーバ証明書の取り方

.csrの作成

.tsvの作成

サーバ証明書のダウンロード

証明書のインストール

サーバー証明書の更新

clamAV

ClamAVのインストール

sudo apt install clamav clamav-daemon libclamunrar9

スキャン

sudo clamscan -r 

詳細設定

DNSの変更


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2025-01-19 (日) 13:30:50