mieki256's diary



2021/07/15(木) [n年前の日記]

#1 [linux][debian] 自宅サーバ代替機のセットアップ中

_昨日の作業 に引き続き、自宅サーバ代替機(キューブPCケース機、Intel D945GSEJT使用)のセットアップ中。自宅サーバ機の環境は、Debian Linux 10 buster 32bit版。

旧自宅サーバ機のHDDから、ファイルをある程度転送できたので、代替機上で root になって、各ユーザのホームディレクトリ内に、バックアップしたディレクトリ群・ファイル群を移動。

余談。Intel D945GSEJT というM/Bには、ネットブック用のCPU、Intel Atom N270 がオンボードで載っているのだけど、このCPUは64bitに非対応なので、64bit版OSは動かせない。Ubuntu や Red hat系は32bit版を切り捨てたので、今のところ 32bit版もサポートしている Debian Linux を使って動かすしかない。

一応、Debian をインストールした際の作業メモのリンクも残しておく。

_D945GSEJT機をメンテナンス
_D945GSEJT機のDebianを設定中
_D945GSEJT機のDebianを設定中その2
_D945GSEJT機のDebianを設定中その3

隠しファイルも移動の対象にしたい。 :

mv * /home/hoge でディレクトリやファイルの移動をしようとすると、隠しファイル(先頭が「.」になっているファイル)が移動できない。隠しファイルも対象にしたい。

ググった感じでは、shopt を使って、「*」の動作を変えればいいらしい。
  • shopt -s dotglob : *の指定時、隠しファイルも対象にする。
  • shopt -u dotglob : *の指定時、隠しファイルは対象にしない。

_mv等のコマンドでワイルドカード指定の際、隠しファイルを対象にする - Tdomy
_[Unix] mvなどのコマンドで”.”の付いた隠しファイルも一緒に移動させる方法 | 1 Day 1 Tip(s)

findでファイルを探す。 :

特定の所有者になっているファイルを探したい。find を使う。
find . -user root

逆に、特定の所有者になっていないファイルを探したい場合は以下。
find . ! -user root

_所有者を指定してファイルを探す方法 | LFI
_findコマンドの使い方 - Qiita

ディレクトリ or ファイルのみパーミッションを変更。 :

ディレクトリのみ、あるいは、ファイルのみ、パーミッションを変更。
find /path/to/dir -type d -exec chmod 755 {} +
find /path/to/dir -type f -exec chmod 644 {} +

_ファイルやディレクトリのパーミッションを一括で置換したい - Qiita

特定の所有者のファイルだけ所有者を変更。 :

特定の所有者のファイルだけを対象にして、所有者を変更したい。chown で行う。
sudo chown -R --from=UserName NewUserName:NewGroupName *
sudo chown -R --from=UserName:GroupName NewUserName:NewGroupName *
-R で再帰的に子ディレクトリ以下も処理。--from=xxx:xxx で、指定した所有者のファイルを対象にする。

_ある特定の所有者ファイルを別ユーザへ変更する - Qiita

特定ユーザはログインできないように指定したけど元に戻した。 :

特定のユーザがssh等でログインできないようにする際、shell設定に nologin を指定する時があるけれど、Debian の場合、nologin はどこにあるのだろう…。探したら以下の2つがあるっぽいけど…。
/sbin/nologin
/usr/sbin/nologin

/etc/passwd を眺めた感じでは、/usr/sbin/nologin が記述されてる場合が多いように見える。

つまり、以下で、ユーザがログインできない状態にできる。
usermod -s /usr/sbin/nologin USERNAME

しかし、この設定をしてしまうと、ftp を使って該当ユーザのホームディレクトリにアクセスできなくなった。vsftpd がそのあたり利用しているのだろうか。仕方ないので、フツーに /bin/bash を設定しておくことにした。
usermod -s /bin/bash USERNAME

_【 usermod 】コマンド――ユーザーアカウントの情報を変更する:Linux基本コマンドTips(73) - @IT
_ユーザーのログインシェル: nologin と false 指定時の違い - 寒月記

locateを使える状態にした。 :

Apache2の設定開始。 :

Webサーバ Apache2 の設定を始めた。作業が多いので別記事に分けよう…。

#2 [linux][debian] Debian buster + Apache2 の設定作業

自宅サーバ代替機(キューブPCケース機、Intel D945GSEJT使用)、Debian Linux 10 buster 32bit版 + Apache2 2.4.38-3+deb10u5 で、Apache2 の設定を始めた。

Apache2とPerlをインストール。 :

Apache2 と Perl をインストール。
apt install apache2
apt install perl

初期htmlフォルダは /var/www/html/。デフォルトでは、http://hoge/ にアクセスすると、/var/www/html/index.html が表示される。

設定ファイルは /etc/apache2/ 以下にある。/etc/apache2/apache2.conf がメインの設定ファイル。

_【2020年最新版】DebianにウェブサーバーApache2をセットアップ

ユーザのホームディレクトリを有効化。 :

以下を参考に作業。

_Debian 10 Buster : Apache2 : ユーザーのホームディレクトリを利用する : Server World

a2enmod userdir
systemctl restart apache2
初期設定では、~/public_html/ 以下が公開される。

cgiを有効化。 :

以下を参考に作業。

_Debian 10 Buster : Apache2 : Perlスクリプトを利用する : Server World

モジュール有効化。Apache2再起動。
a2enmod cgid
systemctl restart apache2

初期設定状態では、/usr/lib/cgi-bin/ 以下に cgi を入れておくと、http://hoge/cgi-bin/hoge.cgi で実行できる。

任意のフォルダ以下でも実行できるように設定してみる。例えば、/var/www/html/cgi-enabled/ 以下を対象にしてみる。
mkdir /var/www/html/cgi-enabled
vi /etc/apache2/conf-available/cgi-enabled.conf
以下を記述。指定フォルダ以下で .cgi や .pl を実行可能にしている。
<Directory "/var/www/html/cgi-enabled">
    Options +ExecCGI
    AddHandler cgi-script .cgi .pl
</Directory>

設定ファイルの有効化。
a2enconf cgi-enabled
systemctl restart apache2

前述のページ内で紹介されているスクリプトで動作確認。

テストスクリプトの例。その1。

/usr/lib/cgi-bin/test_script.cgi
#!/usr/bin/perl

print "Content-type: text/html\n\n";
print "Hello CGI\n";

chmod 755 /usr/lib/cgi-bin/test_script.cgi

http://hoge/cgi-bin/test_script.cgi でアクセス。

テストスクリプトの例。その2。

/var/www/html/cgi-enabled/index.cgi
#!/usr/bin/perl

print "Content-type: text/html\n\n";
print "<html>\n<body>\n";
print "<div style=\"width: 100%; font-size: 40px; font-weight: bold; text-align: center;\">\n";
print "CGI Test Page";
print "\n</div>\n";
print "</body>\n</html>\n";

chmod 755 /var/www/html/cgi-enabled/index.cgi

http://hoge/cgi-enabled/index.cgi でアクセス。

Apache2を動かしているのは誰なのですか。 :

Vine Linux上では Apache を動かしていたのは apacheユーザだったけど、Debian は誰が動かすのだろう。例えば Apache2 がファイルを作成した場合、所有者は誰になるのか…?

_www-dataイズ誰? - やってみなくちゃわからない。わからなかったらやってみよう!@プリチャンを見て
_ubuntuのapacheユーザーとグループ - Qiita

Deian Linux 10 の場合、Apache2 を動かしているのは www-data というユーザらしい。

たしかに、/etc/apache2/envvars 内に記述があった。
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

