VirtualBox (Windows) 上に CentOS 7 をインストールする

<i class="fa fa-puzzle-piece"></i> 導入
=======================================
[VirtualBox] は、複数の[仮想マシン]を作成し動作させることができる無償のアプリケーションソフトウェアです。このアプリケーションを使って、[Linuxを利用したOS]の一つであり無償で利用できる [CentOS] の最新版を、WindowsのゲストOSとしてインストールします。

**開発環境の** Webサーバーとして利用することを想定しています。使い勝手を優先し、**セキュリティを低下させる設定を紹介している** 部分があるのでご注意ください。デザインの変更などについては私の趣味に依るところなので、自分に合わせて設定してください。また、デスクトップ環境として CentOS 7 デフォルトの [GNOME 3] を使用しています。

[VirtualBox]: https://ja.wikipedia.org/wiki/VirtualBox
[仮想マシン]: https://ja.wikipedia.org/wiki/%E4%BB%AE%E6%83%B3%E6%A9%9F%E6%A2%B0 "仮想機械（かそうきかい、仮想マシン、バーチャルマシン、英語: virtual machine、VM）とは、コンピュータの動作をエミュレートするソフトウェアやフレームワークである。また、エミュレートされた仮想のコンピュータそのものも仮想機械という。仮想機械によって、1つのコンピュータ上で複数のコンピュータやOSを動作させたり、別のアーキテクチャ用のソフトウェアを動作させることができる。"
[Linuxを利用したOS]: https://ja.wikipedia.org/wiki/Linux%E3%83%87%E3%82%A3%E3%82%B9%E3%83%88%E3%83%AA%E3%83%93%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3 "Linuxディストリビューションとは、Linuxを、一般利用者が導入（インストール）したり、利用できる形にまとめ上げたもの（頒布形態）。GNU/Linuxディストリビューションとも。"
[CentOS]: https://ja.wikipedia.org/wiki/CentOS "CentOS（セントオーエス）は、Red Hat Enterprise Linux（以下「RHEL」と呼ぶ）との完全互換を目指したフリーのLinuxディストリビューションである。レッドハットは、RHELに含まれているソフトウェアを オープンソースライセンスに基づき そのソースコードを無償公開している。CentOSは、このソースコードを用いることにより、同社の商標、商用パッケージ等を含まない形でリビルドされている。CentOSは、White Box Enterprise Linux、Scientific Linux等を含めて、一般に「RHELクローン」と呼ばれることもある。"
[GNOME 3]: https://ja.wikipedia.org/wiki/GNOME "GNOME（グノーム、ノーム、GNU Network Object Model Environment、グニュー・ネットワーク・オブジェクト・モデル・エンバイロメント）は、X Window System上で動作するデスクトップ環境、またはその開発プロジェクトである。GUIツールキットとして、GTK+を採用し、Linuxや各種BSDなどで動作する。Debian GNU/Linux、Red Hat Enterprise Linux、Fedora、CentOS、Vine Linuxなどで標準のデスクトップ環境として採用されている。ライセンスはGNOMEライブラリはLGPL、アプリケーションはGPLである。"

<i class="fa fa-download"></i> 仮想マシンの作成とCentOSのインストール [^VirtualBox] [^CentOS7]
==============================================================================================

