labunix's blog

labunixのラボUnix

jessie を stretch にアップグレードしてみた。(簡易版)

■jessie を stretch にアップグレードしてみた。(簡易版)
 結論として動作には問題ないけれど、syslogのエラー具合から、
 残り予備系やコールドスタンバイ含め6台はもう少し後でアップデートした方が良さそう。

 空き領域も十分にあり、
 以下でおおよそのパッケージは確認済みなので、
 私の環境での躓き箇所はないはず。

 jessieにchroot-stretchを導入する。
 http://labunix.hateblo.jp/entry/20170711/1499781812

■以下を参考にアップグレードしてみる。

 How to upgrade Debian 8 Jessie to Debian 9 Stretch
 https://linuxconfig.org/how-to-upgrade-debian-8-jessie-to-debian-9-stretch

 第5章 stretch で注意すべき点
 https://www.debian.org/releases/stable/i386/release-notes/ch-information.ja.html

 第4章 Debian 8 (jessie) からのアップグレード
 https://www.debian.org/releases/stable/i386/release-notes/ch-upgrading.ja.html

■一応自身のナレッジも参考に。

 WheezyからJessieにアップグレードしてみた。(簡易版)
 http://labunix.hateblo.jp/entry/20150531/1433077890

■現在のjessieを最新化

$ cat ./myscripts/update.sh 
#!/bin/bash

echo -e "update\nupgrade\nautoremove\nautoclean" | \
  awk '{print "apt-get -y "$1};END{print "apt-get clean all"}' | sudo sh

$ sudo ./myscripts/update.sh

■不完全なインストールパッケージの削除と確認

$ sudo apt-get dist-upgrade
$ dpkg -l | awk '/^rc/{print "apt-get purge -y "$2}' | sudo sh
$ sudo dpkg --audit
$ sudo dpkg -C
$ sudo apt-mark showhold
$ sudo ./myscripts/update.sh

■現在のバージョンとサービスの確認。
 クライアントなので大したサービスは稼働していない。
 chkconfigは個別にインストールしていないと使用出来ないはず。

$ lsb_release -a
No LSB modules are available.
Distributor ID:	Debian
Description:	Debian GNU/Linux 8.8 (jessie)
Release:	8.8
Codename:	jessie

$ cat /etc/debian_version 
8.8

$ /sbin/runlevel
N 5

$ sudo chkconfig --list | awk '/5:on/{print $1}' | column
acpi-fakekey		clamav-daemon		iptables		rmnologin		uml-utilities
acpi-support		clamav-freshclam	irqbalance		rsync			uuidd
acpid			cpufrequtils		loadcpufreq		rsyslog			virtualbox
anacron			cron			motd			saned			vmware-USBArbitrator
atd			dbus			ntp			schroot			vtun
binfmt-support		fail2ban		plymouth		ssh			xen
bluetooth		gdm3			postfix			sudo			xendomains
bootlogs		gdomap			rc.local		sysstat

$ sudo systemctl list-unit-files --type=service | \
    awk '!/static|disabled|masked|STATE|listed./{gsub(".service","",$1);print $1}'   | column
accounts-daemon				dbus-org.bluez				NetworkManager
anacron-resume				dbus-org.freedesktop.ModemManager1	pppd-dns
anacron					dbus-org.freedesktop.nm-dispatcher	rsyslog
atd					display-manager				ssh
binfmt-support				gdm					sshd
bluetooth				getty@					syslog
clamav-daemon				hwclock-save				unattended-upgrades
clamav-freshclam			ModemManager
cron					NetworkManager-dispatcher

■現在の3rdパーティのパッケージに特に影響無い。
 clispやprimeは別システムでも動作するので、無視出来る。

$ sudo  aptitude search '~o' | sed -e 's/^i\| A \|- .*\| //g' | column
app-install-data		libprogressbar-ruby1.8
automake1.10			librtmp0
clisp				libruby1.8
cpp-4.6				libruby1.9.1
crossover:i386			libsary-ruby1.8
ffmpeg				libsary10
gcc-4.6				libsuikyo-ruby1.8
gcc-4.6-base			libswscale2
gcj-4.7-base			libtasn1-3
gcj-4.7-jre			libtiff4
gcj-4.7-jre-headless		libtiff4-dev
gcj-4.7-jre-lib			libtiffxx0c2
icedtea-6-jre-cacao		libudev0
icedtea-6-jre-jamvm		libva-intel-vaapi-driver
libavcodec53			libx264-123
libavdevice53			libxen-4.1
libavfilter2			linux-headers-3.2.0-4-amd64
libavformat53			linux-headers-3.2.0-4-common
libavutil51			linux-image-3.2.0-4-amd64
libboost-iostreams1.49.0	linux-kbuild-3.2
libclamav6			linux-source-3.2
libffi5				openjdk-6-jre
libgcj13			openjdk-6-jre-headless
libgcj13-awt			openjdk-6-jre-lib
libgcrypt11			prime
libgnutls26			prime-dict
libjpeg8			python2.6-minimal
libjpeg8-dev			ruby1.8
libmpc2				ruby1.9.1
libopencv-core2.3		suikyo-table
libopencv-imgproc2.3		xen-hypervisor-4.1-amd64
libopenjpeg2			xen-utils-4.1
libprocps0			xfonts-mathml

■jessie から stretch にAPTの取得元を変更する。
 wheezyから使っているマシン。
 「ftp」プロトコルは既に廃止になっているので、「http://」のみであることを確認。

$ sudo cp /etc/apt/sources.{list,list.jessie}
$ sudo sed -i -e 's/jessie/stretch/g' /etc/apt/sources.list
$ cat /etc/apt/sources.list
# 

# deb cdrom:[Debian GNU/Linux 7.1.0 _Wheezy_ - Official amd64 NETINST Binary-1 20130615-23:04]/ wheezy main

#deb cdrom:[Debian GNU/Linux 7.1.0 _Wheezy_ - Official amd64 NETINST Binary-1 20130615-23:04]/ wheezy main

deb http://ftp.jp.debian.org/debian/ stretch main contrib non-free
deb-src http://ftp.jp.debian.org/debian/ stretch main

deb http://security.debian.org/ stretch/updates main
deb-src http://security.debian.org/ stretch/updates main

# stretch-updates, previously known as 'volatile'
deb http://ftp.jp.debian.org/debian/ stretch-updates main
deb-src http://ftp.jp.debian.org/debian/ stretch-updates main

■stretch へのアップデートシミュレーション
 重要なパッケージがあれば事前に「upgradable.txt」で確認しておく。

$ sudo apt-get update
$ sudo apt list --upgradable > upgradable.txt

WARNING: apt does not have a stable CLI interface yet. Use with caution in scripts.

■stretch へのアップグレード

$ ./myscripts/update.sh
$ sudo apt-get dist-upgrade -y
$ sudo dpkg --configure -a 
...
処理中にエラーが発生しました:
fail2ban
$ sudo dpkg-reconfigure locales

■jessieパッケージのままのアプリケーションを再インストール
 バージョンを含むパッケージもあることで危険度が急激に増すため、この方法はお勧めしない。
 個別に確認した方がベター。

$ dpkg -l | awk '/^ii.*jessie/ {print $2}' | tr '\n' ' ';echo
$ dpkg -l | awk '/^ii.*jessie/ {print "apt-get install --reinstall -y ""$2}'

$ sudo aptitude search '~o'
$ dpkg -l | awk '/^rc/{print "apt-get purge -y "$2}' | sudo sh
$ sudo dpkg --audit
$ sudo dpkg -C
$ sudo apt-mark showhold
$ sudo ./myscripts/update.sh

■fail2banのインストール

$ sudo apt-get install -y fail2ban
$  ./myscripts/update.sh

■システムの再起動

$ sudo shutdown -r now && exit

$ lsb_release -a
No LSB modules are available.
Distributor ID:	Debian
Description:	Debian GNU/Linux 9.0 (stretch)
Release:	9.0
Codename:	stretch

■普段使う動作に問題はないが、syslogにバグらしきエラーが大量に出力される。

$ sudo awk '/error|warn|crit|fail/i && /02:5[23]/' /var/log/syslog 
$ sudo journalctl -b | awk '/Operation not permitted/' | wc -l
1021

■待っている間にサーバもアップデート。
 サーバ側の方が3rdパーティ製アプリがsplunkのみと少なかったので削除で対処。

$ sudo ./myscripts/update.sh

$ sudo apt-get dist-upgrade
$ dpkg -l | awk '/^rc/{print "apt-get purge -y "$2}' | sudo sh
$ sudo dpkg --audit
$ sudo dpkg -C
$ sudo apt-mark showhold
$ sudo ./myscripts/update.sh

$ sudo chkconfig --list | awk '/5:on/{print $1}' | column
acpid			motd			saned
anacron			network-manager		schroot
apache2			nmbd			smbd
atd			ntp			snmpd
bootlogs		postfix			snmptrapd
cron			postgresql		speech-dispatcher
dbus			rc.local		squid3
fail2ban		rmnologin		ssh
hddtemp			rsyslog			xrdp
lightdm			samba-ad-dc

$ sudo  aptitude search '~o' | sed -e 's/^i\| A \|- .*\| //g' | column
splunk

$ sudo apt-get purge -y splunk
$ sudo rm -fr /opt/splunk

$ sudo cp /etc/apt/sources.{list,list.jessie}
$ sudo sed -i -e 's/jessie/stretch/g' /etc/apt/sources.list

$ sudo apt-get update
$ sudo apt list --upgradable > upgradable.txt

$ ./myscripts/update.sh
$ sudo apt-get dist-upgrade -y
$ sudo dpkg --configure -a
...
処理中にエラーが発生しました:
 fail2ban
 xrdp

$ sudo apt-get purge -y fail2ban xrdp
$ sudo dpkg-reconfigure locales

$ dpkg -l | awk '/^ii.*jessie/ {print $2}' | tr '\n' ' ';echo
$ dpkg -l | awk '/^ii.*jessie/ {print "apt-get install --reinstall -y ""$2}'

$ sudo aptitude search '~o'
$ dpkg -l | awk '/^rc/{print "apt-get purge -y "$2}' | sudo sh
$ sudo dpkg --audit
$ sudo dpkg -C
$ sudo apt-mark showhold
$ sudo ./myscripts/update.sh

■削除した2パッケージのインストール

$ sudo apt-get install -y fail2ban xrdp

$ sudo shutdown -r now && exit

$ lsb_release -a
No LSB modules are available.
Distributor ID:	Debian
Description:	Debian GNU/Linux 9.0 (stretch)
Release:	9.0
Codename:	stretch

■不要なサービスがないかチェック。
 SambaはNetBIOS無効なはずだがUDPだけ、137,138が待ち受けている。

$ sudo netstat -anup | awk '/0.0.0.0:[0-9]/'
udp        0      0 0.0.0.0:52283           0.0.0.0:*                           843/(squid-1)       
udp        0      0 0.0.0.0:40776           0.0.0.0:*                           543/snmpd           
udp        0      0 0.0.0.0:123             0.0.0.0:*                           733/ntpd            
udp        0      0 0.0.0.0:137             0.0.0.0:*                           856/nmbd            
udp        0      0 0.0.0.0:138             0.0.0.0:*                           856/nmbd            
udp        0      0 0.0.0.0:514             0.0.0.0:*                           468/rsyslogd        

$ sudo testparm -s 2>/dev/null | grep netbios
	disable netbios = Yes

■普段使う動作に問題はないが、syslogにバグらしきエラーが大量に出力される。

$ sudo awk '/error|warn|crit|fail/i && /02:5[23]/' /var/log/syslog 
$ sudo journalctl -b | awk '/Operation not permitted/' | wc -l
1021

■脆弱性診断結果から、境界UTMのFW、IPS、アプリケーションコントロール、WAFを強化しておく。

$ cd myscripts; \
   wget https://raw.githubusercontent.com/labunix/penetration/master/penetration.sh; \
  cd ~;
$ dpkg -l | grep "^ii.*nmap" || sudo apt-get install -y nmap;\
    sudo ./myscripts/penetration.sh 127.0.0.1
ii  nmap                                         7.40-1                               amd64        The Network Mapper
Warning: The -P0 option is deprecated. Please use -Pn

Starting Nmap 7.40 ( https://nmap.org ) at 2017-07-17 02:38 JST
NSE: Loaded 143 scripts for scanning.
NSE: Script Pre-scanning.
Initiating NSE at 02:38
Completed NSE at 02:38, 0.00s elapsed
Initiating NSE at 02:38
Completed NSE at 02:38, 0.00s elapsed
Initiating SYN Stealth Scan at 02:38
Scanning localhost (127.0.0.1) [65535 ports]
Discovered open port 22/tcp on 127.0.0.1
Discovered open port 25/tcp on 127.0.0.1
Discovered open port 3389/tcp on 127.0.0.1
Completed SYN Stealth Scan at 02:38, 7.91s elapsed (65535 total ports)
Initiating Service scan at 02:38
Scanning 4 services on localhost (127.0.0.1)
Completed Service scan at 02:38, 6.05s elapsed (4 services on 1 host)
Initiating OS detection (try #1) against localhost (127.0.0.1)
NSE: Script scanning 127.0.0.1.
Initiating NSE at 02:38
...