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
旧自宅サーバ機の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 を使って、「*」の動作を変えればいいらしい。
_mv等のコマンドでワイルドカード指定の際、隠しファイルを対象にする - Tdomy
_[Unix] mvなどのコマンドで”.”の付いた隠しファイルも一緒に移動させる方法 | 1 Day 1 Tip(s)
ググった感じでは、shopt を使って、「*」の動作を変えればいいらしい。
- shopt -s dotglob : *の指定時、隠しファイルも対象にする。
- shopt -u dotglob : *の指定時、隠しファイルは対象にしない。
_mv等のコマンドでワイルドカード指定の際、隠しファイルを対象にする - Tdomy
_[Unix] mvなどのコマンドで”.”の付いた隠しファイルも一緒に移動させる方法 | 1 Day 1 Tip(s)
◎ findでファイルを探す。 :
特定の所有者になっているファイルを探したい。find を使う。
逆に、特定の所有者になっていないファイルを探したい場合は以下。
_所有者を指定してファイルを探す方法 | LFI
_findコマンドの使い方 - Qiita
find . -user root
逆に、特定の所有者になっていないファイルを探したい場合は以下。
find . ! -user root
_所有者を指定してファイルを探す方法 | LFI
_findコマンドの使い方 - Qiita
◎ ディレクトリ or ファイルのみパーミッションを変更。 :
ディレクトリのみ、あるいは、ファイルのみ、パーミッションを変更。
_ファイルやディレクトリのパーミッションを一括で置換したい - Qiita
find /path/to/dir -type d -exec chmod 755 {} + find /path/to/dir -type f -exec chmod 644 {} +
_ファイルやディレクトリのパーミッションを一括で置換したい - Qiita
◎ 特定の所有者のファイルだけ所有者を変更。 :
特定の所有者のファイルだけを対象にして、所有者を変更したい。chown で行う。
_ある特定の所有者ファイルを別ユーザへ変更する - Qiita
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つがあるっぽいけど…。
/etc/passwd を眺めた感じでは、/usr/sbin/nologin が記述されてる場合が多いように見える。
つまり、以下で、ユーザがログインできない状態にできる。
しかし、この設定をしてしまうと、ftp を使って該当ユーザのホームディレクトリにアクセスできなくなった。vsftpd がそのあたり利用しているのだろうか。仕方ないので、フツーに /bin/bash を設定しておくことにした。
_【 usermod 】コマンド――ユーザーアカウントの情報を変更する:Linux基本コマンドTips(73) - @IT
_ユーザーのログインシェル: nologin と false 指定時の違い - 寒月記
/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 をインストール。
初期htmlフォルダは /var/www/html/。デフォルトでは、http://hoge/ にアクセスすると、/var/www/html/index.html が表示される。
設定ファイルは /etc/apache2/ 以下にある。/etc/apache2/apache2.conf がメインの設定ファイル。
_【2020年最新版】DebianにウェブサーバーApache2をセットアップ
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
_Debian 10 Buster : Apache2 : ユーザーのホームディレクトリを利用する : Server World
a2enmod userdir systemctl restart apache2初期設定では、~/public_html/ 以下が公開される。
◎ cgiを有効化。 :
以下を参考に作業。
_Debian 10 Buster : Apache2 : Perlスクリプトを利用する : Server World
モジュール有効化。Apache2再起動。
初期設定状態では、/usr/lib/cgi-bin/ 以下に cgi を入れておくと、http://hoge/cgi-bin/hoge.cgi で実行できる。
任意のフォルダ以下でも実行できるように設定してみる。例えば、/var/www/html/cgi-enabled/ 以下を対象にしてみる。
設定ファイルの有効化。
前述のページ内で紹介されているスクリプトで動作確認。
テストスクリプトの例。その1。
/usr/lib/cgi-bin/test_script.cgi
http://hoge/cgi-bin/test_script.cgi でアクセス。
テストスクリプトの例。その2。
/var/www/html/cgi-enabled/index.cgi
http://hoge/cgi-enabled/index.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 内に記述があった。
旧自宅サーバ機から持ってきたファイルに対して、apacheユーザ所有だったファイル群を、www-data の所有に置き換えておいた。
_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)
AccessFileName でファイル名を指定。
ディレクトリに対する設定内で AllowOverride ALL を指定すれば有効化できる。
Apache2再起動。
_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 を有効化すればいいらしい。
_Debian 10 Buster : Apache2 : Basic認証を利用する : Server World
_[Apache] Invalid command ‘AuthGroupFile’ エラー対処法 - 端くれプログラマの備忘録
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のバージョンは以下。
imgboard.cgi は以下から入手。
_imgboard.com CGIダウンロードセンター
今まで利用していた Rev.6.1v2 ではなく、imgboard Rev6.1 v4 をDLして試したけれど、結果は同じ。エラーになる。
perl imgboard.cgi を実行して出力結果を眺めたら、正規表現の記述でエラーが出ているようで。
ただ、Debian Linux は UTF-8 だけど、imgboard.cgi は SJIS で書かれているので、該当行が表示されても日本語文字列が全部文字化け(?)していて、どこが原因なのか分からない…。
以下を打つことで、エラー出力をファイルにすることができた。
error.txt を、エンコードを切り替えられるエディタで開いて確認したところ、原因が分かってきた。
「正規表現を指定する文字列の中に『{』が入っているぞ」と怒られてるようで。最近の Perl ではエラー扱いにするようになった模様。ただ、実際には「{」なんてどこにも書かれてない。
いわゆるダメ文字の問題だった。SJISで書かれた Perlスクリプトでよく発生するアレ。
_fudist - ダメ文字一覧表
「京都府」「大阪府」の「府」に、0x7b = 「{」が含まれてしまっている。「{」が直接記述されているなら「\{」と書くことで回避できるけど、漢字の中に含まれているとなると…対策が思いつかない…。
仕方ないので、「府」だけを削除してみた。「京都府」「大阪府」は「京都」「大阪」に。そもそも、自動住所リンクが有効設定になっている時に処理が走るようなので、該当設定を無効にしておいた。
この状態なら画面が表示…されなかった。まだエラーが出ている…。
今度は、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 ならこういう問題に遭遇しないのだろうか。
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好きの備忘録
FirefoxのURL欄・アドレスバーは、http:// を省略してしまう。URLの最後だけ書き換えてページ移動しようとすると、 http:// 抜きの文字列で検索サイトに飛んでしまって誤動作する。
例えば 「http://hoge/」にアクセスした後、最後のあたりだけ修正して「http://hoge/test.cgi」を開こうとしても、URL欄では「hoge/」になっているから「hoge/test.cgi」の文字列でWeb検索されてしまう。
省略表示をしないようにしたい。
about:config で以下を false にする。
- browser.urlbar.trimURLs : false
どうしてこんな余計なことをするのかと思ったけれど、Google Chrome に比べたら設定変更できるだけマシらしい…。
_Firefox の アドレスバー で URLを省略しないようにする(「http://」を表示する) :Tips & FAQ | arbk-works Blog
_FirefoxやChromeでアドレスバーにhttp, httpsを表示させる方法 | PC好きの備忘録
[ ツッコむ ]
以上、1 日分です。