『Ubuntu Server 実践バイブル』を読んで
書名:『Ubuntu Server 実践バイブル 現場で即運用に役立つサービス設定のノウハウ』
著者:吉田史
感想
「Ubuntu公式ミラー管理者による」との宣伝文句の通り、かゆいところの解説が詳細に行われており、とても参考になりました。
自分自身、ssh, ntpd, squid など用いているので、それらをセキュリティ的に見直す良い機会にもなりました。
対象としては、LPIC level2 位の知識を有し、ubuntu サーバの何となくの理解をきちんと知るために拾い読みするような方、でしょうか。
P.201 init と Upstart
ubuntu も systemd に移行するとかで、ubuntu14.04 (LTS) は
新しいUpstart:Ubuntuがsystemdに移行する前の、最後のUpstartに
http://japan.cnet.com/news/commentary/35047498/
だそうです。
ubuntu創始者のMark Shuttleworth 氏もMark Shuttleworth » Blog Archive » Losing graciously
P.167 SSHとは
自分は既に公開鍵認証導入済みでしたが、あらためてパスワード認証を無効にしたりなど、
セキュリティを強化しました。
sudo chmod 666 /home/beowulf/authorized_keys sudo chmod 400 /home/ito/.ssh/id_rsa sudo sed -i -e "s/^#PasswordAuthentication yes$/PasswordAuthentication no/" /etc/ssh/sshd_config sudo sed -i -e "s/ Port 22/ Port 50022/" /etc/ssh/ssh_config sudo sed -i -e "s/ 22$/ 50022/" /etc/ssh/sshd_config sudo echo "AllowUsers dummy@calc*" >> /etc/ssh/sshd_config { echo "" echo "# IPv4 only" echo "AddressFamily inet" } | sudo tee -a /etc/ssh/sshd_config sudo sed -i -e "s/^X11Forwarding yes$/x11forwarding no/" /etc/ssh/sshd_config sudo sed -i -e "s/^PermitRootLogin yes$/PermitRootLogin no/" /etc/ssh/sshd_config sudo sed -i -e "s/^UsePAM yes$/UsePAM no/" /etc/ssh/sshd_config
P.210 etckeeperの導入と設定
これは必須ですね。
etckeeper,git, tig のコンビネーションが便利すぎです。
P.221 ntp
ついでにNTPの認証と、ipv4の設定をすることにしました。
# ntp auth sudo mkdir /etc/ntp cd /etc/ntp ntp-keygen -M sudo chmod 600 ntpkey_MD5key_calc0* sudo grep " 3" /etc/ntp/ntpkey_MD5key_calc0.3598178931 > /home/beowulf/ntp.keys sudo sed -i -e "s/-g/-4 -g -k \/etc\/ntp\/ntpkey_md5_calc0 -t 3/" /etc/default/ntp
P.225 「LISTEN」とデーモン
不要サービスの停止と、不要ポート(ipv6など)のチェックを行いました。
これもコマンド例が充実していて分かりやすかったです。
P.251 Squidのインストール
自分は計算スレーブ3台のapt-get のキャッシュ用として squid を用いておりますが、この本を参考にセキュリティ強化と、パラメータの調整を行うことができました。
P.287 NFSサーバー
すでにNFSサーバは利用しており、この本の構成上、記載が最小限なのは仕様が無いですが自分にはもの足りませんでした。
man nfs を実行し、nfs version4 の仕様を確認のうえ、チューニングを行うのが良いでしょう。
P.319 ログの管理
この本には記載が無いですが示唆を得て、自分は下記のようにError以上でメールを送信する設定にしています。
if \
( $syslogseverity <= 3 ) and \
not ( $msg contains 'times' ) and \
not ( $msg contains 'Caught signal 15' ) and \
not ( $msg contains 'rpcbind.xdr' ) and \
not ( $msg contains 'iscsi_trgt' ) and \
not ( $msg contains 'HDIO_GET_IDENTITY failed for' ) and \
not ( $msg contains 'started!' ) and \
not ( $msg contains 'Assuming drive cache' ) and \
not ( $msg contains 'No Caching mode page found' ) and \
not ( $msg contains 'usb_submit_urb' ) and \
not ( $msg contains 'Failed to get parent' ) \
then :ommail:;mail_body
※warn以上だと明らかに警告でないものも混ざったため、上記設定を行った。
しかしながらError以上でも例外文字列を入れないと、運用にはのりませんでした。
また、計算スレーブからsyslog転送を行うようにも設定を行なっています。
これで、重要ログの一元管理とその警告メール送信が行えるようになりました。
P.358 Proxy環境でのアップデート
/etc/apt/apt.conf に acquire::http::proxy〜 のように、記載した。
ネットでは /etc/environment に記載する方法も見つかったが、あくまでもアップデートで利用するためだけに限定したかったため、上記の設定を行った。
P.359 アップグレード後の再起動
/var/run/reboot-required を確認することで、upgrade 後に再起動が必要か判定ができる。
自分の環境ではコマンドで3台一斉にアップグレードを実行しているので、スクリプトで判定するうえで上記は有益な情報であった。
P.356 「アップデート」と「アップグレード」
長らく不思議であった、apt-get upgrade と apt-get dist-upgrade の違いがようやく分かりました。
「apt-get upgrade ではABIが変化しない範囲でのカーネルの更新」が可能で、後者では「ABIの変化を伴うアップグレードも許容される」ということだそうです。
(「P.373 セキュリティアップデートとカーネルのABI」も合わせて読むことが薦められております。)
これで何が問題かというと、後者では独自にドライバーモジュールを追加している場合などで、追加のカーネル(ドライバー)モジュールもあわせて更新されるようにしなければならないということです。
(新しいヘッダーファイルを用いて再コンパイルされる必要があるからだそうで、ハードウェアベンダーが提供するドライバーの場合は自動で再コンパイルされるようです。)
以上。