Linux」カテゴリーアーカイブ

CMSサイトの構築とSELinux

というわけで今回はこういう話題です。ほとんどの解説サイトがSELinuxを前提にしていない書き方をしているためにこの系の権限変更がちゃんと行われず、サイトの初期設定すらまともに行えない、という現象にはまることが多いような気がするのでそれについて書いてみます。

 

SELinuxが持っているhttp系の初期権限

これを知らないと大変なことになります。SELinuxでは、http系で操作される各種ファイルについて以下のようなラベルを割り当てて管理しています。大まかに必要な分だけですが…。

権限名 意味 権限
httpd_sys_content_t 通常コンテンツ 読み込み専用
httpd_sys_rw_content_t 通常コンテンツ(読み書きあり) 読み書き
httpd_sys_script_exec_t 実行可能コンテンツ(CGIなど) 読み込みおよび実行
httpd_var_lib_t /var以下に存在するhttpの動作に関わる補助ファイル(phpのキャッシュなど) 読み書き
httpd_var_run_t /var以下に存在するhttp上で実行されるコンテンツの補助ファイル(phpのセッションなど) 読み書き

下二つはあまり関係しませんが、php-fpmなどの設定時に関わってくることがあります。で、問題は上の3つ。

 

SELinuxがhttp系ファイルにつける初期ラベルはhttpd_sys_content_tになる

これが要注意ポイント。つまり読み込み専用になるわけです。この状態は通常のコンテンツをアップロードしたときには正しいのですが、CMSサイトのようにディレクトリ内にキャッシュを持ったり、自分自身でファイルのアップデートを行うコンテンツにおいては非常に相性が悪い(というかこの状態だとうまく使えないこと)になってしまいます。

 

CMSサイトのディレクトリにはhttp_sys_rw_content_tをつけないとインストールできないことも

この件について調べるのにかなり時間がかかってしまいました…。特に内部的にキャッシュディレクトリを持つ場合はそのキャッシュディレクトリにhttp_sys_rw_content_tを設定しておかないとキャッシュが動かず実行できません。これは大変です。また、CMSの場合たまにあるのが、アップデート時に何らかのスクリプトをCGI権限で動かすパターンがあるのですが、その場合は個別にhttpd_sys_script_exec_tを設定しないとたとえchmodによる実行権があってもSELinuxにより実行が拒否されますので対応する必要があります。

 

CMSサイトのディレクトリには必要な部分にhttp_sys_rw_content_tを設定しよう

という結論になります。もちろん、全域に設定するとセキュリティが弱くなるので必要な部分だけ、というのはあるのでコンテンツに関するディレクトリだけです。例えば/var/www/cms以下にコンテンツをインストールして、/var/www/cms/webroot以下を書き換え可能にするとするなら

# semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/cms/webroot(/.*)?"
# restorecon -R -v /var/www/cms/webroot

のような処理が必要になります。この処理はターミナル上からしかできないのでSELinuxを設定している時は要注意になります。また、実行権が必要になるファイルにもhttpd_sys_script_exec_tの設定処理が必要になりますので、これを参考にやっておきましょう。

 

SELinuxがセキュリティに貢献していることがよくわかる…

chmodによる権限変更だけでは受け入れない堅さが自慢です、というところですか。面倒ですが、少しずつ覚えていって使いこなせるようにならないとまずいような気はしますね。

 

Fedora32のPHPは初期設定でphp-fpmになるのか…

そして今回の出来事の中で気がついてしまったこと。昔はApacheの場合はphpがhttpd上で動く組み込みパターンになるのでphpの実行者はhttpdの実行者と同じになっていたのですが、Fedora32の場合は初期設定がphp-fpmによる外部動作なので、phpの実行者がphp-fpmで設定されている実行者になる、という「suexecを考えるよりはわかりやすいのか?」という状態になっているようです。このあたりも気をつける必要がある人は気をつけましょう。

Fedora32をインストールしてみた

今回のFedoraは公開されてからあまり時間をおかずにインストールしています。一応今のところは不具合などはありませんが、それでも変更点は何個もあったのでそれを紹介していきたいと思います。

 

パーティションはほぼデフォルトで

Fedora30のときにはext4で…と書いていましたが、今回はほぼデフォルトに任せてパーティションを設定させました。そうすると、boot系のパーティションを除きLVMで作成され、しかもデータパーティションの形式はxfsになっていました。xfsが標準となりつつあるのでしょうか…?

 

