SEO対策とセキュリティで企業をバックアップします。

ITエンジニアの技術力UPをお約束します。

よく使うパッケージ依存やアプリサーバの動作問題を解決するのに役立つコマンド

よく使うパッケージ依存やアプリサーバの動作問題を解決するのに役立つコマンド


Linuxでパッケージをインストールしているとよく起こる依存関連の問題。アプリのバージョンごとに同じライブラリーでも、別のライブラリーバージョンを使っていると依存関係でエラーが発生する。また、動作しないパッケージを調べる時に、そもそもどこにどんなファイルが設置されたのかわからないときがある。そんな時に使えるコマンドを覚えておきましょう。

既にフォルダーにあるrpmファイルがどのようなファイルを展開するのか調べる

ファイルの由来を調べてパッケージを突き止める。

これからインストールしようとしているパッケージがどのようなファイルを展開するのか調べる。

実行プログラムがどんなファイルをハンドルしているか調べる

アプリサーバの機能の一部が動かないと思う時は便利。straceで掴んでいるファイルをデバッグできる。Linuxの世界ではそもそも設定が正しくても動かないものもある。バグだったり、使用モードの違いで、正規リリースでは動かず、オプションを変えてRPMの再構築が必要なものとかもたまにある。その判断を行う場合に私はよく使っています。

プログラムがどのようなライブラリーを参照しているか調べる。

ltraceは共有ライブラリーの関数呼び出しをトレースする関数でこれもまた非常に有益なツールです。バージョン違いのライブラリーを参照していないか、ライブラリーのどの箇所でエラーが起きたのか?ライブラリーを読み込めていないのでは?などを調べる時に使います。ときには応急処置でこれで調べた結果を元に呼び出し元のプログラムのバイナリーにパッチをかけてライブラリーの呼び出す先を変えたりするのに使っています。

タグ: , , , ,

FTP接続と開発者向けユーザディレクトリの設定について(セキュアにするには)


WEBサーバを設置して、複数の業者にコンテンツを任せようとするとついてまわるのはアクセス権の問題が圧倒的に多いのではないかと思う。WEBサーバはよく使われるのはApache Webサーバだが、そうするとフォルダーやファイルに対してのアクセス権限はデフォルトで行くならapacheユーザ、apacheグループになるだろう。


つまりコンテンツレベルのディレクトリ、ファイルアクセスはWEBサーバの設定に設置したUser,Groupディレクティブが使用されるわけです。WORDPRESSやフレームワーク、MovableType等様々ありますがこれらのプログラムでできているコンテンツはこのディレクティブの設定で動作します。


要するにCMSのようなブラウザ画面で更新ならapacheユーザ、グループでアクセスすることになります。FTPでアクセスする場合は、apacheユーザ、グループでアクセスすることは無いでしょう。それは危険だからです。


話は長くなりましたが、そうするとFTPで直接アクセスして編集するとなると何が怖いのか考えてみると、上位フォルダーから辿ってシステム探索されハッキングされることかもしれません。サーバ事業者間ならsftpでやるところですがWEBデザイン系が主体だったり、個人事業主がWEB制作に携わっているならvsftpdでchroot及びover SSLを行うことになるでしょう。

chrootすれば、ユーザがログインしたフォルダーより上の階層ディレクトリへ行くことができません。
しかし、欠点があります。WEBサーバのドキュメントルートは大体は/var/wwwの直下にあります。
ユーザは/home/user01のような感じのフォルダーへログインすることでしょう。離れたフォルダーへアクセスするにはソフトリンク(ln -s 大本 リンク先)を使うのが鉄則ですが残念ながらchrootするとソフトリンクしたフォルダーへはアクセスができません。
通常ならここで諦めて/etc/vsftpd/chroot_listにchrootを無効化するユーザを書くことになるかもしれません。


リファレンス:Vsftpdのインストール、ftps、chroot設定など大変参考になるサイト

しかし、chrootを外してセキュリティ設定を緩めるのは嫌ですよね!
そこでchrootでもソフトリンクの如くフォルダー間を接続する方法があります。それはmountコマンドの「–bind」オプションです。
下記のような感じでフォルダーをマウントすればchroot環境でも利用が可能です。



これが済んだら次に考慮すべきはファイルのパーミッションです。大抵はapacheユーザ、グループでドキュメントルートは設定されているはずです。


コンテンツに自由にアクセスするにはapacheグループにユーザを追加します。しかし、WORDPRESSのようなCMSやフレームワークはフォルダー階層構造が複雑です。
グループユーザに対しchmodで775や664の設定をくまなく隅々まで実施するのは骨が折れる作業です。