[^VirtualBox]: [CentOS 7 を VirtualBox にインストールし、Web サーバーの設定を行う(かなり変更点あり): ある SE のつぶやき](http://fnya.cocolog-nifty.com/blog/2014/07/centos-7-virtua.html)
[^CentOS7]: [[Linux] CentOS 7.0 をインストールする](http://www.ipentec.com/document/document.aspx?page=linux-centos-70-install)

➀ CentOSのダウンロード
-----------------------
1. [Download CentOS] の「DVD ISO」をクリックします。
2. 最寄りのミラーサイト一覧が表示されるので、適当なURLを選んで CentOS の[ISOイメージ]をダウンロードします。
3. [Manuals/ReleaseNotes - CentOS Wiki] から、ダウンロードしたISOイメージに対応するハッシュ値を捜し、ダウンロードしたISOイメージのSHA-256ハッシュ値と一致するか確かめます。例えば CentOS 7.0.1407 の場合、[Manuals/ReleaseNotes/CentOS7/Japanese - CentOS Wiki] の `CentOS-7.0-1406-x86_64-DVD.iso` の左に記載されているハッシュ値と比較します。

[Download CentOS]: https://www.centos.org/download/
[ISOイメージ]: https://ja.wikipedia.org/wiki/ISO%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8 "ISOイメージは、国際標準化機構 (ISO) の定義した形式の光ディスク用アーカイブファイル（ディスクイメージ）。このフォーマットは多くのソフトウェアベンダーがサポートしている。ISOイメージファイルの拡張子は .iso とされることが多い。ISO と呼ばれるのは、CD-ROM媒体で使われる ISO 9660 ファイルシステム に由来するが、ISO 9660 を拡張し互換性を保持しているUDFファイルシステムもISOイメージに格納できる。"
[Manuals/ReleaseNotes - CentOS Wiki]: https://wiki.centos.org/Manuals/ReleaseNotes/#head-4639395a85ac8e5270bdaee1be91baa877e5740e
[Manuals/ReleaseNotes/CentOS7/Japanese - CentOS Wiki]: https://wiki.centos.org/Manuals/ReleaseNotes/CentOS7/Japanese#head-2989d20981309ae4c895c6fd2869a043bf2eebfe

② VirtualBoxのインストール
---------------------------
1. [Downloads – Oracle VM VirtualBox] から、Windows版 VirtualBox の最新版をダウンロードします。
2. ダウンロードした実行ファイルのSHA-256ハッシュ値が、ダウンロードリンクの下の方にある「SHA256」checksumsファイルに記載されているハッシュ値と一致するか確認します。 (ダウンロードした実行ファイル名の左に記載されているハッシュ値)
3. VirtualBoxをインストールします。

[Downloads – Oracle VM VirtualBox]: https://www.virtualbox.org/wiki/Downloads

③ 仮想マシンの作成
-------------------
1.  VirtualBox (Oracle VM VirtualBox マネージャー) を起動し、左上の ![新規] をクリックすると、「仮想マシンの作成」ダイアログが開きます。
2.  **名前とオペレーティングシステム**  
    任意の _名前_ を入力し、_タイプ_ は _Linux_ 、 _バージョン_ は _Red Hat (64bit)_ を選択して「次へ」
3.  **メモリーサイズ**  
    メモリ (RAM) は最低でも512MiB必要です。私は`1024MB`にしました。
4.  **ハードドライブ**  
    `仮想ハードドライブを作成する` を選択して「作成」すると、「仮想ハードドライブの作成」ダイアログが開きます。
    1.  _ハードドライブのファイルタイプ_ は、`VDI (VirtualBox Disk Image)` を選択したまま「次へ」
    2.  _物理ハードドライブにあるストレージ_ は、`固定サイズ` を選択して「次へ」
    3.  _ファイルの場所とサイズ_ では、CentOSをインストールする仮想ドライブの容量を指定して、仮想ドライブと仮想マシンを「作成」します。私は `16.00GB` としました。

ゲストOSウィンドウをフォーカスすると、キーボードがゲストOSにキャプチャーされます。ゲストOSウィンドウの画面内をクリックすると、マウスがゲストOSにキャプチャーされます。 **キーボードの右側のCtrlキー (ゲストOSウィンドウ右下に表示されているホストキー) を押すと、マウスとキーボードの制御がホストOS (Windows) 側に移ります。**

[新規]: https://qiita-image-store.s3.amazonaws.com/0/30177/0e5cd1d9-10b5-7c71-935f-00a210c16607.png

④ CentOSのインストール
-----------------------
1.  VirtualBox マネージャーにて、作成した仮想マシンが選択された状態で、左上の ![起動] をクリックします。
2.  「起動ハードディスクを選択」ダイアログが表示されるので、プルダウンメニュー右の ![仮想光学ディスクファイルの選択…] からダウンロードしておいたISOイメージを選択して「起動」します。
3.  CentOSのインストーラーが起動するので、そのままEnterキーを押します。  
    ![](https://qiita-image-store.s3.amazonaws.com/0/30177/2e3d86c5-0fcb-b589-9127-bd556c2a84b0.png)
4.  **インストール時に使用する言語**  
    下の検索窓に `j` などと入力すると、すぐに _日本語 Japanese_ が見つかります。
5.  **インストールの概要**
    * 「ソフトウェアの選択」を選択し、左の _ベース環境_ から _サーバー (GUI使用)_ を選択して「完了」します。
    * 「インストール先」を選択し、何もせずに「完了」します。
    * 「ネットワークとホスト名」を選択し、「ネットワークとホスト名」設定画面の右上にあるスイッチを ![オン] にして「完了」します。
6.  **ユーザーの設定**  
    長いパスワードやマルチバイト文字が入ったパスワードは認証に失敗する場合があります。**[記号や暗号化方式の互換性] に目を通しておいてください。**
    * 「rootパスワード」を選択し、任意の _root パスワード_ を入力して「完了」
    * 「ユーザーの作成」を選択し、任意の _フルネーム・ユーザー名_ と _パスワード_ を入力、`sudo` コマンドと `sudoedit` コマンドを有効にするため _このユーザーを管理者にする_ にチェックを入れて「完了」
7.  しばらく経つとCentOSのインストールが完了するので、設定画面右下の「再起動」をクリックします。
8.  再起動後、初期セットアップ画面が表示されます。「ライセンス情報」を選択し、同意できるなら _ライセンス契約に同意します。_ にチェックを入れて「完了」し、「設定の完了」をクリックします。
9.  ログイン画面に切り替わるので、先ほど作成したユーザーを選択します。
10. 「ようこそ」ダイアログが表示されます。
    1.  _日本語_ が選択されているのでそのまま「次へ」
    2.  **入力ソース**  
        ここで選択しても反映されないのでそのまま「次へ」
    3.  **オンラインアカウント**  
        そのまま「次へ」
    4.  「Start using CentOS Linux」をクリックしてセットアップを完了します。
11. ゲストOS上部のGNOMEパネル右側にある ![jaマーク] をクリックし、 _日本語 (Kana Kanji)_ を選択して日本語入力ができるようにします。

[起動]: https://qiita-image-store.s3.amazonaws.com/0/30177/9ab7aa84-d4bf-6633-c16d-da72489083d1.png
[仮想光学ディスクファイルの選択…]: https://qiita-image-store.s3.amazonaws.com/0/30177/5dd0cf52-e157-4cde-a221-097d846a9893.png
[オン]: https://qiita-image-store.s3.amazonaws.com/0/30177/6567e598-4af1-ac30-d28b-6d5b484be7db.png
[記号や暗号化方式の互換性]: http://qiita.com/100/items/dd13912f1cf5ea14d42a#-記号や暗号化方式の互換性
[jaマーク]: https://qiita-image-store.s3.amazonaws.com/0/30177/8aee06c8-1f4d-b7c9-5277-e0672badd07d.png

<i class="fa fa-exchange"></i> マウス統合などの有効化
=====================================================
マウス統合を有効にすると、Ctrlキーを押したりしなくても、ゲストOSとホストOSのあいだでマウスの制御が自動で切り替わるようになります。

① RPMパッケージのインストール
---------------------------
Guest Additions のビルドに必要なソフトウェアは、初期状態ではインストールされていません。

1.  ゲストOS上部のGNOMEパネルから、 _アプリケーション_ ▸ _お気に入り_ ▸ _端末_ を起動します。  
    ![](https://qiita-image-store.s3.amazonaws.com/0/30177/218e5cb7-56aa-9205-f31e-38b30dea51d2.png)
2.  端末で以下のように入力し、ビルドに必要なRPMパッケージをインストールします。合わせて各RPMパッケージをアップデートしておきます。

```sh
# RPMパッケージのアップデート
sudo yum upgrade
# RPMパッケージのインストール
sudo yum install kernel-devel gcc
```

`yum` コマンドを実行すると、依存性の解決などが行われたあと `Is this ok [y/d/N]: ` と訊ねられるので、`y` を入力しEnterキーを押します。また、ローカルに置かれている RPM-GPG-KEY-CentOS-7 から公開鍵を取り込んでも良いか訊ねられるので、同じく `y` を入力しEnterキーを押します。

アップデートとインストールが完了したら、Linuxカーネルのアップデートを反映するため、OSを再起動します。

② Guest Additionsのインストール
--------------------------------
1.  ゲストOSウィンドウのファイルメニューから、 _デバイス_ ▸ _CD/DVDデバイス_ ▸ _Guest Additions のCDイメージを挿入…_ を選択します。  
    ![](https://qiita-image-store.s3.amazonaws.com/0/30177/a5e82583-20c9-f469-05cf-db56d159ebe1.png)
2.  ゲストOS側で _"VBOXADDITIONS\_4.3.16\_95972" には自動的に起動することを意図したソフトウェアが含まれています。実行してみますか?_ といったダイアログが表示されるので、「実行する」を選択してユーザーのパスワードで「認証」します。
3.  マウス統合を完全に有効化するため、ゲストOS上部のGNOMEパネル右端のユーザー名をクリックし、一旦「ログアウト」して再度ログインします。  
    ![](https://qiita-image-store.s3.amazonaws.com/0/30177/f51400c1-6523-4ae1-3189-8b2457eaa18b.png)
4.  ゲストOSウィンドウのファイルメニューから、_デバイス_ ▸ _クリップボードの共有_ ▸ _双方向_ を選択します。同じように、 _デバイス_ ▸ _ドラッグ&ドロップ_ ▸ _双方向_ を選択します。

Guest Additions は、Linuxカーネル、または VirtualBox がアップデートされるたびにインストールし直す必要があります。

<i class="fa fa-file-text"></i> [gedit (テキストエディタ)] のカスタマイズ
=========================================================================
geditを起動した状態でGNOMEパネルの ![gedit] をクリックし、表示されたプルダウンメニューから _設定_ を選択します。

*  **表示** タブ
    * _行番号を表示する_ にチェックを入れる
    * _カーソルのある行を強調表示する_ にチェックを入れる
    * _対応するカッコを強調表示する_ にチェックを入れる
*  **エディター** タブ
    * _タブの幅_ を`4`に
    * _自動インデントを有効にする_ にチェックを入れる
    * _保存する前にバックアップを生成する_ のチェックを外す
* **フォントと色** タブ
    * 「コバルト」を選択
* **プラグイン** タブ
    * 「大/小文字の変更」にチェックを入れる
    * 「並び替え」にチェックを入れる

[gedit (テキストエディタ)]: https://ja.wikipedia.org/wiki/Gedit "gedit（ジーエディット）は、GNOMEデスクトップの標準テキストエディタ。通常のテキストエディタとしての機能に加え、複数のプログラミング言語に対応したハイライト表示、コードスニペットの追加といった、プログラム開発者向けの機能も有している。キー操作はWindows系でWindowsに慣れたユーザーにも使いやすい。"
[gedit]: https://qiita-image-store.s3.amazonaws.com/0/30177/07ad09e2-9df0-7353-c87b-714b169ac3a4.png


<i class="fa fa-terminal"></i> 端末エミュレータに関する設定
===========================================================
端末を起動後、端末のファイルメニューから _編集_ ▸ _プロファイルの設定_ を選択します。

*   **タイトルとコマンド** タブ
    * _ログインシェルとしてコマンドを実行する_ にチェックを入れて、端末起動時に `~/.bash_profile` が読み込まれるようにします。[^.bash_profile]
*   **色** タブ
    * _システムのテーマ色を利用する_ のチェックを外します。
    * _組み込みのスキーム_ で`黒地に白文字`を選択します。
*   **スクロール** タブ
    * _スクロールバックのサイズ_ で _無制限にする_ にチェックを入れます。

[^.bash_profile]: [Ubuntu 12.04 の gnome-terminal が ~/.bash_profile を読み込んでくれない問題 - キーボードをたたくとき](http://d.hatena.ne.jp/yascentur/20121207/1354881701)

<i class="fa fa-share-square"></i> デスクトップにショートカットを作る
=====================================================================
GNOME や [KDE] などのデスクトップ環境では、 **デスクトップエントリーファイル (*.desktop)** でアプリケーションの起動、またはURLの情報を表すことができます。デスクトップエントリーファイルは、Windowsにおけるショートカットファイル (*.lnk) に似ており、またGUI上では実際のファイル名と異なる名前が表示されます。[^*.desktop]

GNOMEパネルの _アプリケーション_ メニュー内に表示されているショートカットファイルの実体は `/usr/share/applications` にあります。デスクトップに置きたいアプリケーションのデスクトップエントリーファイルを、Altキーを押しながらデスクトップにドラッグ&ドロップし、 _ここへリンクを作る_ を選択します。

[KDE]: https://ja.wikipedia.org/wiki/KDE "KDE（ケーディーイー）は、クロスプラットフォームな統合アプリケーションを制作する国際的なフリーソフトウェア共同体。X Window System上などで動作するデスクトップ環境『KDE Software Compilation』などを提供している。このデスクトップ環境はGNOMEと双璧をなす存在であり、GPLなどのライセンスの下で提供されている。提供されるデスクトップ環境は、Qtなどのコアテクノロジの上で、ウェブブラウジングやファイル操作、マルチメディアの再生、オフィス作業など多くの用途のための数多くのソフトウェアが含まれており、Slackware、openSUSE、Kubuntu、Mandriva Linux、PCLinuxOS、TurbolinuxなどのLinuxディストリビューションの他、PC-BSDやDesktopBSDといったFreeBSDディストリビューションが標準で採用している。"
[^*.desktop]: [＠IT：GNOMEメニューにサブメニューや項目を追加するには](http://www.atmarkit.co.jp/flinux/rensai/linuxtips/717addgnomemenu.html)

<i class="fa fa-terminal"></i> 端末エミュレータ
-----------------------------------------------
`/usr/share/applications` にある「端末」のデスクトップエントリーファイル (実際のファイル名は gnome-terminal.desktop) は、そのまま実行するとルートフォルダーをカレントフォルダーとして実行することになります。

1. 「端末」のデスクトップエントリーファイルを、Ctrlキーを押しながらデスクトップにドラッグ&ドロップすることでコピーします。
2. デスクトップにコピーした「端末」を、テキストエディタにドラッグ&ドロップするなどして開き、以下のようにPathエントリーを追記します。[^Path]

```ini:gnome-terminal.desktop
                        ##############
                        ## 以上省略 ##
                        ##############

TryExec=gnome-terminal
Exec=gnome-terminal
Icon=utilities-terminal
Type=Application
X-GNOME-DocPath=gnome-terminal/index.html
X-GNOME-Bugzilla-Bugzilla=GNOME
X-GNOME-Bugzilla-Product=gnome-terminal
X-GNOME-Bugzilla-Component=BugBuddyBugs
X-GNOME-Bugzilla-Version=3.8.4
Categories=GNOME;GTK;Utility;System;TerminalEmulator;
StartupNotify=true
# ↓この行を追記
Path=/home/[ユーザー名]
```

[^Path]: [Ubuntu ディレクトリーエントリー・デスクトップエントリー その5 - デスクトップエントリーグループのエントリー（TryExec・Exec・Path・Terminal） - Ubuntu kledgeb](http://kledgeb.blogspot.jp/2013/05/ubuntu-5-tryexecexecpathterminal.html)

<i class="fa fa-lock"></i> セキュリティ関連の設定
=================================================
<i class="fa fa-file-text"></i> sudoeditなどで利用するテキストエディタ
----------------------------------------------------------------------
既定のテキストエディタは Vim なので、それ以外のテキストエディタを利用する場合は環境変数の設定が必要です。以下の `gedit` は利用するエディタに合わせて読み替えてください。

```sh:~/.bash_profile
# sudoeditコマンドで利用するテキストエディタを設定
export EDITOR=gedit
```

`source ~/.bash_profile` を実行し、設定を反映します。なお、EDITOR 環境変数の代わりに VISUAL 環境変数を利用することもできますが、[Composer] など EDITOR しか参照しないコマンドもあるので注意が必要です。

[Composer]: https://getcomposer.org/doc/03-cli.md#usage "EDITOR 環境変数で定義されているテキストエディタを使用して、ローカルの composer.json ファイルを開きます。"

<i class="fa fa-clock-o"></i> sudo・sudoeditコマンドで一度だけパスワードを要求
------------------------------------------------------------------------------
`sudo`・`sudoedit` コマンドで認証後、既定では5分経つと再度パスワードを要求されますが、このタイムアウトを無制限 (端末を閉じるまで) に変更することができます。

[sudo] の設定は `visudo` コマンドで変更することができますが、`visudo` コマンドも `sudoedit` コマンドと同じように _EDITOR_ 環境変数に指定されたテキストエディタを利用します。

CentOS 7 の初期設定だと _EDITOR_ 環境変数は引き継がれないので、`sudo EDITOR=gedit visudo` を実行します。これは、一時的にrootの _EDITOR_ 環境変数に `gedit` を設定して `visudo` コマンドを実行する構文です。`visudo` コマンドによって開かれたファイルを、以下のように修正します。

```ini:/etc/sudoers
                        ##############
                        ## 以上省略 ##
                        ##############

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

# sudoコマンドが再度パスワードを要求するまでの時間を無制限に
Defaults timestamp_timeout = -1
# ↑この行を追記

## Next comes the main part: which users can run what software on 
## which machines (the sudoers file can be shared between multiple
## systems).

                        ##############
                        ## 以下省略 ##
                        ##############
```

[sudo]: https://ja.wikipedia.org/wiki/Sudo "sudo（“su do”）は、UNIXおよびUnix系オペレーティングシステムのプログラムの1つで、ユーザーが別のユーザーの権限レベルでプログラムを実行するためのコマンドである。一般的に、ユーザーがスーパーユーザー（すなわち root）の特権レベルを利用する際に用いられることが多い。デフォルトではその別ユーザーのパスワード入力を求めてくるが、設定を変更すれば root のパスワードを求めるようにもできるし、端末（や擬似端末）につき1回だけパスワードを入力すればよいようにも、全くパスワード入力を求めないようにもできる。sudo は各コマンド実行を記録でき、スーパーユーザーとしてのログインの完全な代替として使う場合もある。例えば、Linuxディストリビューションの Ubuntu はそのような使い方をしている。"

<i class="fa fa-user"></i> suの設定
-----------------------------------
管理者ユーザー以外は使えないようにします。

```sh:/etc/pam.d/su
#%PAM-1.0
auth		sufficient	pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth		sufficient	pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the "wheel" group.
auth		required	pam_wheel.so use_uid
## ↑この行のコメントアウトを外す ##
auth		substack	system-auth
auth		include		postlogin
account		sufficient	pam_succeed_if.so uid = 0 use_uid quiet
account		include		system-auth
password	include		system-auth
session		include		system-auth
session		include		postlogin
session		optional	pam_xauth.so
```

<i class="fa fa-user-times"></i> rootでのGUIログインを禁止
----------------------------------------------------------
以下のように `/etc/pam.d/gdm-passwd` を書き換えることで、GNOMEのログイン画面で _アカウントが見つかりませんか?_ から _ユーザー名_ `root` と正しい _パスワード_ を入力しても、認証に失敗するようになります。[^gdm-passwd]

```coffeescript:/etc/pam.d/gdm-passwd
auth     [success=done ignore=ignore default=bad] pam_selinux_permit.so
auth        substack      password-auth
auth        optional      pam_gnome_keyring.so
auth        include       postlogin
# rootでのGUIログインを禁止
auth        required      pam_succeed_if.so user != root quiet
# ↑この行を追記

account     required      pam_nologin.so
account     include       password-auth

password    substack      password-auth
password    optional      pam_gnome_keyring.so use_authtok

session     required      pam_selinux.so close
session     required      pam_loginuid.so
session     optional      pam_console.so
-session    optional    pam_ck_connector.so
session     required      pam_selinux.so open
session     optional      pam_keyinit.so force revoke
session     required      pam_namespace.so
session     include       password-auth
session     optional      pam_gnome_keyring.so auto_start
session     include       postlogin
```

[^gdm-passwd]: [Fedora14 の GUI で root ログイン - はじめての自宅サーバ構築 - Fedora/CentOS - Fedora14 のインストール手順](http://kajuhome.com/fedora14_inst_02.shtml#n04)

<i class="fa fa-shield"></i> ファイアウォールの設定
---------------------------------------------------
不要なサービスについて、信頼する設定を取り消しておきます。 (SSHを利用しない場合の設定)

1.  GNOMEパネルから、 _アプリケーション_ ▸ _諸ツール_ ▸ _ファイアウォール_ を起動し、ユーザーのパスワードで「認証」します。
2.  上の方の _設定_ を _永続_ にして、設定の変更がOS起動時に適用されるようにします。
3.  左のメニューから _public_ ゾーンを選択します。
4.  _ssh_ サービスのチェックを外します。
5.  設定を反映するため、端末で`sudo systemctl restart firewalld`を実行してファイアウォールを再起動します。

初期状態では、ネットワークアダプタはいずれも _public_ ゾーンに属しています。

<i class="fa fa-level-down"></i> ホストOSからゲストOSに接続できるようにする
===========================================================================
① アダプターの追加
-------------------
1. 仮想マシンの電源を切った状態でなければ設定を変更できないため、仮想マシンを終了します。
2. VirtualBox マネージャーにて、対象の仮想マシンが選択された状態で、左上の ![設定] をクリックします。
3. 左のメニューから _ネットワーク_ を選択し、 _アダプター2_ タブを開きます。
4. _ネットワークアダプターを有効化_ にチェックを入れます。
5. _割り当て_ のプルダウンメニューから`ホストオンリーアダプター`を選択して「OK」

![](https://qiita-image-store.s3.amazonaws.com/0/30177/98b254e6-fd13-d65b-f82c-c4f6c7c310f5.png)

[設定]: https://qiita-image-store.s3.amazonaws.com/0/30177/bebeaabb-2217-9579-5d90-6c0ba07a8f0e.png

② IPアドレスの設定
-------------------
IPv4アドレスを自動的に割り振る[DHCPv4]サーバーを動かしていないので、接続を有効化する前に手動でIPアドレスを設定する必要があります。

1.  GNOMEパネルの右の方にある ![ネットワーク接続済みアイコン] から _ネットワークの設定_ を選択します。
2.  左のネットワーク一覧に`Ethernet`が2つあるので、![オフ] になっている方を選びます。
3.  「設定」ウィンドウ右下の ![歯車ボタン] をクリックします。
4.  左のリストから _Identity_ を選び、 _自動接続する_ にチェックを入れます。
5.  左のリストから _IPv4_ を選び、_アドレス_ のプルダウンメニューで _手動_ を選択します。
6.  _アドレス_ に`192.196.56.2`〜`192.196.56.254`のいずれかのIPアドレス、 _ネットマスク_ に`255.255.255.0`、 _ゲートウェイ_ に`0.0.0.0`を入力して適用
    同じホストオンリーアダプターを利用している仮想マシンが他にあれば、同じIPアドレスを設定しないように注意してください。
7.  ![オン] にします。

![](https://qiita-image-store.s3.amazonaws.com/0/30177/54b03220-6eeb-54d1-e8ec-e26de54fc050.png)

[DHCPv4]: https://ja.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol "Dynamic Host Configuration Protocol（ダイナミック ホスト コンフィギュレーション プロトコル、DHCP）とは、コンピュータがネットワーク接続する際に必要な情報を自動的に割り当てるプロトコルのことをいう。"
[ネットワーク接続済みアイコン]: https://qiita-image-store.s3.amazonaws.com/0/30177/169ee6bc-a7a4-e447-12b3-096770c54fe1.png
[オフ]: https://qiita-image-store.s3.amazonaws.com/0/30177/93f94ca4-c85e-1c5c-2cbf-440ad5a7ead0.png
[歯車ボタン]: https://qiita-image-store.s3.amazonaws.com/0/30177/d295a5a7-a42b-d031-575f-b98ad1eaba13.png

<i class="fa fa-exclamation-triangle"></i> 接続できない場合
-----------------------------------------------------------
VirtualBoxのネットワーク設定が勝手に書き換わり、急にホストOSからゲストOSに接続できなくなることがあります。以下のようにして、元の設定に戻します。[^ホストオンリーネットワーク]

1.  VirtualBox マネージャーのファイルメニューから、_ファイル_ ▸ _環境設定_ を選択します。  
    ![](https://qiita-image-store.s3.amazonaws.com/0/30177/483e94d0-03a1-b22d-43dc-a2d1d3863b35.png)
2.  左のメニューから _ネットワーク_ を選択し、 _ホストオンリーネットワーク_ タブを開きます。
3.  右の方の ![ホストオンリーネットワークを編集] をクリックして、「ホストオンリーネットワークの詳細」ダイアログを出します。
4.  _アダプター_ タブで _IPv4 アドレス_ に`192.168.56.1`、 _IPv4 ネットマスク_ に`255.255.255.0`を入力して「OK」  
    ![](https://qiita-image-store.s3.amazonaws.com/0/30177/5769fbd6-22db-09c1-e548-ef7ccde11463.png)

なお、前述のファイアウォールによってサービスを許可していない場合も接続できませんので、そちらもご確認ください。

[^ホストオンリーネットワーク]: [Virtualbox：ホストオンリーネットワークに接続できない対処 | よしまさのブログ](http://blog.offline-net.com/2014/03/30/virtualbox-host-only-network-unable-to-connect/)
[ホストオンリーネットワークを編集]: https://qiita-image-store.s3.amazonaws.com/0/30177/05152084-354a-2468-43f7-d18a59bae261.png

<i class="fa fa-cogs"></i> その他の初期設定
===========================================
<i class="fa fa-search"></i> IPv6アドレスを正引きできるようにする
-----------------------------------------------------------------
[回線事業者]に [NTT(フレッツ)] を利用しており、かつ [IPv6] が利用できない環境の場合[AAAAフィルター]によってIPv6アドレスを[正引き]できない問題が発生します。そこで、NTT America が NTT 顧客向けに提供している [DNS] サーバーを利用します。[^129.250.35.250/31]

1. GNOMEパネルの右の方にある ![ネットワーク接続済みアイコン] から _ネットワークの設定_ を選択します。
2. 左のネットワーク一覧に `Ethernet` が2つあるので、右に表示される情報に _DNS_ が含まれる方 (NAT接続している方のアダプター) を選びます。
3. 「設定」ウィンドウ右下の ![歯車ボタン] をクリックします。
4. 左のリストから _IPv4_ を選びます。
5. _DNS_ の _自動_ を ![オフ] にし、 _サーバー_ に `129.250.35.250` と `129.250.35.251` を設定します。右の ![プラスボタン] をクリックすることで、複数のサーバーを設定できます。
6. 「適用」をクリックし、アダプターを一旦 ![オフ] にして再度 ![オン] にします。

![](https://qiita-image-store.s3.amazonaws.com/0/30177/4f378c88-eb5f-c5d3-5612-3d1f2a99f1fd.png)

[回線事業者]: https://ja.wikipedia.org/wiki/%E9%9B%BB%E6%B0%97%E9%80%9A%E4%BF%A1%E4%BA%8B%E6%A5%AD%E8%80%85 "電気通信事業者（でんきつうしんじぎょうしゃ）とは、一般に固定電話や携帯電話等の電気通信サービスを提供する会社の総称。「音声やデータを運ぶ」というところから通信キャリア（または単にキャリア）と呼ばれることもある。携帯電話専業の会社については携帯会社と呼ぶことが多い。日本においては、電気通信事業法（昭和59年法律86号）に基づき電気通信役務（電気通信事業）を行う者を指す。"
[NTT(フレッツ)]: https://ja.wikipedia.org/wiki/%E3%83%95%E3%83%AC%E3%83%83%E3%83%84 "フレッツ (FLET'S) とは東日本電信電話株式会社（NTT東日本）及び西日本電信電話株式会社（NTT西日本）の地域IP網へのアクセスを提供するサービスである。地域IP網はインターネットサービスプロバイダ (ISP) とPOIで相互接続しているため、ユーザーは地域IP網を通してインターネットに接続することになる。この場合、フレッツは（ISPとの対比における）回線事業者に該当することになる。"
[IPv6]: https://ja.wikipedia.org/wiki/IPv6 "Internet Protocol Version 6（インターネット プロトコル バージョン6）、IPv6（アイピーブイ6、アイピーバージョン6）は、Internet Protocolの一種で、OSI参照モデルにおいてネットワーク層に位置付けられるプロトコルである。現在、主流のIPv4にかわるものとして、それまで約 232（= 約42億）個であったIPアドレスを約 2128（= 約340澗）個まで使えるようにしたのが大きな特徴の一つである。"
[AAAAフィルター]: http://itpro.nikkeibp.co.jp/article/Keyword/20120912/422281/ "AAAA（クアッドエー）フィルターは、IPv6インターネット上のサーバーにつながらなかったり遅延が生じたりする恐れのあるユーザーを救済する手段の一つ。具体的には、「AAAAレコード」をユーザーが受け取らないようフィルタリングする。AAAAレコードとは、サーバーのドメイン名に対応するIPv6アドレスを通知するDNSのレコードのこと。"
[正引き]: http://e-words.jp/w/E6ADA3E5BC95E3818D.html "DNSなどを使って、ホスト名(ドメイン名)に対応するIPアドレスを調べること。インターネット上のサービスを利用する際に日常的に行われている。これとは逆にIPアドレスから対応するホスト名を調べることを「逆引き」という。ホスト名からは常に対応するIPアドレスを割り出すことができるが、IPアドレスには必ずしもホスト名を割り当てる必要は無いため、逆引きは失敗することがある。"
[DNS]: https://ja.wikipedia.org/wiki/Domain_Name_System "Domain Name System（ドメイン ネーム システム、DNS）はインターネットを使った階層的な分散型データベースシステムである。1983年に情報科学研究所 (ISI) のポール・モカペトリスとジョン・ポステルにより開発された。現在では主にインターネット上のホスト名や電子メールに使われるドメイン名と、IPアドレスとの対応づけを管理するために使用されている。"
[プラスボタン]: https://qiita-image-store.s3.amazonaws.com/0/30177/65cff71d-361c-9454-0af2-87eef5b8f02e.png
[^129.250.35.250/31]: [129.250.35.250/251はPublic DNSではありません。](http://aimless.jp/blog/archives/2089)

<i class="fa fa-desktop"></i>  ブランクスクリーン (スクリーンセーバー) の無効化
-------------------------------------------------------------------------------
1. GNOMEパネル右端のユーザー名をクリックし、 _設定_ を選択します。
2. 「ハードウェア」の「電源」から「ブランクスクリーン」を `しない` に設定します。

<i class="fa fa-sign-in"></i> 自動ログイン
------------------------------------------
1.  GNOMEパネル右端のユーザー名をクリックし、ユーザーアイコンをクリックします。  
    ![](https://qiita-image-store.s3.amazonaws.com/0/30177/8ba6c542-77c9-7191-63fe-e44c9815e569.png)
2.  右上の「ロック解除」をクリックして認証したあと、 _自動ログイン_ を ![オン] に切り替えます。

<i class="fa fa-folder-open"></i> ファイルマネージャの設定
----------------------------------------------------------
1. デスクトップのhomeなどをダブルクリックして開いた状態で、![ファイル] をクリックし、 _設定_ を選択します。
2. **表示** タブで、 _フォルダーをファイルより前に表示する_ と _隠しファイルとバックアップファイルを表示する_ にチェックを入れます。

[ファイル]: https://qiita-image-store.s3.amazonaws.com/0/30177/07539d59-a70e-e690-62e5-4864a0c84aaf.png

<i class="fa fa-language"></i> ログイン時に直接入力モードに
-----------------------------------------------------------
1.  GNOMEパネル右側の [インプットメソッド] のアイコンをクリックして、表示されたプルダウンメニューから _設定_ を選択します。  
    ![](https://qiita-image-store.s3.amazonaws.com/0/30177/caf9399d-09d6-7633-3461-dbc7ac94a9e7.png)
2.  「IBus かな漢字の設定」ダイアログが開くので、 _動作_ タブの _初期入力モード_ で`直接入力`を選択して「閉じる」

[インプットメソッド]: https://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%B3%E3%83%97%E3%83%83%E3%83%88%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89 "インプットメソッド (Input method, IM, 文章入力方式) とは、コンピュータに文字を入力する為のソフトウェアである。OS の一部として提供される場合もある。欧文のキーボードから直接入力することのできない CJKV 文字などの入力に使用される。パソコンやワークステーションなどから、携帯情報端末、携帯電話などにおいても使用される。"

<i class="fa fa-folder"></i> ホストOSとゲストOSでファイルを共有する
===================================================================
[Guest Additions をインストール](#-マウス統合などの有効化) しておく必要があります。

① ホストOS側のフォルダーを指定
-------------------------------
1.  VirtualBox マネージャーにて、対象の仮想マシンが選択された状態で、左上の ![設定] をクリックします。
2.  左のメニューから _共有フォルダー_ を選択します。
3.  右上の ![新規共有フォルダーを追加します。] をクリックします。
4.  「共有フォルダーの追加」ダイアログが表示されます。
    * ホストOS側の _フォルダーのパス_ と、ゲストOS側でマウントするときに利用する _フォルダー名_ を入力します。
    * ゲストOS側から書き換える必要が無ければ _読み込み専用_ にチェックを入れます。
    * _自動マウント_ にチェックを入れます。
    * _永続化する_ にチェックを入れます。

[新規共有フォルダーを追加します。]: https://qiita-image-store.s3.amazonaws.com/0/30177/53000d98-3a44-29ad-5d81-f85cefe8af64.png

② ゲストOSのユーザーが共有フォルダーにアクセスできるようにする
---------------------------------------------------------------
共有フォルダーは、`/media/sf_[フォルダー名]` に自動的にマウントされます。[^自動マウント]

自動マウントされたフォルダー・ファイルの所有者は `root`、グループは `vboxsf`、権限は `0770` となるので、共有フォルダーにアクセスできるようにするユーザーを `vboxsf` グループに追加します。例えば Apache で利用するために `apache` ユーザーを `vboxsf` グループに追加するには、端末で `sudo gpasswd --add apache vboxsf` を実行します。

[^自動マウント]: [Windows7 のディレクトリを VirtualBox の CentOS にマウントする - clock-up-blog](http://blog.clock-up.jp/entry/2014/01/12/225532)

<i class="fa fa-wrench"></i> 任意のフォルダーにマウントする
-----------------------------------------------------------
永続的なマウントの設定は `/etc/fstab` に記述するのが一般的です。しかし VirtualBox の共有フォルダーの場合、vboxsf[カーネルモジュール]の実行が遅いため、代わりにrc-local[サービス]を利用します。

rc-localはOS起動時に、`/etc/rc.d/rc.local` に記述したユーザー定義のシェルスクリプトを実行するサービスですが、既定では実行されないようになっています (サービス自体は有効)。端末で `sudo chmod u+x /etc/rc.d/rc.local` を実行して同ファイルに実行権限を与えることで、実行されるようになります。[^rc-local]

`/etc/rc.d/rc.local` の末尾に、`mount --bind /media/sf_example/test_directory /home/100/test_directory` のような [mount] コマンドを追記します。`/media/sf_example/test_directory` というフォルダーを、`/home/100/test_directory` と共有することになります。マウントポイントのフォルダー名 (後者) は、違っていてもかまいません。あらかじめマウントポイントである `test_directory` フォルダーを作成しておく必要があります。

[カーネルモジュール]: https://ja.wikipedia.org/wiki/%E3%83%AD%E3%83%BC%E3%83%80%E3%83%96%E3%83%AB%E3%83%BB%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB%E3%83%BB%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB "ローダブル・カーネル・モジュール（英: loadable kernel module, LKM）は、オペレーティングシステム (OS) の動作中のカーネルを拡張するコードを含むオブジェクトファイル。現行Unix系システムの多くやMicrosoft Windowsはローダブル・カーネル・モジュールをサポートしているが、呼称はそれぞれ異なる。例えばMac OS Xでは“kernel extension” (“kext”) と呼ぶ。他にもカーネル・ローダブル・モジュール (KLM) やカーネルモジュール (KMOD) とも呼ばれる。LKMは一般にCPUやM/Bなど新しいハードウェアやファイルシステムのサポート、通信プロトコル、システムコールを追加するために利用される。LKMの提供する機能が不要になれば、アンロードしメモリを解放することができる。"
[サービス]: https://ja.wikipedia.org/wiki/%E3%83%87%E3%83%BC%E3%83%A2%E3%83%B3_%28%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%29 "デーモン (Daemon) は、UNIXなどのマルチタスクオペレーティングシステム (OS) においてバックグラウンドプロセスとして動作するプログラムを意味する。ユーザーが直接対話的に制御するプログラムではない。典型的なデーモンは名前の最後尾に "d" が付く。例えば、syslogd はシステムログを扱うデーモン、sshd は外からのSSH接続要求を受け付けるデーモンである。"
[mount]: https://ja.wikipedia.org/wiki/Mount_(UNIX) "mount (UNIX) - Wikipedia"
[^rc-local]: [CentOS7のrc.local | ツチノコブログ](http://tsuchinoko.dmmlabs.com/?p=1371)

<i class="fa fa-user-plus"></i> フォルダー所有者などの変更
----------------------------------------------------------
`--options`パラメータに続けて指定するマウントオプションによって、フォルダー・ファイルの所有者・グループ・権限などを変更することができます。

| オプション |                          | 既定値 |
|------------|--------------------------|--------|
| uid        | 所有者                   | root   |
| gid        | グループ名               | root   |
| dmode      | フォルダーの権限 (8進数) | 0777   |
| fmode      | ファイルの権限 (8進数)   | 0777   |

例えば `mount --types vboxsf example /mnt/vboxsf/example --options uid=root,gid=vboxsf,dmode=0770,fmode=0770` は、 _自動マウント_ にチェックを入れた場合と同じ所有者・グループ・権限で `/mnt/vboxsf/example` にマウントすることになります。こちらもマウントポイントのフォルダーを作成しておく必要があります。

<i class="fa fa-shield"></i> SELinuxについて
--------------------------------------------
[SELinux] では、プロセスやファイルに _SELinuxセキュリティコンテキスト_ というラベルを付けて、どのラベルが付いているかによってアクセス権の有無を判断します。しかしvboxsfによって共有しているフォルダー・ファイルのラベルは`system_u:object_r:vmblock_t:s0`に固定されており、これを変更することはできません。したがって、共有フォルダーでポリシー違反が起こるような状態であれば、アクセス許可ルールが定義されたモデュールを作成してインストールする必要があります。

モジュールの作成やインストールについては、[Apache に関する SELinux の設定 (CentOS) - Qiita] などをご覧ください。

[SELinux]: https://ja.wikipedia.org/wiki/SELinux "SELinux（Security-Enhanced Linux : エスイーリナックス）は、アメリカ国家安全保障局がGPL下で提供しているLinuxのカーネルに強制アクセス制御 (MAC)機能を付加するモジュールの名称。名前から勘違いされることが多いが Linuxディストリビューションの一つではない。"
[Apache に関する SELinux の設定 (CentOS) - Qiita]: http://qiita.com/100/items/f7f43994568836b4a453 "SELinuxは、どのプロセスが、どのファイルやフォルダーに、どのような操作（読み取りや書き込み）ができるかを設定するLinuxの拡張機能です。ネットワーク関連のデーモン（サービス）のみを管理するtargetedポリシーと、SELinuxの機能をフルに利用するstrictポリシーがあります。この項目の解説は、targetedで動作している場合を対象としています。sestatusコマンド実行結果のPolicy from config file:項目を見れば、現在どのポリシーが設定されているかわかります。"

<i class="fa fa-power-off"></i> ホストOS終了時にゲストOSを終了する
==================================================================
<i class="fa fa-search"></i> ゲストOS側の設定
---------------------------------------------
デスクトップ環境がGNOMEの場合、電源ボタンなどを押したときの挙動はGNOMEによって制御されています。[^power]

1. dconfエディタをインストールします。  
   `sudo yum install dconf-editor`
1. GNOMEパネルから、 _アプリケーション_ ▸ _諸ツール_ ▸ _dconfエディタ_ を起動します。
1. サイドパネルで org.gnome.settings-daemon.plugins.power とたどります。
1. _button-power_ の値で _shutodown_ を選択し、dconfエディタを閉じます。

[^power]: [【VirtualBox】×ボタン等で CentOS 7 をシャットダウンしたい - QA@IT](http://qa.atmarkit.co.jp/q/9576#note_5349)

<i class="fa fa-terminal"></i> VirtualBoxの設定
-----------------------------------------------

PowerShellで以下のコマンドを実行します。`⦅仮想マシン⦆` には、仮想マシンのUUID、または仮想マシン名を入れます。

```sh
# ⦅仮想マシン⦆ 終了時に「シャットダウン シグナル送信」を実行する
&"$env:ProgramFiles\Oracle\VirtualBox\VBoxManage.exe" setextradata '⦅仮想マシン⦆' GUI/DefaultCloseAction Shutdown
```

仮想マシンを一度終了し、起動しなおします。この設定により、ウィンドウを閉じようとしたときに「仮想マシンを閉じる」ダイアログが表示されなくなります。[^DefaultCloseAction]

[^DefaultCloseAction]: [VirtualBoxでホストのシャットダウンにゲストのバーチャルマシンも連動させる パソコン鳥のブログ/ウェブリブログ](http://vogel.at.webry.info/201509/article_7.html)

<i class="fa fa-arrow-circle-right"></i> 参考ページ
===================================================