ドキュメントルート変更

概要

apacheのドキュメントルートを変更した時のメモ

メモ

例えば、/home/username の下にドキュメントルートを変更する場合、その下にapacheがアクセス、読み込みできる権限を与えないといけない。

chmod 755 /home/username

ディレクトリの権限

Systemdメモ

基本

Unitの種類 * target 複数のUnitをグループ化する * service サービスを起動

Unit名の拡張子で種類が分かる

設定ファイル

systemd全体の設定ファイル * /etc/systemd/system.conf * /etc/systemd/user.conf

特に–unitでの指定が無ければ、下記が読み込まれる

Unitの定義ファイル

/usr/lib/systemd/system デフォルトの設定内容

パッケージをインストールしたらここに.serviceが置かれるみたい。

/etc/systemd/system デフォルトから変更した内容

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

変更を加える場合

/etc/systemd/system/httpd.service.d/を作成

limits.confを作成

[service} LimitNOFILE=65536

Unitの定義ファイル2

/usr/lib/systemd/system/には、RPMパッケージが提供するシステム標準の設定を配置しておき、システム管理者が設定変更する場合は、/etc/systemd/systemにファイルをコピーした上で修正を加えます。

頂点

「default.target」というUnitを頂点

依存関係の骨組み

targetタイプのUnitで依存関係の枠組みを作成する

例えば、 /lib/systemd/system/multi-user.target には Requires=basic.target みたいなの書かれている

Requiresを辿って、枠組みを知ることができる?

はじめ

systemd は default.targetにアクセス。

ただし

/etc/systemd/system/default.target

ll /etc/systemd/system/default.target
lrwxrwxrwx. 1 root root 37  5月 18 16:03 /etc/systemd/system/default.target -> /lib/systemd/system/multi-user.target

このリンクが起動時のランレベルに相当し、このリンクを変えるとランレベルが変更される

「 AはBに依存する」の定義方法

A.service

[Unit]
Wants=B.service

方法2.AのwantsディレクトリにBのシンボリックリンクを作成 A.serviceファイルが存在するディレクトリ上に「A.service.wantsディレクトリを作成し、このディレクトリ内にB.serviceへのシンボリックリンクを作成

/etc/systemd/system/multi-user.target.wants/ など

起動シーケンス

/usr/lib/systemd/systemd 起動

systemdが起動すると、はじめに「default.target」から「Requires/Wants」の関係をたどって、起動するべきUnitの全体を把握

起動対象の各Unitの「After/Before」の依存関係から起動順序を決定

systemdの起動でのメリット

systemdは、順序関係の情報をもとにして、複数のUnitをできるかぎり並列に起動していきます。

参考

enakai00.hatenablog.com

CVEメモ

脆弱性関連情報流通体制

発見者→IPAJPCERT/CCIPA,JPCERT/CC,JVNで公表→ユーザ企業

f:id:kandataclub:20171218094543p:plain

用語について

CVEとは

  • MITRE社
  • 世の中にはCERT/CCやHP、IBM、OSVDB、Red HatSymantecなど80を超える主要な脆弱性情報サイトがあり、MITRE社ではこれらのサイトと連携して脆弱性情報の収集と、重複のない採番に努めています
  • 世の中のソフトウェアの脆弱性はユニークなCVE-ID識別子が割り当てられる
  • CVEの管理団体が米国であるために日本での脆弱性情報が網羅されているわけではない様子
  • 共通脆弱性識別子。脆弱性に付けられるユニークなIDのこと
  • また、ソフトウェアの脆弱性を対象として、米国政府の支援を受けた非営利団体のMITRE社が提供している脆弱性情報データベースのこと
  • 脆弱性検査ツールや脆弱性対策情報提供サービスの多くがCVEを利用しています。

番号の付け方

  • CVEでは脆弱性にユニークな識別番号 「CVE-ID」(CVE-登録時の西暦-通し番号の形式)です。
    • 脆弱性「Heartbleed」は、2014年4月7日にCVE-2014-0160として発表されました。つまり、CVE-ID の構成から、2014年に0160番として登録

NIST

アメリカ国立標準技術研究所(National Institute of Standards and Technology、通称NIST) が過去に管理していた脆弱性情報データベースである。現在は機能強化されたNVDに移行している。

NVDとは

  • NISTが管理している脆弱性情報データベース
  • NISTはMITRE/CVEのスポンサーであり、CVEで命名された脆弱性情報の詳細情報をNVDで提供するという住み分けを行なっている。また、他の脆弱性情報データベースとの違いとして、Common Vulnerability Scoring System(通称CVSS)による危険度の採点を行なっている点が挙げられる。

JVNとは

  • IPAJPCERT/CCが共同で運営
  • いち早く一般に周知することを目的に、早期警戒パートナーシップで取扱われた脆弱性関連情報や、協力関係を結んでいる海外のCERT等からの脆弱性対策情報を掲載
  • なのでJVNをチェックすればほぼ世の中のCVEは把握できそう

CERT/CC

  • コンピュータやインターネットのセキュリティに関する研究や情報発信を行なっているアメリカの研究機関

JPCERT/CC

  • 国内向けのセキュリティ関連情報の提供や各国代表CSIRTとの連携窓口となっている機関

JVN iPedia

  • JVNよりもさらに日本向け情報に特化したもの
  • JVN iPediaは、国内外問わず日々公開される脆弱性対策情報を収集、蓄積することを目的とした脆弱性対策情報データベースです。目的の脆弱性対策情報を容易にご利用いただくために、様々な検索機能をご用意しています。

JVNJVN iPediaとMITRE社\

  • MITRE社と連携してCVE採番の枠組みに参加するため、JVNで公表する脆弱性に対するCVEの割り当てを申請している。

JVNJVN iPediaの違い?

  • JVN iPediaはJVNの情報に加えて、「脆弱性対策情報データベース(JVN iPedia=ジェイブイエヌ アイ・ペディア)」には日々発見される脆弱性対策情報が収録JVN iPediaは日々発見される脆弱性対策情報を蓄積することで幅広くご利用いただくことを目的としています。JVNに掲載される脆弱性対策情報のほか、国内外問わず公開された脆弱性対策情報を広く公開対象とし、データベースとして蓄積しています。
  • 一方、JVNでは、いち早く一般に周知することを目的に、早期警戒パートナーシップで取扱われた脆弱性関連情報や、 協力関係を結んでいる海外のCERT等からの脆弱性対策情報を掲載しています。JVNの詳細については「JVNとは?」をあわせて参照下さい。

脆弱性の対応

各ベンダーのサイトで確認する必要があります。

CVSS

基準のこと

  • 脆弱性対策情報データベースでは、共通脆弱性評価システムCVSS(Common Vulnerability Scoring System)を用いて、評価結果およびCVSS基本値の評価内容を記載し、脆弱性の固有の深刻度を表しています。
  • なお、CVSSには、FIRSTから2007年6月20日に公開された共通脆弱性評価システムCVSSv2、2015年6月10日に公開されたCVSSv3が存在し、JVNiPediaでは2015年12月1日より情報セキュリティ早期警戒パートナーシップで報告された脆弱性を対象にCVSSv2、CVSSv3を併記して公開しています。

「CVSSv2」と「CVSSv3」の違いについて

CVSSv2は、攻撃対象となるホストやシステムにおいての「脆弱性による深刻度」を評価していましたが、CVSSv3では、仮想化やサンドボックス化などが進んできていることから、コンポーネント単位で評価する手法を取り込んだ仕様となっています。

まとめ

  • 世の中のソフトウェアの脆弱性はユニークなCVE-IDで判別できる。
  • JVNJPCERT/CCが運営しているので日本の情報+海外の情報も網羅(JPCERT/CCが海外と連携)しているので、脆弱性に関してはJVNを調べればOKそう。プラスJVN iPediaで更に日本に特化した情報を調べれば良さそう

参考

今さら聞けないセキュリティ情報の読み方 — | サイオスOSS | サイオステクノロジー

Cent7インストールメモ

メモ

  • swapもLVMで。他とボリュームグループは異なる
  • ボリュームグループの設定は最大を選択。swapは固定。
  • /bootは通常のパーティションしかむり。LVMは使えない。
  • /boot , swap から作成。その時のswapのボリュームグループはFixed.
  • swapはraidバイス
  • 少ない容量から決めていく
  • とりあえず異なるボリュームグループのマウントポイントを作成しておかないとスペースが無いと怒られる

DELLサーバー起動メモ

メモ

  • 繋いでいないSATAポートがあればOFFにする
  • 起動順番、起動デバイスはもちろんBIOSで変更する
  • CDROMで起動するときはBIOSで起動順番変更
  • 起動順番を変更しただけではCDROMから上手く起動しないとき、BIOSから直接選択して起動。ただしこで起動しないことがある。。その時はBIOSから設定をもう一度してやれば一発でCDからインストーラーが起動したりした

割り込みメモ

割り込み

  • 入出力処理中のプロセスは、割り込みによって入出力完了が通知されるまで実行権を手放します。

  • 割り込み

    • ハードウェア割り込み
      • タイマー割り込み(タイマーコントローラが一定周期で割り込みを発生させる)
      • 外部装置から
      • プロセッサ間割り込み
      • NMI割り込み
    • ソフトウェア割り込み
      • intn命令
  • 例外 (CPUの動作自体によって引き起こされる事象)
    • フォルト
      • セグメントやページの保護機能
    • トラップ
      • INTO,INT3命令
    • アボート
      • 処理を継続できないようなエラー発生した時

割り込み、例外、それぞれにハンドラが設定してある。 通常の割り込みはマスクすることによってCPUが割り込みを受け取れないようにすることができる。

ハードウェア割り込みハンドラの起動

  • 外部装置
    • 割り込みコントローラに対して割り込み要求

  • 割り込みコントローラ
    • そのデバイスからの割り込みが禁止されていな ければ、CPUに対して割り込み要求を行います

  • CPU
    • 処理中断。割り込みエントリ関数do_IRQ()呼び出し

  • do_IRQ()
    • IRQ番号から、そのIRQに対応したirq-descテーブルのエントリを求めます。 このエントリに登録されている割り込みハンドラを実行するhandleJRQ_event関数は、登録されている 割り込みハンドラを呼び出します。複数の割り込みハンドラが登録されていた場合、そのすべてのハンドラ を呼び出します。

