【Linux】 CentOS でWebサーバー構築

【2014-7-10】書き直しました。

http://kzy52.com/entry/2014/07/10/063620


rootパスワードを変更する

・sshでログインし「passwd」コマンドでパスワードを変更する

$ ssh root@[ホスト名]
$ passwd

一般ユーザーを作成する

$ useradd [ユーザー名]
$ passwd [ユーザー名]
$ usermod -G wheel [ユーザー名]

sudoの設定

・コメントを外す。

$ visudo

# %wheel        ALL=(ALL)       ALL
↓
%wheel        ALL=(ALL)       ALL

SSHの設定

・先ほど作成したユーザーでサーバーへログインする

# local

$ ssh [ユーザー名]@[ホスト名]

・ディレクトリを作成する

$ cd $HOME
$ mkdir .ssh
$ chmod 700 .ssh

・ローカルマシンでRSA鍵を作成し、公開鍵をサーバーへ送る

# local

$ ssh-keygen
$ scp ~/.ssh/id_rsa.pub [ユーザー名]@[ホスト名]:.ssh

・再度、一般ユーザーでサーバーへログインし、公開鍵のファイル名とパーミッションを変更する

# local

$ ssh [ユーザー名]@[ホスト名]
$ cd .ssh
$ mv id_rsa.pub authorized_keys
$ chmod 600 authorized_keys

・ローカルマシンから接続確認する。

$ ssh [ユーザー名]@[ホスト名]

・SSH設定変更

$ sudo vim /etc/ssh/sshd_config

Port [ポート番号] #ポート番号変更
PermitRootLogin no #rootによるログインを禁止
PubkeyAuthentication yes #公開鍵認証を許可
AuthorizedKeysFile      .ssh/authorized_keys #認証キーを配置するパス
PasswordAuthentication no #パスワードによるログインを禁止
PermitEmptyPasswords no #空のパスワードでのログインを禁止
AllowUsers [ユーザー名] #追加したユーザーでSSH接続できるようにする
UsePAM no # 「PasswordAuthentication no」にした場合はこちらもnoにする

・再起動

$ sudo /etc/init.d/sshd restart

・ローカルマシンにログイン情報を設定しておくと便利

# local

$ vim ~/.ssh/config

Host hoge
  HostName [ホスト名]
  User [ユーザー名]
  Port [ポート番号]

「$ ssh hoge」でログインできるようになる

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

・ファイルを新規作成し以下内容を記述(解放するポートは適宜修正すること)

$ sudo vim /etc/sysconfig/iptables

*filter
:INPUT   ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT  ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]

-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# SSH, HTTP, FTP1, FTP2, MySQL
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80    -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 20    -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21    -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306  -j ACCEPT

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited

COMMIT

・再起動

$ sudo /etc/rc.d/init.d/iptables restart

パッケージのアップデート

$ sudo yum update

・「Error: File /var/cache/yum/x86_64/6/epel/metalink.xml is not XML」というエラーが表示される場合

$ sudo yum clean all

MySQLのインストール

・remiリポジトリを登録する

$ sudo rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

・インストール

$ sudo yum --enablerepo=remi -y install mysql mysql-devel mysql-server

・MySQLの設定

$ sudo cp /etc/my.cnf /etc/my.cnf.org
$ sudo vim /etc/my.cnf

[mysqld]
character-set-server = utf8
skip-character-set-client-handshake

[mysql]
default-character-set = utf8

・起動、自動起動の設定

$ sudo service mysqld start
$ sudo chkconfig mysqld on

・初期設定

$ sudo mysql_secure_installation

Enter current password for root (enter for none): Enter
Set root password?(rootパスワード設定する?) [Y/n] Y
Remove anonymous users?(匿名ユーザー削除する?) [Y/n] Y
Disallow root login remotely?(リモートからのrootログインを拒否する?) [Y/n] Y
Remove test database and access to it?(テストDB削除する?) [Y/n] Y
Reload privilege tables now?(設定した内容を反映するか?) [Y/n] Y

Apacheのインストール

・インストールする

$ sudo yum install httpd

・Apacheの設定

$ sudo cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.orb
$ vim /etc/httpd/conf/httpd.conf

# ユーザーとグループの設定
User apache
Group apache

# Web サーバーにアクセスしたクライアントに返す情報
# レスポンスヘッダには「Server: Apache」という名前しか返されない
ServerTokens Prod

# エラーページなどに出力されるサーバー情報
ServerSignature Off

・設定をチェック

$ sudo apachectl configtest

・起動、自動起動の設定

$ sudo /etc/rc.d/init.d/httpd start
$ sudo chkconfig httpd on

・アクセス確認
http://[ホスト名]

Rubyのインストール

・依存ライブラリのインストール

$ sudo yum install openssl-devel readline-devel zlib-devel

・rbenvのインストール

$ git clone git://github.com/sstephenson/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ source .bash_profile

・ruby buildのインストール

$ mkdir ~/.rbenv/plugins
$ cd ~/.rbenv/plugins
$ git clone git://github.com/sstephenson/ruby-build.git

・rbenv-gemsetインストール

$ cd ~/.rbenv/plugins
$ git clone git://github.com/jamis/rbenv-gemset.git
$ rbenv install 1.9.3-p392
$ rbenv global 1.9.3-p392
$ rbenv rehash

nginx インストール

$ sudo yum install nginx

・起動、自動起動の設定

$ sudo /etc/init.d/nginx start
$ sudo /sbin/chkconfig nginx on

PHPのインストール

・インストール

$ sudo yum install php-devel

・パッケージのインストール

$ sudo yum install php-mbstring php-mysql php-gd php-mcrypt php-pear

・PHPの設定

$ sudo vi /etc/php.ini

date.timezone = "Asia/Tokyo"
mysql.default_socket = /var/lib/mysql/mysql.sock
mysqli.default_socket = /var/lib/mysql/mysql.sock

・ php fpmのインストール

$ sudo yum install php-fpm
$ sudo /sbin/chkconfig php-fpm on
$ sudo /etc/init.d/php-fpm start