僕の自宅サーバができるまで

周りでVPSを借り始める人がでてきて、最初の頃どんな設定したっけと思って振り返ってみることにした

環境

  • CentOS5.5 32bit
  • インストールはほぼ最小構成

特定ユーザーしかrootになれないように設定する

# arcrightを一般ユーザーとして作成
useradd arcright

# パスワード設定
passwd arcright

# wheelグループに追加
usermod -G wheel arcright

# vi /etc/pam.d/su(下記行のコメントアウトはずす)
auth       required     pam_wheel.so use_uid

sudo

# install
yum -y install sudo

# vi /usr/sbin/visudo
++arcright ALL=(ALL)      ALL

yum

# パッケージダウンロードの際最適なミラーサイトを自動選択するようにする
yum -y install yum-fastestmirror

# インストール済みパッケージのアップデート
yum -y update

# インストールして個別に項目を作るまでもないものたち
yum -y install wget
yum -y install zsh
yum -y install screen
yum -y install git (rpmforge)
yum -y install nmap
yum -y install yum-cron
yum -y install bind-utils
yum -y install w3m
yum -y install tmux
yum -y install telnet
yum -y install postfix
yum -y install man

rpmforge

yum -y install yum-priorities
vi /etc/yum.repos.d/CentOS-Base.repo
# 各セクションに下記追加
priority=1

rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
rpm -ivh http://apt.sw.be/redhat/el5/en/i386/RPMS.dag/rpmforge-release-0.5.1-1.el5.rf.i386.rpm

SELinux

# 現在の状態を確認
getenforce
=> Enforcing

# 無効化
setenforce 0

# 状態確認
getenforce
=> Permissive

# 起動時常に無効化
# vi /etc/sysconfig/selinux
---SELINUX=enforcing
+++SELINUX=disabled

NTP

# install
yum -y install ntp
設定ファイル
# vi /etc/ntp.conf

# ローカルネットワークでの時刻の同期を許可
---#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
+++restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

# 同期先サーバの設定変更
---server 0.rhel.pool.ntp.org
---server 1.rhel.pool.ntp.org
---server 2.rhel.pool.ntp.org
+++server -4 ntp.nict.jp
+++server -4 ntp.jst.mfeed.ad.jp
+++server -4 ntp-tk01.ocn.ad.jp
手動時刻同期/起動
# 同期先と時刻がずれすぎているとデーモンの起動ができないので手動で合わせる
ntpdate ntp.nict.jp

# デーモン起動
/etc/rc.d/init.d/ntpd start

# 自動起動するようにする
chkconfig ntpd on

ホスト名変更

# vi /etc/sysconfig/networkを編集して終わったらネットワーク再起動
/etc/init.d/network restart

SSH

OpenSSHを新しくしてみる(CentOSデフォルトのバージョンだとchroot標準でなかったりするので)

インストールされてるもの

# yum list installed | grep ssh
openssh.i386                             4.3p2-41.el5                  installed
openssh-clients.i386                     4.3p2-41.el5                  installed
openssh-server.i386                      4.3p2-41.el5                  installed

rpm生成

wget http://ftp.kddlabs.co.jp/OpenBSD/OpenSSH/portable/openssh-5.5p1.tar.gz
tar zvxf openssh-5.5p1.tar.gz
cd openssh-5.5p1
cd contrib
rm redhat以外のディレクトリ
tar cvzf openssh-5.5p1.tar.gz
rpmbuild -tb --clean openssh-5.5p1.tar.gz
# 参考:http://centossrv.com/patio/patio.cgi?mode=view&no=1659
# 参考のとおりコメンアウトしといた(今みると回答更新されてた。rpmbuildこけるのは変数名のミスらしい)

rpmで生成したものをインストールする

# /usr/src/redhat/RPMS/i386とかにあるので適当に
rpm -Uvh /usr/src/redhat/RPMS/i386/openssh-*
sshd設定
# vi /etc/ssh/sshd_config

# プロトコルSSH2でしか接続できないようにする
---#Protocol 2,1
+++Protocol 2

# ログを/var/log/secureに記録する
---#SyslogFacility AUTH
+++SyslogFacility AUTHPRIV

# ssh接続の際rootではログインできないようにする
---#PermitRootLogin yes
+++PermitRootLogin no

# パスワードでのログインを禁止(鍵認証のみ有効)
---#PasswordAuthentication yes
+++PasswordAuthentication no

# パスワードなしでのログインを禁止
---#PermitEmptyPasswords no
+++PermitEmptyPasswords no ← パスワードなしでのログインを禁止

Paco

ソースでインストールしたものを管理する。以後ソースインストールはすべてPacoを通す
導入は過去の記事のまんまだったのでそちら参照

Ruby

wget ftp://core.ring.gr.jp/pub/lang/ruby/ruby-1.8.7-p249.tar.gz
tar xvzf ruby-1.8.7-p249.tar.gz
cd ruby-1.8.7-p249

./configure
make
paco -D make install

RubyGems

wget http://rubyforge.org/frs/download.php/60718/rubygems-1.3.5.tgz
tar zxvf rubygems-1.3.5.tgz
cd rubygems-1.3.5
paco -D ruby setup.rb

PostgreSQL

インストール
wget ftp://ftp2.jp.postgresql.org/pub/postgresql/source/v8.4.2/postgresql-8.4.2.tar.gz
cd postgresql-8.4.2
./configure
make
su
paco -D make install
adduser postgres
mkdir /usr/local/pgsql/data
chown postgres /usr/local/pgsql/data
su - postgres
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data >logfile 2>&1 &
自動起動設定
cp /usr/local/src/postgresql-8.4.2/contrib/start-scripts/linux /etc/init.d/postgresql
chmod 755 /etc/init.d/postgresql

chkconfig --add postgresql
chkconfig postgresql on

Apache

インストール
yum install -y httpd
設定ファイル
# vi /etc/httpd/conf/httpd.conf

#エラーページでOS名を表示しない
--ServerTokens OS
++ServerTokens Prod

#サーバー名
--ServerName www.example.com:80
++ServerName hogehoge.jp:80

#エラーページでApacheのバージョンを表示しない
--ServerSignature On
++ServerSignature Off

MySQL

インストール
yum install -y mysql-server mysql mysql-devel
設定ファイル
# vi /etc/my.cnf
++default-character-set=utf8

Passenger

現在の状態

  • Svnサーバ
  • Gitリモートサーバ
  • Web公開用サーバ
  • 作業用サーバ

構築は絶賛放置中でApacheも今はとめてあるけど用途はこんな感じ。
chroot導入途中で止まっている。これをすると他のユーザーにサーバを使ってもらったりしやすくなる(と思ってる

自宅サーバあるとあるで便利だけどVPSのほうが電気代とか心配しなくていいのでいいのかもしれない

参考サイト

非常にお世話になってる。ありがとうございます