OSインストールのあとにやってること(Ubuntu14.04編)

# Ubuntuのインストール後にやることをまとめる
余ってたPCにCentOSを入れたらNIC周りのエラーが凄かったので，試しにUbuntu入れたら普通に動いたのでUbuntu使うことになりました．
インストールしたらやっとけ的な記事は，皆さんよく書いていらっしゃるので需要は少ないと思いますが，とりあえず書いておきます．
参考になるかどうか分かりませんが，以下のような方向けになります

- セキュリティ全くわからん
- SSHでリモートログインして使いたい
- emacs派
- ruby好き

adduserとかsudoerの設定とかはやってる前提で書きます．

## セキュリティは最低限やっておく
外部からの攻撃はゲートウェイのほうで色々フィルタリングしてますが，やっておいた方が何かと安心できますので.
#### TCPWrapper
~~運用上sshは全許可にしてます．本当はIPアドレス指定してやるなりしたほうがいいと思います．~~
OpenSSHはTCPWrapperのサポートをとりやめているらしいのでsshdの行を削除しました
TCPWrapperはちょっと古いですけどTelnet等は防げると思うので一応

```hosts.deny
all:all
```

```hosts.allow
ALL:127.0.0.1
```

#### iptablesの編集
iptablesコマンドで設定し、iptables saveで保存
INPUTとFORWARDを否定してOUTPUTを全許可．INPUTを以下のように許可

- ループバック許可
- sshポート許可
- DNSポート許可
- ping許可
- 確立済みパケット許可

```iptables.
*nat
:PREROUTING ACCEPT [5694:432113]
:POSTROUTING ACCEPT [1:388]
:OUTPUT ACCEPT [1:388]
COMMIT

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [22:2312]
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT
```

#### SSHの設定
パスワード認証はセキュリティ的に好きではないので公開鍵認証のみにしておく．
SSHでログインして作業するPCの公開鍵を~/.ssh/authorized_keys に登録して，権限が600になっていることを確認．(~/.sshディレクトリは700としておく)
/etc/ssh/sshd_config に設定を書く

```/etc/ssh/sshd_config.
Protocol 2
SyslogFacility AUTHPRIV
PermitRootLogin no
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no
ChallengeResponseAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes
UsePAM yes
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
X11Forwarding yes
Subsystem     sftp     /usr/libexec/openssh/sftp-server
```

## とりあえず開発環境をまとめてインストールしてくれるやつ

```
$ sudo apt-get install build-essential
```

ライブラリ等必要になったときに適宜apt-getで入れるといいと思います

## ネットワークの設定する
### IPアドレス固定とDNS
IP固定したりとかDNS指定したりします．
しかしUbuntuだと設定ファイルが分かれてたりして面倒です．
resolvconfといういい感じのパッケージがあったのでそれを使います．

```
$ sudo apt-get install resolvconf
```

/etc/network/interfaceを以下のように設定

- IPアドレスは静的に割り当てる(DHCPは使わない)
- DNSを指定する

```
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address [IPアドレス]
network [ネットワークアドレス]
netmask [ネットマスク]
broadcast [ブロードキャストアドレス]
gateway [ゲートウェイのIPアドレス]
dns-nameservers [DNSのIPアドレス]
```

```
$ sudo service networking restart
```

で再起動しようと思ったができませんでした．なので，

```
$ sudo reboot
```

でPCごと再起動。起動後確認してOKでした．（よく分からん）

### host名変更
host名を変更します
/etc/hostnameにホスト名を書き込みます

```/etc/hostname.
[ホスト名]
```

現在の状態に反映させます．

```
sudo hostname [ホスト名]
```

ホスト名とアドレスを結びつけるために/etc/hostsを編集します

```/etc/hosts.
127.0.0.1 [ホスト名]
[IPアドレス] [ホスト名]
```
bash再起動させて反映を確認

```
$ exec $SHELL
```

## emacsのインストール
エディタ戦争は起こす気は無いですが私はemacsが好きなのでemacs入れます．vim派はvimの設定とかしてください．
コンパイルしてインストールします．基本的にはCUIで動かすので--without-Xで入れてます．
Xで動かしたい人は--without-x省いてください．

```
$ wget http://ftp.jaist.ac.jp/pub/GNU/emacs/emacs-24.4.tar.gz
$ tar -xf emacs-24.4.tar.gz
$ cd emacs-24.4/
$ ./configure --without-x
$ make bootstrap
$ sudo make install
```

emacsの設定は書くと長くなるので割愛します

## gitの設定
git入れないと色々始まんないので．

```
$ sudo apt-get install git
$ git -v
git version 1.9.1
$ git config --global user.name "hogehoge"
$ git config --global user.email “hogehoge@hugahuga.com"
$ git config --global core.editor "emacs"
```

## rubyを入れる
私はRubyが大好きなのでとりあえずRubyを入れます
rbenv + ruby-buildでインストールします
#### rbenvをインストール
rbenvをgit cloneで，/usr/local/rbenvに設置
うちのネットワークはgitプロトコル閉じてるらしいので（迷惑）httpsでとってくる

```
$ cd /usr/local/
$ sudo git clone https://github.com/sstephenson/rbenv.git
```

#### パスとか設定する
rbenvの環境変数とPATHを設定して，rbenv initする必要があります
Ubuntuは~/.bash_profileじゃなくて~/.profileを読むらしいのでそれに書きます

```~/.profile
RBENV_ROOT="/usr/local/rbenv"
PATH="${RBENV_ROOT}/bin:${PATH}"
eval "$(rbenv init -)"

# enable color suport of ls and add handy aliases
if [ -x /usr/bin/dircolors ];then
     eval "dircolors -b ~/.dir_colors" > /dev/null
     alias ls='ls --color=auto'
fi
```

ついでにlsの色の設定も入れて置きました．

と思ったらどうやらログイン時にこれを読んでくれてないっぽかったです．
~/.bashrcは読んでくれるようなので，

```~/.bashrc
if [ -f "${HOME}/.profile" ]; then
source "${HOME}/.profile"
fi
```

として，~/.profileを読むように設定しておきました．（最初から~/.bashrcに書いておけばいいのでは？）

#### ruby-buildプラグインをインストール

```
$ sudo mkdir /usr/local/rbenv/plugins
$ cd /usr/local/rbenv/plugins
$ sudo git clone https://github.com/sstephenson/ruby-build.git
```

rbenv installと打つと
rbenv: no such command 'install'
とか言われてプラグインが認識されてないっぽいです（何で？）
ruby-build/install.shを直接実行してみる
/usr/local/bin にコマンドを，/usr/local/share/ruby-buildにバージョン情報をinstallするシェルスクリプトらしいです

```
$ cd /usr/local/rbenv/plugins/ruby-build/
$ sudo sh install.sh
```

よく分からんけどなんかできました．（rbenv/plugins/ruby-build設置した意味ないかも）

#### rubyをインストール

```
$ sudo rbenv install -v 2.0.0-p481
$ sudo rbenv global 2.0.0-p481
$ ruby -v
ruby 2.0.0p481 (2014-05-08 revision 45883) [x86_64-linux]
```

これで無事rubyが使えるようになりました．

# おわりに
大体こんな感じの設定をしたあとに色々設定していく感じでやってます
うちのネットワークではNIS+NFSで統合認証して動かしてるので，本来はもう少し設定します
その他MySQLとかApacheとかRailsとかのインストールで困ったこととかは気が向けば今度書こうと思います．