きさま!見ているなッ!!

CentOSの初期設定をする

  • 2019-06-14
  • 2019-08-15
  • Linux

インストールしたばかりのCentOSに最低限の初期設定をします。

CentOSの使用目的や環境の違いによって、他にも必要な設定があると思います。
ご自身の環境に合わせて、いろいろと試してみてください。

環境

OSログインユーザー
CentOS 7.6 centos(root以外のユーザー)

初期設定

VirtualBoxからCentOSを起動して、一般ユーザーでログインします。
アプリケーション→システムツール→「端末」を起動します。

「su」コマンドでrootユーザーになります。
※パスワードは、rootユーザーのパスワードを入力します。

$ id
uid=1000(centos) gid=1000(centos) groups=1000(centos),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
$ 
$ su -
パスワード:
# 
# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
# 

「id」コマンドでユーザー情報を確認します。

rootの設定

rootユーザーでSSHログインされるとサーバーが乗っ取られてしまう危険性があります。rootユーザーのSSHログインを禁止する設定を行います。

# cat /etc/ssh/sshd_config | grep PermitRootLogin

#PermitRootLogin yes
# the setting of "PermitRootLogin without-password".

「cat」コマンドで編集するファイル「/etc/ssh/sshd_config」を確認します。

# vi /etc/ssh/sshd_config

# cat /etc/ssh/sshd_config | grep PermitRootLogin

PermitRootLogin no
# the setting of "PermitRootLogin without-password".

「vi」コマンドでファイルを開き、「#PermitRootLogin yes」を「PermitRootLogin no」に変更します。※先頭の「#」を外すことで、設定を有効化します。

# systemctl restart sshd.service

sshdサービスを再起動して、設定を反映させます。
これでrootユーザーでSSHログインができなくなります。

ユーザー作成

# useradd centos2
# passwd centos2
ユーザー centos2 のパスワードを変更。
新しいパスワード:
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。
# 

必要であれば、新規ユーザーを作成します。

# visudo

##      user    MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
centos2 ALL=(ALL)       ALL

新規ユーザーに「sudo」権限を付与するため、「visudo」コマンドを実行します。
「centos2 ALL=(ALL) ALL」を追記します。

タイムゾーン変更

ローカルタイムを日本に設定します。

# timedatectl
      Local time: 金 2019-06-14 14:08:01 JST
  Universal time: 金 2019-06-14 05:08:01 UTC
        RTC time: 金 2019-06-14 05:08:00
       Time zone: Asia/Tokyo (JST, +0900)
     NTP enabled: no
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a
#

「timedatectl」コマンドで現在のローカルタイムを確認します。

# timedatectl set-timezone Asia/Tokyo

「Local time」が「JST」でない場合、上記のコマンドを実行します。

# timedatectl list-timezones

ちなみに、他のタイムゾーンを確認するコマンドは、上記になります。

時刻同期

時刻同期のためchronyの設定をします。

# systemctl status chronyd.service
● chronyd.service - NTP client/server
   Loaded: loaded (/usr/lib/systemd/system/chronyd.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:chronyd(8)
           man:chrony.conf(5)
#

chronydサービスのステータスを確認します。
現在は、「Active: inactive (dead)」起動していませんね。

それでは、chronyの設定をしていきますが、そもそもインストールされていない場合は、

# yum install chrony

で、インストールしてください。

# vi /etc/chrony.conf

今回は、日本標準時のNICTと同期するように設定します。
chronyの設定ファイルを開き、以下のようにserverを追加します。

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server ntp.nict.jp iburst

「server ntp.nict.jp iburst」を追記して、それより上の4つは、先頭に「#」をつけて無効化します。

# systemctl start chronyd.service

chronydサービスを起動します。

# systemctl status chronyd.service
● chronyd.service - NTP client/server
   Loaded: loaded (/usr/lib/systemd/system/chronyd.service; disabled; vendor preset: enabled)
   Active: active (running) since 金 2019-06-14 17:40:12 JST; 10s ago
     Docs: man:chronyd(8)
           man:chrony.conf(5)
  Process: 10387 ExecStartPost=/usr/libexec/chrony-helper update-daemon (code=exited, status=0/SUCCESS)
  Process: 10381 ExecStart=/usr/sbin/chronyd $OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 10385 (chronyd)
    Tasks: 1
   CGroup: /system.slice/chronyd.service
           └─10385 /usr/sbin/chronyd

 6月 14 17:40:12 centos systemd[1]: Starting NTP client/server...
 6月 14 17:40:12 centos chronyd[10385]: chronyd version 3.2 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SC...EBUG)
 6月 14 17:40:12 centos systemd[1]: Started NTP client/server.
 6月 14 17:40:21 centos chronyd[10385]: Selected source 133.243.238.243
Hint: Some lines were ellipsized, use -l to show in full.
# 