ファイアウォールの設定に少し戸惑った

ファイアウォールの設定は以前からfirewall-cmdを通す形式だったのですが、バックグラウンドがiptablesからnftablesに変わったからかよくわかりませんが、デフォルトで適用されるゾーンの名前がpublicからFedoraServerになったようです。このため、以前は–zone=publicを指定して設定していたポート開放処理ですが、Fedora32では—zone=FedoraServerを指定しないと正しいポート開放にならなくなっているようです。このあたりはfirewall-cmdでリストを出せばわかるのですが、一発では気がつかない現象でした。

 

cronが標準でいなくなった?

はじめにこれを感じたのはcrontabのコマンドがなくなったことでした。crontabのファイル自体は存在していますが、コマンドからのファイル編集がなくなっているので…と思いちょっと見てみると、cron自体が入っていなくなったのですね…。

じゃあcronの代わりは?というとsystemctlのtimerを使って定期的にジョブを動かす、という仕掛けになっているようです。つまり、自分でtimer(+service)の設定ファイルを作成し、systemctlで有効にする、という手順をとらないと以前にcronでやっていた「定期的にスクリプトを動作させる」ということが標準でできないようです。この差はちょっと大きいですね。しかも、SELinuxを有効にしたままだとスクリプトファイルの権限に関する問題(ファイルの実行フラグではなくSELinuxに基づく実行許可問題)が現れてしまい、auditの設定やらsemanageやらなんか面倒なことをする必要が増えたな~という感想です。セキュリティは強化されているのですが。

 

どうせ「StayHome」なので、こういうときにこそ更新作業をしよう

長期の休みなので、家でしかできないことシリーズとしては、こういうOSの更新作業なんていうものは典型的なものだと思いますので、皆さんも思い出した段階でやっておきましょう。

メインサーバにFolding@homeを導入して新型コロナウィルスなどの解析に協力してみた

さすがに新型コロナウィルスの影響がしゃれになっていない状態になってきています。自分の身にも転職や請負の仕事などで降りかかっていますし…。ということでちょっとある動画でやっていた、いわゆる余っているPCの能力を組み合わせていろいろなものを調べる系(分散コンピューティング)のプロジェクト、今回は特に新型コロナウィルスなどの構造解析をやっているFolding@homeを導入してみたいと思います。

 

今回はLinux版(Redhat系)でやってみる

メインマシンに入れるとファンの音の問題や消費電力の問題も大きそうですので、サーバー機に入れてやってみようと思います。さすがに世界的なプロジェクトだけあってWin版以外にもmac版、Linux版(Debian系、Redhat系)などがありますので自分に適したものを導入すればOKです。手順としてはこんな感じ。

 

