ubuntu / centOSの環境構築 ～初期設定・LDAP認証・Docker～

#はじめに
ubuntu(14.04)とcentOS(6, 7)の初期設定の備忘録です．
IPアドレスの固定，LDAP認証，dockerの導入，sambaのマウント，その他細かい設定です．

#設定

##初期設定
### パッケージのアップグレード
#### ubuntu
```shell-session
$ apt-get update
$ apt-get upgrade
```

#### centOS
```shell-session
$ yum update
```


###ネットワーク関連
**以下のアドレスは例ですので，設定前に必要な情報を確認してください．**

####ubuntu

```vim:/etc/network/interfaces
auto eth0
iface eth0 inet static
address 192.168.0.10     # IPアドレス
netmask 255.255.255.0    # サブネットマスク
gateway 192.168.0.1      # デフォルトゲートウェイ
dns-nameservers 192.168.0.1 XXX.XXX.XXX.XXX 8.8.8.8    #dnsサーバ
```

```ifdown eth0 && ifup eth0```またはリブートして設定を適用します．sshが切断されて，また接続できるようになるのを祈ります．**設定を誤るとネットワーク経由でアクセスできなくなるので慎重に作業してください．**

``eth0``はインタフェース名です．ubuntu 16.04では``enp0s31f6``などです．``ifconfig``で確認できます．

####centOS6

```vim:/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0                #デバイス名
ONBOOT=yes                 #システム起動時に有効にするか
BOOTPROTO=none             #固定IP:none,static DHCPはdhcp
HWADDR=XX:XX:XX:XX:XX:XX   #MACアドレス
TYPE=Ethernet              #インタフェースのデバイスタイプ。他にxDSLなど
#DHCP_HOSTNAME=example.com #DHCPサーバに通知するホスト名
IPADDR=192.168.0.10        #IPアドレスの指定
NETMASK=255.255.255.0      #IPアドレスに対するネットマスクの指定
USERCTL=no                 #デバイスの制御をroot以外にも許すか。
PEERDNS=no                 #DHCPによって取得したDNSサーバのアドレスを/etc/resolv.confに反映するか。DHCPを使う場合は通常yes。
GATEWAY=192.168.0.1        #デフォルトのゲートウエイアドレス（普通はルータのIPアドレスを書く）
IPV6INIT=no                #このデバイスでIPv6を有効にするか
```

```vim:/etc/resolv.conf
nameserver 192.168.0.1
nameserver XXX.XXX.XXX.XXX
```

####centOS7
```$nmtui ```コマンドを使います．TUIというグラフィカルなCUI(?で設定できます．

#### (参考) 複数のNICを使う場合
eth0にグローバルIP，eth1にローカルIPが振られているケースを想定します．グローバルIPに向けて何らかのサービスを提供する場合，**default gatewayをグローバルIP側に設定する**必要があります．
ubuntuでは，``/etc/network/interfaces``で，最初に宣言されたgatewayがdefault gatewayとして設定されるようです．すなわちこの例では，**eth0の定義を先に記述します．**``$route``コマンドで設定されているルーティングテーブルを確認することが出来ます．また，``$ping [IP address] -I [interface]``のように，特定のインターフェースからpingを打つことで接続状況を確認することが出来ます．



##LDAP認証
稼働済みのldapサーバに接続して，ldap認証を用いてログインできるように設定します．

####ubuntu
基本的に[LDAPClientAuthentication](https://help.ubuntu.com/community/LDAPClientAuthentication)のサイトに従って設定．

以下のように設定するところがありますが,例えばdockerグループを追加しておくとldapでログインしたユーザがdockerをsudoせずに使えるようになります(そもそもsudoもできませんが)．(*;*;*;という設定だとすべてのユーザがdockerに追加される?

```shell-session:/etc/security/group.conf
*;*;*;Al0000-2400;audio,cdrom,dialout,floppy
```

####centOS
[こちら](http://namihira.hatenablog.com/entry/2013/12/23/182821)を参考にさせていただきました．
``authconfig-tui ``で設定したあと，``/etc/pam.d/system-auth``，``/etc/pam.d/password-auth``，``/etc/nsswitch.conf``のsssをldapに置換します．

ホームディレクトリ生成の設定は``$authconfig --enablemkhomedir --update``でできるみたいです．

ubuntuと同様にldapユーザを特定のグループに所属させたいと思います．``/etc/security/group.conf``についてはubuntuと同様に設定します．
問題は，ubuntuで``/etc/pam.d/common-auth``に追記する内容ですが，``/etc/pam.d/password-auth``に追記するとうまくいきました．何をやっているかいまいち理解していないので試行錯誤です...

#### ログインシェルの指定
LDAPサーバ側で指定されているシェルが存在しない場合エラーとなりログインできません．以下の設定を追記することで，ログインシェルを上書きすることが出来ます．

```:[ubuntu]/etc/ldap.conf
nss_override_attribute_value loginShell /bin/bash
```

```:[centOS]/etc/nslcd.conf
map passwd loginShell "/sbin/bash"
```

####トラブルシューティング
認証に失敗する場合，以下のログを解析すると原因が分かるかも知れません．

* ubuntu: ``/var/log/auth.log``
* centOS: ``/var/log/secure``

##docker環境導入
以下のスクリプトを用いて最新版を導入できます．
(参考サイト: http://docs.docker.jp/linux/step_one.html)

```
$curl -fsSL https://get.docker.com/ | sh
```

まっさらな環境であれば問題なく入れられると思いますが，すでに古いバージョンが入っているとコンフリクトする場合があります．その場合は``$yum remove docker docker-selinux``で一度アンインストールしました(centOS)．

###dockerグループ
前述のようにユーザをdockerグループ(dockerrootグループの場合もあるようです)に追加するとsudoなしで実行できるようになりますが，これは``/var/run/docker.sock``の所有者がdockerグループであることに起因している（みたいです）．なので，もしパーミッションが異なる場合dockerグループのユーザでもdockerを実行できません．パーミッションを変更すれば良いようです．

###ブート時の起動
ブート時にdockerサービスを自動的に起動します．

```vim:
$ systemctl enable docker    # ubuntu
$ chkconfig docker on        # centOS
```

###docker-compose
pipで簡単に入ります，が一部のpythonライブラリのバージョン関連で面倒な事態になる場合も...

```vim:
$ pip install docker-compose
```

###nvidia-docker
[公式github](https://github.com/NVIDIA/nvidia-docker)通りに入れましたが，ここでもdockerのバージョンが古いと動きません．

## sambaをマウントする
1. パッケージを導入します．``$apt-get install cifs-utils``
1. マウント先のディレクトリを作成します``$mkdir /path/to/mount``
1.  ``/etc/fstab``に追記します．オプションは適宜．

```vim:/etc/fstab
//samba/server cifs username=hoge,password=foo,uid=nobody,gid=nogroup,file_mode=0777,dir_mode=0777 0 0
```
``$ mount -a`` によってマウントすることが出来ます．


## rootログインを許可する
セキュリティ的に大丈夫で必要な場合のみ
以下を追加します．

```vim:/etc/ssh/sshd_config
PermitRootLogin  yes
```