ステータスを確認します。
「Active: active (running)」起動していますね。

# chronyc sources -v
210 Number of sources = 1

  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
 / .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| /   '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          |  zzzz = estimated error.
||                                 |    |           \
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* ntp-a2.nict.go.jp             1   6   177    52  +9112us[  +40ms] +/- 4850us
# 

同期状態を確認します。
「ntp-a2.nict.go.jp」の左に「*」が表示されているので、同期されています。

# chronyc tracking
Reference ID    : 85F3EEF3 (ntp-a2.nict.go.jp)
Stratum         : 2
Ref time (UTC)  : Fri Jun 14 08:43:36 2019
System time     : 0.000025790 seconds slow of NTP time
Last offset     : +0.030498406 seconds
RMS offset      : 0.011791714 seconds
Frequency       : 216.958 ppm fast
Residual freq   : +125.864 ppm
Skew            : 488.904 ppm
Root delay      : 0.009633628 seconds
Root dispersion : 0.034416180 seconds
Update interval : 64.4 seconds
Leap status     : Normal
# 

トラッキングも確認しておきます。

# timedatectl set-ntp yes

自動同期を有効化します。

# timedatectl
      Local time: 金 2019-06-14 17:53:35 JST
  Universal time: 金 2019-06-14 08:53:35 UTC
        RTC time: 金 2019-06-14 08:53:34
       Time zone: Asia/Tokyo (JST, +0900)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a
# 

「timedatectl」コマンドを実行し、「NTP」関連が「yes」になっていることが確認できますね。

# systemctl status ntpdate.service
● ntpdate.service - Set time via NTP
   Loaded: loaded (/usr/lib/systemd/system/ntpdate.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
# 

chronydサービスを使う場合、ntpdateサービスは不要です。

# systemctl stop ntpdate.service

ステータスを確認し、起動している場合は、上記のコマンドで停止してください。

ロケールの設定

# localectl status
   System Locale: LANG=ja_JP.UTF-8
       VC Keymap: jp
      X11 Layout: jp
# 

「localectl」コマンドで、現在のロケールを確認します。

# localectl set-locale LANG=ja_JP.ujis

変更する場合のコマンドです。

# localectl list-locales

「LANG」に指定するロケールのリストを確認できます。

# source /etc/locale.conf

「source」コマンドで、変更をすぐに反映できます。

SELinux無効化

セキュリティ関連の機能ですが、設定が難しいため、今回は無効化します。

# getenforce
Enforcing
# 

有効になっているので、設定ファイルを編集して無効化します。

# vi /etc/selinux/config

#SELINUX=enforcing
SELINUX=disabled

「SELINUX=disabled」に変更します。

# reboot

設定を反映させるため、再起動します。

# getenforce
Disabled
# 

再起動後、無効化されていることが確認できますね。

ファイアウォールの設定

環境に合わせて、firewalldサービスの設定をします。

# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since 金 2019-06-14 19:27:43 JST; 1h 19min ago
     Docs: man:firewalld(1)
 Main PID: 3080 (firewalld)
    Tasks: 2
   CGroup: /system.slice/firewalld.service
           └─3080 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

 6月 14 19:27:40 centos systemd[1]: Starting firewalld - dynamic firewall daemon...
 6月 14 19:27:43 centos systemd[1]: Started firewalld - dynamic firewall daemon.
# 

ステータスを確認します。
「Active: active (running)」起動していますね。

# systemctl stop firewalld.service

余計な制御をしたくない場合は、「systemctl」コマンドで停止させます。

# systemctl disable firewalld.service

自動起動も無効化したい場合は、「disable」を設定します。

# firewall-cmd --get-active-zones
public
  interfaces: enp0s3 enp0s8
# 

firewalldサービスは、ゾーンという単位でアクセス制御しています。
「firewall-cmd」で現在割り当てられているゾーンを確認します。

# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3 enp0s8
  sources: 
  services: ssh dhcpv6-client
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
	
# 

現在の設定を確認します。

# firewall-cmd --zone=public --add-service=http --permanent

httpサービスをゾーンに追加してみます。
※「permanent」を付けると再起動後も有効になります。

# firewall-cmd --reload

リロードします。

# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3 enp0s8
  sources: 
  services: ssh dhcpv6-client http
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
	
# 

再度、現在の設定を確認すると、httpサービスが追加されていることが確認できます。
サービス追加の他にも、IPアドレスやポートの追加、アクセル拒否設定もできます。

# firewall-cmd --zone=public --remove-service=http --permanent

先ほど追加したhttpサービスの設定を削除するコマンドです。

まとめ

CentOSの初期設定を通じて、Linux環境にも慣れてきましたね。

他にも必要な設定や気になる設定などがあると思います。
是非、それらを深掘りし、スキルアップにつなげてください。

CentOS初期設定
最新情報をチェックしよう!