でもこれを簡単に行う方法があります。findとxargsをパイプで組み合わせれば簡単にディレクトリとファイルのパーミッションを再帰的に探索して
設定してくれます。たまに連続置換などでお世話になるコマンドかと思いますがまさにそれを使います。

apacheグループに開発ユーザを追加した場合の理想の権限

  • ファイルの場合:664
  • ディレクトリの場合:775

以下のコマンドをコンテンツのフォルダーへ移動して実施すると一括でパーミッションを変更することができます。非常に楽ちんですね!

ファイルの場合のドキュメントルート配下権限一括置換)

ディレクトリの場合のドキュメントルート配下権限一括置換)

※以上でフォルダーの権限は置換されます。

タグ: , , , ,

Caddy 高速WEB サーバ(http2 quic対応) on CentOS7


http2対応の高速サーバを今回扱ってみる。このサーバはGo言語で開発されたWEBサーバです。導入にはコンパイルから行う場合はGo言語開発環境が必要ですが
バイナリーから入れるのであれば、特にGo言語開発環境は必要ありません。導入方法は幾つかやり方があります。一番簡なのはCentOS7の場合ならepelレポジトリー
から導入するのが簡単です。今回はこのサーバを理解するため少し手間がかかるバイナリーダウンロードから導入する方法を紹介します。
尚、今回は既存のサイトをcaddyで設置するやり方ですが、新規サイトであればSSL接続の鍵の取得などを無償のLet’s Encryptから自動取得してくれます。通信スレッドはマルチスレッドタイプです。わかりやすい。

バイナリーパッケージのダウンロード

バイナリーパッケージを配置し実行環境を作る。

caddy起動をsystemdに登録する

caddyサーバの15,16行目の実行ユーザとグループを指定します。
22行目を編集します。-quic追加とcaddyプロセスログファイルの出力先を変更します。

caddy設定ファイルを作成する

www.testserv.netでhttps接続のListenや設定情報は以下のように行います。下記はWORDPRESSの場合の記述例になります。
予め、selinuxはOFFにしておきましょう。caddyは比較的デバッグ情報が寡黙の傾向にあるのでくだらないことで悩まず最初は「setenforce 0」で無効。 きちんとWEBサーバとして動いたら、「setenforce 1」で影響がないか確認すると良いと思います。 尚、この設定でQualisのSSLテスト評価で「A+」取得できました。

php-fpmの設定

caddyを起動する

トラブルシューティング

うまくcaddyが起動できていない場合は、おおよそlogのディレクトリパーミッション、SSL鍵のディレクトリパーミッションが原因のケースが多い。caddyユーザに設定してサーバを起動することは、ログディレクトリがデフォルトでrootユーザ、rootディレクトリならば、パーミッションやグループの検討の余地が必要。本格的にやるならばログを開放するのは危険なので/caddy/logディレクトリ等を作った方が良いのかもしれないと思います。 あるいはログファイルなら予め0サイズのログファイル名をtouchコマンドで作っておくことをお勧めする。 「journalctl -xe」を実行して調べてみると良い。また、firewalldやiptablesでportが開放されているかチェックし、開放されてなければ該当portをオープンにしましょう。

※まだまだ発展途上なところがありますが、個人的には大変気に入りました。設定がシンプルで少ない設定で動かせるところが良いと思います。当社でもApache2.4からこのサーバに切り替えて使っています。

タグ: , , , ,

CentOS6/CentOS7 Apache2.4.17以降へアップグレードかつHTTP2対応 SSL&phpも考慮


CentOSはバージョン6,7ともレポジトリーISUを追加してhttp2対応が必要。CentOS7はApache2.4ではあるがマイナーバージョンがhttp2に対応していない。
尚更、CentOS6は対応できていない。Ubuntu/Debian系のLinuxなら比較的簡単に入れられるのでそこがCentOSの場合面倒なところ。ちなみに秋頃にリリースされたCentOS8はデフォルトでApache+php-fpmの組み合わせでhttp2仕様になっています。特にhttp2に対応するための特別な設定は不要です。

まず最初に現在使っているhttpd2.2.xのWEBサーバとphpを外す必要があるだろう。標準のものを使っている場合はremiの進んだバージョンのphpを使っている
場合もあるだろうが概ね下記のような感じで依存関係もチェックしながら外してゆく。その後にISUのレポジトリーを追加してhttp2対応のhttpd2.4を導入する。
このバージョンではmod_phpが古いhttpdでなければ動かないようなのでphpはfastCGIを使った方法に変更する。

現行環境の削除、レポジトリー追加とapache2.4(http2対応バージョン)+fastCGI導入