旧自宅サーバ機から持ってきたファイルに対して、apacheユーザ所有だったファイル群を、www-data の所有に置き換えておいた。
sudo chown -R --from=xxxx www-data:www-data *

.htaccess を有効化。 :

ディレクトリ毎にサーバ設定を変更できる、.htaccess を有効化する。

_Apacheの「.htaccess」を有効にする方法 | ex1-lab
_Apache ウェブサーバーで .htaccess を有効にする │ TEAM T3A
_Debian Apache2の設定(1)

sudo cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf.orig
sudo vi /etc/apache2/apache2.conf

AccessFileName でファイル名を指定。
AccessFileName .htaccess
↓
AccessFileName .htaccess_custom

ディレクトリに対する設定内で AllowOverride ALL を指定すれば有効化できる。
<Directory />
  Allowoverride All
</Directory>

Apache2再起動。
sudo systemctl restart apache2

BASIC認証を利用。 :

BASIC認証を使えば、ユーザ名とパスワードを入力しないとアクセスできないディレクトリを作れる。

authz_groupfile を有効化すればいいらしい。
apt install apache2-utils
a2enmod authz_groupfile
systemctl restart apache2

_Debian 10 Buster : Apache2 : Basic認証を利用する : Server World
_[Apache] Invalid command ‘AuthGroupFile’ エラー対処法 - 端くれプログラマの備忘録

#3 [linux][debian][prog] imgboard.cgiが動かなくて悩んだ

Debian Linux 10 buster + Apache2 2.4.38-3+deb10u5 上で、Perl CGI の動作確認を兼ねて imgboard.cgi を動かそうとしたら、Internal Server Error が出て悩んだ。Vine Linux 上では動いていたスクリプトなのだけど…。

Perlのバージョンは以下。
$ perl --version
This is perl 5, version 28, subversion 1 (v5.28.1) built for i686-linux-gnu-thread-multi-64int

imgboard.cgi は以下から入手。

_imgboard.com CGIダウンロードセンター

今まで利用していた Rev.6.1v2 ではなく、imgboard Rev6.1 v4 をDLして試したけれど、結果は同じ。エラーになる。

perl imgboard.cgi を実行して出力結果を眺めたら、正規表現の記述でエラーが出ているようで。

ただ、Debian Linux は UTF-8 だけど、imgboard.cgi は SJIS で書かれているので、該当行が表示されても日本語文字列が全部文字化け(?)していて、どこが原因なのか分からない…。

以下を打つことで、エラー出力をファイルにすることができた。
perl imgboard.cgi 2> error.txt

error.txt を、エンコードを切り替えられるエディタで開いて確認したところ、原因が分かってきた。
Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.30), passed through in regex; marked by <-- HERE in m/東京|区|市|郡|府 <-- HERE |県|北海道|字|町|番地/ at /home/www/blackwater/public_html/cgi-bin/imgboard.cgi line 7571.
Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.30), passed through in regex; marked by <-- HERE in m/(東京都|大阪府 <-- HERE |京都府|[^\s\>\d]+県|北海道)([^\s\>\d]+)(市|区)([^\s\>\d]+)([0-90-9]+)(\-|−|丁目|の|ノ)([0-90-9]+)([\-|−|の|ノ]?)([0-90-9]?)/ at /home/www/blackwater/public_html/cgi-bin/imgboard.cgi line 7574.
Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.30), passed through in regex; marked by <-- HERE in m/(東京都|大阪府|京都府 <-- HERE |[^\s\>\d]+県|北海道)([^\s\>\d]+)(市|区)([^\s\>\d]+)([0-90-9]+)(\-|−|丁目|の|ノ)([0-90-9]+)([\-|−|の|ノ]?)([0-90-9]?)/ at /home/www/blackwater/public_html/cgi-bin/imgboard.cgi line 7574.
Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.30), passed through in regex; marked by <-- HERE in m/(東京都|大阪府 <-- HERE |京都府|[^\s\>\d]+県|北海道)([^\s\>\d]+)(市|区)([^\s\>\d]+)([0-90-9]+)(\-|−|丁目|の|ノ)([0-90-9]+)([\-|−|の|ノ]?)([0-90-9]?)/ at /home/www/blackwater/public_html/cgi-bin/imgboard.cgi line 7578.
Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.30), passed through in regex; marked by <-- HERE in m/(東京都|大阪府|京都府 <-- HERE |[^\s\>\d]+県|北海道)([^\s\>\d]+)(市|区)([^\s\>\d]+)([0-90-9]+)(\-|−|丁目|の|ノ)([0-90-9]+)([\-|−|の|ノ]?)([0-90-9]?)/ at /home/www/blackwater/public_html/cgi-bin/imgboard.cgi line 7578.