応答性の確保

応答性を必要とするものはハードウェア割り込みハンドラで実行 必要の無いものは後でまとめてソフト割り込みで実行

ハードウェア割り込み

  • デバイスドライバへの通知手段として利用。目的のデバイスドライバが用意している割り込みハンドラを呼び出す。
  • ドライバ読み込み時に、割り込み処理テーブルの各割り込み種別(IRQ)にドライバのハンドラを登録している
  • 一つのIRQのエントリに複数の割り込みハンドラを登録できる
  • マスク負荷割り込み(NMI)は必ず割り込むことができる。

ソフト割り込み

  • ソフトウェア割り込みとは異なる
  • ソフト割り込みは、ハードウェア割り込み処理が要因となり発生します。ソフト割り込みハンドラは、ハードウェア割り込みハンドラで行った処理を引き継ぎ、動作します。
  • ハードウェア割り込みと連携、効率的に動作する。
  • ハードウェア割り込みを禁止しない
  • ソフトウェア割り込みとは別枠
  • do_softir()

割り込みは素早くやる必要あり。よってソフト割り込みが利用される。 ソフトウェア割り込みでは普通にスケジューリングされる?

時計メモ2

時計

  • 世界標準時1970年1月1日0時からの経過時間をxtime変数に記録することで時計を実現しています
  • Linuxカーネル起動時にハードウェアカレンダの値で初期化された後は、一定周期に動 作するグローバルタイマー割り込みハンドラ(do_timer関数)で時刻が進められます。
  • 1970年1月1日0時からの経過時刻(秒数)で表現している。
  • 時間の経過はタイマー割り込みで通知。タイマー割り込みごとに少しずつ進めている。
  • dateコマンドを実行すると(timeシステムコール、gettimeofdayシステムコールを呼び出すと)、 Linux内部時計の時刻を得ることができます。

役割

時間の管理と時限処理

ハードウェアのカレンダ

  • 本質的にLinuxとは無関係の世界で独自に時刻を刻んでいます。Linuxカーネルは、起動時にハードウェアのカレンダをLinux内部時計(xtime変数)に反映させます。そのあとは、原則Linux内部 時計とハードウェアのカレンダの同期は行いません。 シャットダウン時などにシステムクロックとハードウェアクロックを同期させているみたい。

xtime変数

世界標準時1970年1月1日0時からの経過時間をxtime変数に記録

jiffies

  • Linuxカーネル起動時を0とする時刻です。これはLinuxカーネル起動後に発生したタイマー割り込みの回数を数えることにより実現しています
  • Linux内部の時限処理のベースとしてのみ利用されています
  • 通常時にはこの値は変更できません。jiffiesの値はタイマー割り込みハンドラ(dojimer関数)のみが変更可 能で、唯一、マシン再起動によってリセットされます。

3つの時計

  • グローバルな時計処理割り込み(グローバルタイマー割り込み) ハードウェア割り込み

    • システムの時刻を進めることが目的
    • システム上のいずれかのCPUに対して割り込みが発生する
    • グローバルタイマー割り込み → do_timer()
  • CPUローカルな時計処理(ローカルタイマー割り込み) 八一ドウェア割り込み

    • smp_locaLtimer_interrupt()がハンドラ → run_timer_softirq() ソフト割り込みハンドラ
    • タイマーリストを監視するみたい

do_timer() ハードウェア割り込みのハンドラ

  • システム起動後に発生したタイマー割り込みの回数を記録するjiffies変数にl
  • clac_load(ticks)ロードアベレージ(システム負荷)を計算

グローバルタイマー割り込みの遅延

高負荷時に、グローバルタイマー割り込みハンドラが期待どおりに動作せず、複数のタイマー割り込みに対し、1回だけグローバルタイマー割り込みハンドラが動作する可能性があります。そのまま普通にタイマー割り込みハンドラ(do-timer関数を実行すると、時刻が遅れることになります。アーキテクチャ依存ですが、この遅れを検出し、正常な時刻に設定し直す機能が実装されています。

タイマーリスト

  • Linuxも伝統的なUNIXと同様に、登録した一定時間後にコールバックされるハンドラを登録するための、汎用の仕組みを備えています。
  • とくにネットワークプロトコル 処理やデバイスドライバ処理におけるタイムアウト処理、再実行処理に数多く利用
  • Linuxカーネルでは、実行してほしい時刻を指定して、ハンドラを登録します。ここでは説明のために、実 行してほしい時刻のことを起動時刻と呼ぶことにします。起動時刻を指定してタイマーリストにハンドラを登 録しておくと、ローカルタイマーソフト割り込みハンドラがこの起動時刻を監視し、指定した時刻が来たとき に登録したハンドラを呼び出してくれます

まとめ

グローバルもローカルもタイマー割り込みはハードウェア割り込み