1. ホームページ(https://foldingathome.org/)から上のメニューより「Start folding」をクリックする

2.ダウンロードページの中程にある「alternative downloads」のリンクをクリックする

3.各OSにインストールするときのインストールプログラムおよびパッケージへのリンクがあるので必要なファイルをダウンロードする

このとき、GUIからの監視や設定プログラムがなくてもよい場合はfahclientのみでOK。監視プログラムを入れる場合は特に別PCから監視する場合はいくつかのポートを開いたりするなどファイアウォールの処理が必要になるので注意。

4.root権限を使ってパッケージをインストールする。

DNFが使えるFedora系ならば(3/29現在だと)

$ sudo dnf install fahclient-7.5.1-1.x86_64.rpm

でOKです。openssl系のパッケージが必要になるのでそこだけ注意。

5.インストールが完了すると勝手に動作を開始するので一度停止させる

いくつか設定をちゃんとする必要があるので動作を停止させましょう。本当をいうならreloadができるはずなので止めなくてもよいかもしれませんが、初期設定の場合は一度完全に止めた方が確実でしょう。

$ sudo /etc/init.d/FAHClient stop

6. 必要な設定を作成する

初期設定だけならFAHClientからファイルを作ることができますのでそれを使いましょう。

$ sudo FAHClient --configure
User name [Anonymous]:(自分を示すユーザ名を入力する。空欄ならAnonymous)
Team number [0]:(参加したいチームの番号を入力する)
Passkey:(パスキーを入力する)
Enable SMP [true]: (複数CPUへの分散を行うときはtrueを指定する)
Enable GPU [true]: (GPU[OpenCLやCUDA]を使用するときはtrueを指定する。認識されていなければ動作しない)
Name of configuration file [config.xml]:(空欄でOK)

7. /etc/fahclient/config.xmlを編集してCPU使用率に関する指定をする。

エディタで設定ファイルを開いてもう少し細かく設定します。特にCPUやGPUの使用率に関してもっと使ってほしい場合にはこの設定項目を変更します。

 <power v='light'/> (ここをmediamやfullにすると使用率が上がる)

8. サービスを再起動する

$ sudo /etc/init.d/FAHClient start

 

実行に必要になるものは勝手にダウンロードされるので後は放置でOK

解析させたいタンパク質のデータもそうですが、対象のPCにあう解析プログラムがダウンロードされるので、それが実行されるまでしばらくかかるようです。実行されるとCPU使用率が大幅に上がるはずです。なお、実行で使われるデータ、プログラムおよびログは/var/lib/fahclient以下にありますので解析ログを見てみたい人は直接見てみるとよいと思います。そんなにこまめに見るものでもないと思いますが。

 

昔はSETI@homeがあったな…

こちらは「宇宙から来た電波などを解析して宇宙人の痕跡を探す」でしたが、すでに終了しています。こういう分散コンピューティングの先駆けともなっているものを知っているのでこういうときに協力してみようという気になるわけですね・・・。

 

RAID6を使った48TBファイルサーバを構築するなら何が必要?

1年契約をしていた非常勤の仕事が契約満了となり、さらには予定していた請負の仕事は全く入ってこないというフリーランスにありがちなまともな収入がないやばい状態となっています。4月からマジでどうしようか…

それはとりあえず置いておいて、久しぶりのまともな記事として、前にちょっとだけ考えていたファイルサーバの件ですが、もし組み立てたらどんなパーツがいるのか、どんなOSがいるのかを考えてみたいと思います。どうせなら組み立ての過程をYouTubeなどで公開できれば面白いのですが、いろいろと機材やらソフトやらを用意する…前にまず組み立て対象のファイルサーバにどれくらいかかるのか?を考えるのが先ですので。

 

とりあえず構成を考えてみる

今回の目的は「48TBのファイルサーバ」ですので、問題になるのは

  • ストレージの構成をどうするか
  • ストレージを接続するインターフェイスをどうするか
  • ケースをどうするか

が主になります。CPUやマザーボード、メモリについては3万円台のPCレベルのものでも問題ないと思います。一応気になっているのはRAID6のパフォーマンスがCPUやメモリによってどの程度変わるのか?ということですが、YouTubeでその手の組み立てをしているほかの動画を見ている限りは「よほど悪いCPUを使わない限り+ファイルサーバ以外の用途でCPUを使うのでなければ問題はない」というところだと思います。まあ、10GbEを持ってきたとしてもこれはあまり変わらないかな~というところです。

 

一応ストレージの想定としてはOS用に4TB HDDx2でRAID1、ファイルサーバ領域として8TB HDDx8でRAID6(RAID Z2)」となっています。ファイルサーバ領域をRAIDで保護しているのにOS領域をRAIDで保護しないのは運用上どうなのか?と思い始めたいましたので、次の構成はこれが予定です。

そしてストレージを接続するインターフェイスについて。今回の構成予定だとSATA端子が10個はほしいのですが、通常SATAの端子はよほど高級なマザーボードでもない限り10個なんてあるわけないのでそれを拡張するためにSATAのインターフェイスカードをつける必要があります。

最後にケースについて。そもそも家庭用に使うPCで3.5inchのHDDが10個もつけられるケースというのがまずありません。一応kakaku.comで調べてみたのですが、5万円以下までではたった1つしか見つかりませんでした。こうなってくるとさすがに本当のブレードサーバで使えるものを探すしかなくなってくるのでそれはさすがに範囲外ということにして、今回はこの条件で考えてみたいと思います。

おまけとしてこのレベルのファイルサーバであれば10GbEのカードもつけたサーバの方がよいかもしれません。私が今現在使っている32TBのファイルサーバですら家庭用というには大分すごい状態なのに、上記の構成だと家庭用の領域を超えているのでは?と思えなくもないですよね。

 

実際どんなパーツが必要?

ということで、今回は「CPU、マザーボード、メモリを抜いて」「20万円以内で」を目標に考えてみたいと思います。

ストレージ

4TB HDDの方は適当にNAS用のHDDでもつけておけばよいでしょう。例えばこんな感じ。

Seagate IronWolf 3.5″ 4TB 内蔵ハードディスク HDD 3年保証 6Gb/s 64MB 5900rpm 24時間稼動 PC NAS向け ST4000VN008

ちなみにSeagateにしているのは信者とかではなく次の8TB HDDの影響です。この記事を書いている段階では13,700円ほど。

 

問題は8TBの方です。「20万円以内で」の条件の関係で、こちらにNAS HDDを使うと値段が跳ね上がってしまうのが最大の問題点。ちなみにこの記事を書いている段階では8TBを超えると常時使用のHDDのタイプしか残らず、費用がかなり高くついてしまうので8TBx8の構成にする、という理由もあります。値段重視にするとNASを構築しようとしているにNAS HDDが使えないんですよね…。この条件に最も適しているストレージがおそらくこれ。

Seagate BarraCuda 3.5″ 8TB 内蔵ハードディスク HDD 2年保証 6Gb/s 256MB 5400rpm 正規代理店品 ST8000DM004

これならば1台あたり14,500円ほどとOS用のHDDとまとめて10台買ったとしてもなんとか16万円で収まるため、残りのものを買っても目標金額内で購入できます。ちなみに上にも書きましたが、GB単価が一番安いのがこの付近で、10TB以上になると台数は少なくできるのですが値段が跳ね上がってしまいますし、NAS用だと8台も買うとそれだけで20万円を突破してしまうのでNAS用ではないことを考えてもこの選択となります。まあ、家に置く用であれば必要なときだけ電源を入れて不必要なら消す、壊れる可能性についてはRAID6(RAID Z2)に保障してもらうというところですね。

 

ストレージインターフェイス

マザーボードに何個SATA端子がついているかにもよりますが、とりあえずはこのくらいでしょうかね。

玄人志向 キワモノシリーズ SATA3 10ポート増設インターフェースボード SATA3I10-PCIE

画像がないのはAmazon経由だと引き出せなかったからです。1つのカードに複数のポートがついていると負荷がかかった場合に速度が遅くなるという問題はありますが、今回はインターフェイスの数を優先して考えてみました。こちらにストレージの8台をつないで、マザーボード側にOS用のHDDをつないでRAID1構成とすれば問題ないと思います。値段も7,000円くらいとほどほど。

 

PCケース

Fractal Design Node 804 black MicroATX PCケース 日本正規代理店品 CS4710 FD-CA-NODE-804-BL-W

HDD10台のケースというのがまともにないのが問題点。そんなPCを作る人がほとんどいないから当たり前か…。これなら13,000円レベルで3.5inchを10台搭載可能らしいのでこれくらいしか選択肢はありません。ちなみに大半のドライブは吊り下げ方式になるとのこと。一応今現在使っているファイルサーバの一代前にNode304というこれの小さいやつを使っていたのでどういうことかはわかっているのでまあ問題ないかな、と思います。なお、ケースの制約によりマザーボードはMicroATX以下のサイズでなければならないようです。MicroATX以下のサイズでSATAが10個もついているマザーボードなんぞ見たことがないような気が…。

 

資金を集めて組み立てないと…

とりあえず今年の目標になるかな、というところです。定職に就くなり大きいプロジェクトに参加するなり細かく仕事を請け負うなり、株なり為替なり宝くじなりで夢をつかむなり、という感じで資金を集めて…というところですね。コロナの影響で経済の状態がおかしい上に貿易も…となってくると値段の変動が心配にはなりますが、そこはそれ、ですね。

 

OSはどうするのか?

Unix系を使うのは確定なのですが、問題はRAID6の方。上にも書いてあるのですが、書き込みの保障のためにZFSを使ったRAID Z2で組みたいかな、とは思っているのですが、そうするといつも使っているCentOS系だとライセンスの問題などでZFSの構築がかなり面倒になったり、更新が行われるとそのたびに領域が見えなくなる、といった問題が発生しそうな気がしていて…。zfsの更新がちゃんとできるようにしてCentOSを使うか、逆にFreeBSD系を使ってみるのか、いろいろと選択肢はありそうですね。

 

ファイルサーバのRAIDディスクが1つ飛んだので修復してみる

この記事を書いているこのタイミングではまだRAIDアレイのリビルド中なので終了待ちです。今回はRAIDアレイの修復作業ではなくもっと違ったところで大変なことが起こっていたのでそれをメインに書いてみたいと思います。

 

RAID5のディスクの認識ができなくなった

まずはじめに出た問題がこれ。ログを見る限りでは4日前ほどに不良セクタの発生でI/Oエラーが出てアクセスができなくなったようです。その前後でHDDのコントローラが応答不能に陥り強制的にRAIDアレイから除外された、という状態だったようです。早めに気がついてよかったです。ということでRAID5なので早急にHDDを取り替えてRAIDアレイの修復を行う必要が出てきたのですが、ここでHDDに関するとある問題が発生しました。

 

スペアとなるHDDがない。同じ型番のHDDはすでに販売されていない。そして・・・

このファイルサーバを組み立てたときに8TB以上あり、GB単価で一番安かったのがSeagateのST8000AS0002というもの。これ、実はArchiveHDDと呼ばれているもので、組んだ当時は用途的にはぴったりのものだったのですが、スペアを買っていない(というか1年ほど前に1台故障して同一型番のものと取り替えている)ため、手元に存在しておらず、同じ型番のものはすでに販売終了。しかも後継となるHDDはなんと存在していません。これは困った。というのも、RAIDアレイの再構築を行うためのストレージは「必ず残りのストレージデバイスが持つ容量以上のものを使わなければならない」という条件があります。これが意外と問題。

というのも、HDD本体の容量は確かに「8TB」なのですが、同じ「8TB」のHDDだからといってセクタ単位で見たときに容量が足りているか、は必ずしも明記されていません。メーカや型番によりこのあたりは異なる可能性があり、例えばWesternDigitalの場合はこれが明記されていません。そのため、ST8000AS0002の代替としてWesternDigital製の8TBHDDを考えるときセクタ数が足りているかどうか確証が持てない、という問題が発生します。RAIDの場合これが致命傷になる可能性があり、この時点でWesternDigital製のHDDは8TBより上のものを使わないと代用できない可能性が出てきます。幸いにもSeagateの場合は「Guaranteed Sectors」(最低保障セクタ数)という概念があり、8TB系のHDDはすべてGuaranteed Sectorsが同じであったため代用できるだろう、という感じで考えることができます。なお、あくまで「最低保障」なので、個体により微妙に異なる可能性は否定できないのですが・・・。

というわけで今回の代替用途にはSeagateのST8000VN004が発売時期も最近なのでちょうどいいかな、と思っていたのですが・・・。

 

近くにあるショップはSeagate製大容量のNAS用HDDがおいていない!というか・・・

そもそも8TBより容量が大きいHDDを取り扱っているショップが見当たらない、と言う事態が発覚し大分困り果てました。8TBのHDDがあった場合もBarracudaかWesternDigital製という間の悪さ。地方のショップはこんなものなのでしょうかね・・・。なんとか急場をしのぐために「とりあえず」でHDDを購入してリビルド作業に移っています。(つまりセクタ数はなんとか足りていたわけですね)

 

RAID5はリビルド作業が怖いのでそろそろRAID6で組み立てたいが

RAID5は1台が壊れても復旧が可能ということで個人用途では悪い選択肢ではないのですが、最大の問題点はRAIDアレイの再構築中に別のHDDが壊れてしまいRAIDアレイが完全に崩壊してしまう可能性が大きいこと。特に同じ時期に同一型番のHDDを買って使うため、故障時期も近くなる可能性が大きくなるからです。それを防ぐにはRAID6が有効なのですが、こちらだとHDDが一つ余計に必要なことと、SATAの端子数が必要(例えば4+2台で組む場合はさらにシステムドライブが1台必要となるため、拡張ボードなしだとマザーボードに端子が8つ必要になってしまう)ということで、コストがかかるのが難点です。ちなみに現段階でRAID6による40TB保存マシン(HDDは10TB*(4+2))を軽く設計してみるとすべてで40万円前後となり、YouTubeの動画にでもして広告収入を稼ぎたくなるようなマシンとなってしまうな、というところです。