「正規表現を指定する文字列の中に『{』が入っているぞ」と怒られてるようで。最近の Perl ではエラー扱いにするようになった模様。ただ、実際には「{」なんてどこにも書かれてない。

いわゆるダメ文字の問題だった。SJISで書かれた Perlスクリプトでよく発生するアレ。

_fudist - ダメ文字一覧表

「京都府」「大阪府」の「府」に、0x7b = 「{」が含まれてしまっている。「{」が直接記述されているなら「\{」と書くことで回避できるけど、漢字の中に含まれているとなると…対策が思いつかない…。

仕方ないので、「府」だけを削除してみた。「京都府」「大阪府」は「京都」「大阪」に。そもそも、自動住所リンクが有効設定になっている時に処理が走るようなので、該当設定を無効にしておいた。
#  <Google MAP 自動住所リンクのオンオフ> 
#
#  本文中にある住所らしき文字を拾って、Google Mapのリンク化する自動住所リンクは
#  デフォルトでONです。オフにしたい場合は、以下のフラグを変更してください。
#  (1=ON(推奨),0=OFF)
$PM{'auto_japanese_address_find'}=0;

この状態なら画面が表示…されなかった。まだエラーが出ている…。

今度は、require "$imgsize_prog" if(-e "$imgsize_prog"); でエラー。最近の Perl は、スクリプトの置いてあるディレクトリ内(「.」)を検索しないようになったので、imgboard.cgi と同階層に置いてある、$imgsize_prog = "imgsize.pl" が見つからない模様。

require "./$imgsize_prog" if(-e "./$imgsize_prog"); に書き換えたら動いてくれた。

古いスクリプトだから仕方ないけど、SJIS で書かれた Perlスクリプトはこういう罠があるなと…。UTF-8 ならこういう問題に遭遇しないのだろうか。

#4 [firefox] FirefoxのURL欄にhttp://を表示したい

Apache2の動作確認をするために、Windows10 x64 21H1 + Firefox 89.0.2 からサーバ機にアクセスして、ページを開いて確認しているのだけど。ちょっと困った仕様に遭遇。

FirefoxのURL欄・アドレスバーは、http:// を省略してしまう。URLの最後だけ書き換えてページ移動しようとすると、 http:// 抜きの文字列で検索サイトに飛んでしまって誤動作する。

例えば 「http://hoge/」にアクセスした後、最後のあたりだけ修正して「http://hoge/test.cgi」を開こうとしても、URL欄では「hoge/」になっているから「hoge/test.cgi」の文字列でWeb検索されてしまう。

省略表示をしないようにしたい。

about:config で以下を false にする。
どうしてこんな余計なことをするのかと思ったけれど、Google Chrome に比べたら設定変更できるだけマシらしい…。

_Firefox の アドレスバー で URLを省略しないようにする(「http://」を表示する) :Tips & FAQ | arbk-works Blog
_FirefoxやChromeでアドレスバーにhttp, httpsを表示させる方法 | PC好きの備忘録

以上、1 日分です。

過去ログ表示

Prev - 2021/07 - Next
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project