SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ツールがなくてもサーバー構築でたじろがない! 一撃シェルスクリプト道場

Apacheホスティング環境(Webサーバー+PHP実行環境)をコマンド一発で構築する一撃シェルスクリプト

ツールがなくてもサーバー構築でたじろがない! 一撃シェルスクリプト道場 第1回


  • X ポスト
  • このエントリーをはてなブックマークに追加

1. OSインストール直後の各種設定(iptables、パッケージのアップデートほか)

 ここでは次の処理を行います。

 ①yumパッケージの更新
 ②OpenSSHクライアントのインストール
 ③/etc/ssh/sshd_configの設定
 ④ファイアウォール(iptables)の設定
 ⑤SELinuxの無効化

①yumパッケージの更新

 最初にyum updateコマンドで、インストール済みのyumパッケージを更新しておきます。

 一撃シェルスクリプトの「対話式の入力は可能な限り回避する」という仕様に則り、yumコマンドの引数に-yを与え、yumコマンドがユーザーに問い合わせることすべてに対してyesを回答するようにします。手動でyumコマンドを実行するときには-yオプションを外すことで、「うっかり処理を続行してしまう」ことを防ぐメリットがありますが、ここでは自動実行できることを優先事項とします。

インストール済みyumパッケージの更新
# Yum Update
yum -y update

 なお、kernelやglibcなどをアップデートした際には再起動が必要ですが、再起動は一撃シェルスクリプトの最後に行うようにします。

②OpenSSHクライアントのインストール

 CentOS 6は、OSを最小構成でインストールすると、openssh-clientsパッケージがインストールされません。手元のPCからsshログインするには問題ないのですが、openssh-clientsパッケージがインストールされていないと、scpコマンドによるファイル転送を行うことができないので、これをインストールします。

OpenSSHクライアントのインストール
# openssh-clients install
[ ! 0 = $(rpm -q openssh-clients > /dev/null ; echo $?) ] && \
yum -y install openssh-clients

 なお、OSインストール時にopenssh-clientsパッケージを選択している場合もあるので、上記のコマンドでは、openssh-clientsパッケージの有無をrpmコマンドで確認し、終了ステータスが0でなければ、すなわちopenssh-clientsパッケージがインストールされていなければ、インストールを行うようにしています。

③/etc/ssh/sshd_configの設定

 これは好みに合わせた設定なので必須ではないのですが、今回はGSSAPI(Generic Security Service Application Programming Interface)を用いたシングルサインオンを使う予定がないので、sshd_configで無効化設定します。また、接続元ホストの名前解決を行う必要がないので、UseDNSをnoにします。これにより、sshクライアントからの接続で待たされる時間を短縮することができます。

/etc/ssh/sshd_configの設定
# SSHD Setting
cp -p /etc/ssh/sshd_config{,.orig}
sed -i 's/#GSSAPIAuthentication no/GSSAPIAuthentication no/' /etc/ssh/sshd_config
sed -i 's/GSSAPIAuthentication yes/#GSSAPIAuthentication yes/' /etc/ssh/sshd_config
sed -i 's/^GSSAPICleanupCredentials yes/GSSAPICleanupCredentials no/' /etc/ssh/sshd_config
sed -i 's/#GSSAPIStrictAcceptorCheck yes/GSSAPIStrictAcceptorCheck no/' /etc/ssh/sshd_config
sed -i 's/#GSSAPIKeyExchange no/GSSAPIKeyExchange no/' /etc/ssh/sshd_config
sed -i 's/#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config
service sshd reload

 上記コマンドですが、/etc/ssh/sshd_configを/etc/ssh/sshd_config.origとしてバックアップし、sedコマンドの-iオプションで/etc/ssh/sshd_configに変更を加えたのち、sshdを再読み込みしています。一撃シェルスクリプトの特徴として、1行1行に対して変更を加える場合、sedコマンドの-iオプションを使うことで、人の手を介さず非対話的に変更を加えるようにしています。

④ファイアウォール(iptables)の設定

 パケットフィルタリングを行うためのiptablesの設定を行います。テキストエディタを使って/etc/sysconfig/iptablesファイルに書く方法もありますが、なるべく使わずシンプルに行いたいので、今回はiptablesコマンドを用います。

ファイアウォール(iptables)の設定
# Firewawll Setting
service iptables stop
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
service iptables save
service iptables start
chkconfig iptables on

 設定内容ですが、上から次の処理を行っています。

行目 処理の内容
1行目 iptables停止
2行目 外部からのパケットはすべて拒否する
3行目 自ホストから外部へのパケットはすべて許可する
4行目 パケット転送はすべて拒否する
5行目 localhostからのアクセスをすべて許可
6行目 内部から行ったアクセスに対する外部からの返答アクセスを許可
7行目 外部からのTCP22番ポート(SSH)へのアクセスを許可
8行目 外部からのTCP80番ポート(HTTP)へのアクセスを許可
9行目 設定を保存
10行目 iptablesを起動
11行目 iptablesをスタートアップ登録する

⑤SELinuxの無効化

 SELinuxのポリシーは環境によって要件が様々なので、いったんdisableモードにします。permissiveモードにして、ポリシーに違反するアクセスに対し、ログに書き出して許可するようにしても構いません。

SELinuxの無効化
# SELinux Disable
cp -p /etc/selinux/config{,.orig}
sed -i 's/enforcing$/disabled/' /etc/selinux/config

次のページ
2. Apache(httpd)とPHPのインストール

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
ツールがなくてもサーバー構築でたじろがない! 一撃シェルスクリプト道場連載記事一覧

もっと読む

この記事の著者

濱田 康貴(ハマダ ヤスタカ)

サーバーエンジニアとして主にLinuxのWEBサーバーを設計、構築、運用を行っています。運用ツールの相棒としてシェルスクリプトやワンライナーは心強いパートナーと信じて疑わず、ブログでTIPSを公開しています。2009年5月のUSP友の会活動開始より参画し、現副会長。最近では、USP友の会で「一撃サーバー構築シェルスクリプト勉強会」を開催しているほか、日本で唯一のシェルスクリプト総合誌『シェルスクリプトマガジン』(毎月25日発売)で、隔月(偶数月号)連載「教えて先輩 サーバー運用お助けTips」を執筆しています。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/8434 2015/04/02 19:58

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング