さくらVPS 1G/SSD プラン - CentOS7 初期設定
2017.5頃の情報を基に作成しています。
リンク先の資料等、当サイトの記事と異なる場合があります。最新の内容を確認してください。
当記事作成時、yum update後のバージョンは以下の通り。
$ cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core)
仮想マシン起動
契約した時点では、仮想マシンは起動していない状態なので、VPSコントロールパネルから起動する必要があります。SSDモデルでもあり仮想マシンの起動は高速です。
契約処理後、メールでアカウント情報(CentOS6/標準インストール時のもの)が送られてきますが、CentOS7のインストールによりrootアカウントを再設定することになります。
サービス仕様確認
特筆すべきはSELinux無効化と、IPv6インターフェースの無効化でしょうか。
これらを使用する場合、個別に有効化/設定する必要があります。
$ grep -v ^# /etc/sysconfig/selinux SELINUX=disabled SELINUXTYPE=targeted
$ cat /etc/sysctl.d/99-sysctl.conf # System default settings live in /usr/lib/sysctl.d/00-system.conf. # To override those settings, enter new settings here, or in an /etc/sysctl.d/<name>.conf file # # For more information, see sysctl.conf(5) and sysctl.d(5). # Do not accept RA net.ipv6.conf.default.accept_ra=0 net.ipv6.conf.all.accept_ra=0 net.ipv6.conf.eth0.accept_ra=0 # Do not use IPv6 net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1
日本語環境切替
デフォルトでは英語環境になっているので日本語環境に切り替えます。
# localectl System Locale: LANG=C VC Keymap: jp106 X11 Layout: jp # localectl set-locale LANG=ja_JP.utf8 # localectl System Locale: LANG=ja_JP.utf8 VC Keymap: jp106 X11 Layout: jp
etckeeper導入
設定を開始する前にetckeeperを導入します。
etckeeperは/etc配下のファイルをVCSで自動管理するためのツールです。
他の管理方法を取る場合、或いは管理しない場合は導入不要です。
初期設定よりepel(Extra Packages for Enterprise Linux)が利用できるようになっているので、追加設定することなくyumでインストール可能です。
# yum install etckeeper ... ================================================================================ Package アーキテクチャー バージョン リポジトリー 容量 ================================================================================ インストール中: etckeeper noarch 1.18.5-1.el7 epel 43 k トランザクションの要約 ================================================================================ インストール 1 パッケージ 総ダウンロード容量: 43 k インストール容量: 65 k Is this ok [y/d/N]:
デフォルトでは Git を使用するようになっています。
MercurialやBazaar、Darcs といった VCS も利用可能なので、必要であれば慣れたものに変更するといいでしょう。
$ grep ^VCS /etc/etckeeper/etckeeper.conf VCS="git"
初期化します。
# etckeeper init Initialized empty Git repository in /etc/.git/
最初の状態をコミットします。
# etckeeper commit 'init'
作業ユーザ作成
ポリシー設定
ユーザ作成に関するポリシーについて、関連するファイル/ディレクトリを確認/設定します。
/etc/login.defs
/etc/default/useradd
/etc/skel/
useraddコマンドによるデフォルト値を確認。
# useradd -D GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/bash SKEL=/etc/skel CREATE_MAIL_SPOOL=yes
useraddによるデフォルトのGIDは100(users)なのですが、login.defsによって最小値が1000に制限されており、明示的に指定しない場合はUIDと同じGIDでgroupが追加されます。
$ grep ID_MIN /etc/login.defs UID_MIN 1000 SYS_UID_MIN 201 GID_MIN 1000 SYS_GID_MIN 201
CentOS6は最小値が500なので、CentOS6からCentOS7への移行を行う場合は、設定を合わせる等の対応が必要になるかもしれません。
useraddによるユーザ作成時、/var/spool/mail下にメールスプールを作成しないようにします。
--- a/default/useradd
+++ b/default/useradd
@@ -5,5 +5,5 @@
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
-CREATE_MAIL_SPOOL=yes
+CREATE_MAIL_SPOOL=no
root権限へのスイッチ手段設定
サーバ管理ポリシーを決めて、必要に応じて設定します。
以下は、サーバローカルだけで完結する設定の一例です。
- PAMを利用する
wheelグループに属しているアカウント以外suが使えなくなります。また、su使用時パスワード認証が不要になります。
--- a/pam.d/su
+++ b/pam.d/su
@@ -1,9 +1,9 @@
#%PAM-1.0
auth sufficient pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group.
-#auth sufficient pam_wheel.so trust use_uid
+auth sufficient pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the "wheel" group.
-#auth required pam_wheel.so use_uid
+auth required pam_wheel.so use_uid
auth substack system-auth
auth include postlogin
account sufficient pam_succeed_if.so uid = 0 use_uid quiet
- sudoを利用する
wheelグループに属しているアカウントをパスワード認証無しでrootにスイッチ出来るようにします。
--- a/sudoers
+++ b/sudoers
@@ -105,7 +105,7 @@ root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
## Same thing without a password
-# %wheel ALL=(ALL) NOPASSWD: ALL
+%wheel ALL=(ALL) NOPASSWD: ALL
## Allows members of the users group to mount and unmount the
## cdrom as root
アカウント作成
例示として「yourname」というアカウントを作成しています。
上の設定に基づき、rootにスイッチ出来るようwheelグループに追加します。
# useradd -G wheel yourname
上の例では、新たに「yourname」というgroupが追加され、デフォルトのグループに設定されます。
# tail -1 /etc/passwd yourname:x:1000:1000::/home/yourname:/bin/bash # grep yourname /etc/group wheel:x:10:yourname yourname:x:1000:
アカウント毎にgroupを追加したくない場合は、予めgroupを作成しておいたもの(或いはusers等の既設group)を「-g」オプションで指定します。
作成したアカウントにパスワードを設定します。
# passwd yourname ユーザー yourname のパスワードを変更。 新しいパスワード:
useraddの「-p」オプションでアカウント作成時に設定(予めhash化された値を使用)することも可能です。
rootアカウント/パスワードロック
ここまでの設定が正しく行われていれば、rootアカウントのパスワードをロックしても作業アカウントからrootになれます。
仮想マシン等、シングルユーザモードが必要にならない環境であれば、パスワードロックしてしまうという運用も一考です。
# passwd -l root ユーザー root 用のパスワードをロック。 passwd: 成功
万が一に備え、作業を実施するターミナルをroot権限のままにしておき、新たに作業アカウントでログインしてrootにスイッチ出来る事を確認します。
sshd/firewalld初期設定
さくらVPSの初期設定では、sshdはリモートからrootログイン可能で、firewalldはpublicゾーン(sshd/dhcpv6-client)が適用されています。
また、fail2banがインストール/起動されているため、少しばかりセキュアに(sshで外部からログインされにくく)なっています。
# firewall-cmd --get-active-zones public interfaces: eth0 # cat /etc/firewalld/zones/public.xml <?xml version="1.0" encoding="utf-8"?> <zone> <short>Public</short> <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description> <service name="dhcpv6-client"/> <service name="ssh"/> </zone>
# systemctl status fail2ban ● fail2ban.service - Fail2Ban Service Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled; vendor preset: disabled) Active: active (running) since 水 2017-05-31 00:41:32 JST; 1 day 12h ago Docs: man:fail2ban(1) Main PID: 1201 (fail2ban-server) CGroup: /system.slice/fail2ban.service └─1201 /usr/bin/python2 -s /usr/bin/fail2ban-server -s /var/run/fa... ...
初期起動時から1日で、かなりの攻撃(ログイン試行)をくらっています。
# fail2ban-client status sshd Status for the jail: sshd |- Filter | |- Currently failed: 1 | |- Total failed: 435 | `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd `- Actions |- Currently banned: 0 |- Total banned: 55 `- Banned IP list:
Ban中のアドレス確認。
# ipset --list Name: fail2ban-sshd Type: hash:ip Revision: 1 Header: family inet hashsize 1024 maxelem 65536 timeout 600 Size in memory: 19856 References: 1 Members:
sshd設定
基本方針として、使用しない機能はオフにします。
ポートは変えなければならない、というよりは、変えるだけで避けられるリスクが多いので(接続元を制限出来ないのであれば)変えた方が良いと考えます。
以下では例示としてポートを「2345」に、プロトコルバージョンを「2」のみに、rootログインを拒否するよう変更しています。
--- a/ssh/sshd_config
+++ b/ssh/sshd_config
@@ -15,12 +15,14 @@
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
#Port 22
+Port 2345
#AddressFamily any
ListenAddress 0.0.0.0
#ListenAddress ::
# The default requires explicit activation of protocol 1
#Protocol 2
+Protocol 2
# HostKey for protocol version 1
#HostKey /etc/ssh/ssh_host_key
@@ -47,6 +49,7 @@ SyslogFacility AUTHPRIV
#LoginGraceTime 2m
#PermitRootLogin yes
+PermitRootLogin no
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
設定をチェック/適用します。
# sshd -t # systemctl reload sshd
firewalldにより変更後のポートにアクセス出来るよう設定する必要があります。
firewalld設定
sshdのポートを変更した場合、併せて変更します。
dhcpv6-clientは、将来的にIPv6を使用する場合でも不要なので削除します。
# firewall-cmd --zone=public --remove-service=ssh --permanent # firewall-cmd --zone=public --add-port=2345/tcp --permanent # firewall-cmd --zone=public --remove-service=dhcpv6-client --permanent # firewall-cmd --reload
fail2ban設定
sshdのポートを変更した/fail2banを継続利用する場合、併せて変更します。
--- a/fail2ban/jail.d/local.conf
+++ b/fail2ban/jail.d/local.conf
@@ -4,3 +4,4 @@ backend = systemd
[sshd]
enabled = true
+port = 2345
# systemctl reload fail2ban
起動サービス確認
インストール後の初期状態のようなので、不要なサービスは停止します。
SSDモデルの場合、容量の関係や使用していないのに更新がかかるという観点からは、削除した方が望ましいかもしれません。
以下の例では、ABRTサービス系と物理ディスク関連のサービスをdisableしています。
# systemctl disable abrt-ccpp # systemctl disable abrt-oops # systemctl disable abrt-vmcore # systemctl disable abrt-xorg # systemctl disable abrtd # systemctl disable dmraid-activation # systemctl disable libstoragemgmt # systemctl disable smartd
$ systemctl list-unit-files --type=service | grep enabled atd.service enabled auditd.service enabled chronyd.service enabled crond.service enabled dbus-org.fedoraproject.FirewallD1.service enabled dbus-org.freedesktop.NetworkManager.service enabled dbus-org.freedesktop.nm-dispatcher.service enabled fail2ban.service enabled firewalld.service enabled getty@.service enabled irqbalance.service enabled lvm2-monitor.service enabled mdmonitor.service enabled NetworkManager-dispatcher.service enabled NetworkManager.service enabled postfix.service enabled rngd.service enabled rsyslog.service enabled sshd.service enabled sysstat.service enabled systemd-readahead-collect.service enabled systemd-readahead-drop.service enabled systemd-readahead-replay.service enabled tuned.service enabled
dbus-org.freedesktop.network1.serviceのステータスがおかしい件。
現行バージョンのバグのようで、RHEL7.4以降でfixされるようです。
$ systemctl list-unit-files --type=service | egrep '(invalid|bad)' dbus-org.freedesktop.network1.service bad
そのままでも良いような気はしますが、bugzillaにあるよう、明示的に「masked」としておきます。
# systemctl mask dbus-org.freedesktop.network1.service Created symlink from /etc/systemd/system/dbus-org.freedesktop.network1.service to /dev/null.
$ systemctl status dbus-org.freedesktop.network1.service * dbus-org.freedesktop.network1.service Loaded: masked (/dev/null; bad) Active: inactive (dead)
以下のようなエラーになる場合は、一度、リブートが必要です。
# systemctl mask dbus-org.freedesktop.network1.service Failed to execute operation: Access denied
yum update
標準インストールのCentOS6はyum-updateonbootが有効になっていたのですが、CentOS7では無効になっていました。
また、リポジトリがOS標準の設定になっていますが、さくらのプライベートリポジトリにCentOS7もあるようなので、こちらを使用するように変更した方が良さそうです。
--- a/yum.repos.d/CentOS-Base.repo
+++ b/yum.repos.d/CentOS-Base.repo
@@ -12,32 +12,36 @@
[base]
name=CentOS-$releasever - Base
-mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&rep
+#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&re
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
+baseurl=http://ftp.sakura.ad.jp/pub/linux/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#released updates
[updates]
name=CentOS-$releasever - Updates
-mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&rep
+#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&re
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
+baseurl=http://ftp.sakura.ad.jp/pub/linux/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
-mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&rep
+#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&re
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
+baseurl=http://ftp.sakura.ad.jp/pub/linux/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
-mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&rep
+#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&re
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
+baseurl=http://ftp.sakura.ad.jp/pub/linux/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
パッケージを更新します。
# yum check-update # yum -y update
リブート後、正常性を確認します。
# reboot
以上で、取り急ぎ行っておくべき初期設定は完了です。仮想マシンを再起動して正常性を確認します。