※httpd2対応のモジュールロード設定は/etc/httpd/conf.modules.d/00-base.confに追加されています。

プロセスをevent型に切り替える

httpd2対応にはhttpdプロセスのprefork型の動作では駄目です。event型に切り替える必要があります。

fastCGIの設定修正

mod_phpが使えないのでfastCGI経由でphpを動作させます。それにあたり基本設定の動作ユーザをapacheに切り替えます。

仮想サーバ設定にhttp2動作のためのデイレクティブ追加

eventモジュールのパラメータ設定

Apache2.4ではMaxClientsがMaxRequestWorkersに変わっています。

/etc/httpd/conf.dの配下にmpm_event.confのような名前で配置します

fastcgiのプロキシー設定

fastcgiとapacheをつなぐ設定です。これがないとphpが動きません。

proxyfcgi.confのような名前で/etc/httpd/conf.dに配置してください

サーバの起動

http2になっているかチェックする。

http2に対応していることがブラウザの検証ツールで確認できます。 またレスポンスヘッダーを見て確認する事もできます。

h2プロトコルの結果検証

PHPが使えなかったりhttp/1.1のままになっている方は何が原因?

それはopensslが古いままだからです。openssl1.0.2以降を使いましょう。あるいはapacheとphp-fpmの連携が噛み合っていない場合もありえます。phpのバージョンとphp-fpmのバージョンがマッチしてなかったりすることもあるので確認してみましょう。Apacheではfastcgiの連携にproxyを経由します。その設定が適切に行えてなければ連携できていません。なければ自分でproxyfcgi.confを仮想サーバディレクトリで作成して連携させてください。

タグ: , , , , , ,

CentOS7/CentOS6 共通h2o HTTP/2対応Web サーバのインストール with WORDPRESSで動かしてみる。


h2oサーバの導入の動機

h2oを使ってみようと思った理由はHTTP/2.xで通信できることかな。最近のGoogle検索順位は早さも大切な評価ウェイトをしめているためサイトの速度アップは重要なことです。
このHTTP/2.xのプロトコルはHTTPS通信において表示速度を向上させ並列してリクエストを処理できるため、表示速度が向上します。
Nginxも早いのですが、H2OはそのNginxを凌ぐ早さで表示できるようです。通信スレッドはマルチプロセス・マルチスレッド方式です。CPUのコア数に合わせてnum-threadsを設定すれば良いようだ。

h2oのレポジドリーの追加

h2oのインストールはCentOS7/CentOS6で共通です。基本はyumのレポジトリーに以下の記述を追加し保存するだけでyum経由でレポジトリー からのインストールが可能になります。

h2oのインストールと起動

h2oを実際にyumを使ってインストールし、起動する手順になります。

ユーザh2oの作成とドキュメントルート作成&WORDPRESSの設置

SSL & WORDPRESSを動かす際のコンフィグレーション例(h2o.conf)

今回はSSLを使ってh2o環境でWORDPRESSを動かすケースのh2o.confを挙げてみたいと思います。
let’s encryptを使ってSSLライセンス取得し、実験してみました。Let’s Encrypt取得のやり方はここ
ドキュメントルートに/opt/html/content1として、実行ユーザはh2oユーザを新たに作り設定しています。
nginxにも似ている書き方にも感じますが、インデントで設定の範囲がきまるので注意しましょう。
尚、fastCGIをh2oは直接管理できるので通常行うようなfastCGIの設定は不要です。
SSL証明書の項目設定の中でCAファイル(認証局証明、中間証明等)を設定する箇所はありません。
従ってサーバ証明書とCAファイルはcatコマンドで結合を行ってください。結合後に結合ファイルの終点と開始点の間に改行が正しく入っていなかったらエラーになりますので必ず結合の後にチェックが必要です。
最初にサーバ証明書が来るようにするのがポイントです。尚、LetsEncryptの場合fullchain.pemが既に結合されたものです。

おまけ:ソースからのh2oコンパイル

CentOS6.10のデフォルトのgccバージョン(4.4.7)では宣言エラー(同じ関数名で異なるタイプ宣言)が出てしまいました。しかしHomebrewで導入しているgccのバージョン(5.5.0)では 問題なくコンパイルが完了しました。gccバージョン毎のプロトタイプ宣言の解釈と処理の違いがあるようです。尚centOS7,centOS8では簡単にコンパイルできます。ライブラリーが足りないと途中出てきますが2つほどマニュアルでライブラリー追加すれば問題ありません。Ubuntu系の最新バージョンではソースコード中のUINT_MAXをUINT8_MAXに置き換える作業がありましたがこちらもすんなりコンパイル出来ます。

タグ: , , , , , ,

1 2