Fedora40アップデート後のWeb上のファイル出力制御には手を焼いた

以前Fedora39からFedora40に移行について,記事にしましたが,Webサーバーからのファイル出力やデバイスの制御ができなくなってしまい,かなり手を焼きました。

症状としては,Fedora39からFedora40にアップデートしてから,FAXサーバー(efax)と知識の整理に使っていた「YukiWiki」というウェブアプリケーションが使えなったことです。

eFAXは,受信も送信も使えなくなりましたが,送受信それぞれ原因は異なりました。FAXの送信ができない理由とYukiWikiが使えなくなった理由は一緒でした。

FAX受信のほうは,もともとtiff形式で受信するため,tiffをPDFに変換するソフトが必要で,今までは「tiff2pdf」を利用していましたが,Fedora40からバンドルされなくなったのが原因です。
これについては,他のツール「ImageMagick」のconvertというコマンドを使うことにして解決しました。

convertの使い方は

convert recivefax.000.tiff recivefax.001.tiff recivefax.pdf

というように,複数のtiffファイルを1冊のPDFにすることも可能なので比較的移行が簡単にできました。

FAX送信のほうはかなりたいへんでした。症状としては,httpd(Apacheサーバー)から,/home以下にファイルの出力ができなくなったことと,/dev/serial といったモデムデバイスにアクセスできなくなったことです。

例えば,次のcgiを作成してWebサーバー上からアクセスした場合,

open(DATAFILE, “> ./test.txt”) or die(“Error:$!”);
print DATAFILE “長野県\n”;
close(DATAFILE);

通常なら,cgiのあるディレクトリ上にtest.txtというファイルが作成され,長野県と文字が入力されますが,作成されず,エラーログを確認すると

[cgid:error] [pid xxxxxx:tid xxxxxx] [client ::1:xxxxx] AH01215: stderr from /home/hoge/test.cgi: Error:Read-only file system at /home/hoge/test.cgi line 1.

が「/var/log/httpd/error_log」上に出力されます。他にも,PukiWikiを実行して,テキストの書換えを行うと

AH01215: stderr from /home/hoge/test.cgi: Permission denied at /home/hoge/test.cgi line x.

AH01215: stderr from /home/hoge/wiki.cgi: [Fri May x xx:xx:xxx 2024] wiki.cgi: /home/home/hoge//diff/XXXXXXXXXXXXXXXXXXXX.txt cannot be created at Yuki/YukiWikiDB.pm line 84., referer:(略)

等,大体同じようなアクセス制御系のエラーが表示されました。

httpdのコンフィグやファイル,ディレクトリのアクセス権限等,いろいろあたってみましたが,全然解決せず,途中でFedoraフォーラムに問い合わせてみましたが,書いたあとにたまたまsystemdでhttpdのファイル制御している記事(Webuzo:「How to increase the number of open files allowed for Apache2」)を見つけて,自己解決できました。

理由は,どうやら,systemdの制御のコンフィグが変わったのが原因のようでした。解決の方法としては,

vim /usr/lib/systemd/system/httpd.service

以下追記
DeviceAllow=/dev/ttyS0 rw

ProtectHome=read-only
PrivateDevices=yes

ProtectHome=false
PrivateDevices=no
に変更

のちに,

sudo systemctl daemon-reload
sudo systemctl restart httpd

を実行したらうまくいきました。/homeディレクトリと/devをsystemdでアクセスを制限していたようです。無事Fedora40でもefaxサーバーの運用ができるようになりました。
(”PrivateDevices=yes”と” sudo systemctl restart httpd”は,5/11追記 )