CentOS使いのための Ubuntu Server 設定入門

Linux
Linux
スポンサーリンク

これまで LinuxサーバーのOSといえば CentOS をよく利用してきたのですが、つい先日 Ubuntu Server(ウブントゥ・サーバー)を使う機会がありました。CentOS と Ubuntu は、流派が異なるため、各種設定方法などに違いがあります。そこで今回は、CentOS との違いに着目して Ubuntu Server 20.04 の設定方法などをまとめてみました。

関連記事:Ubuntu Server 20.04 LAMP環境インストールメモ

パッケージ管理は apt コマンドを使う

Ubuntu でのパッケージ管理は apt(Advanced Package Tool)コマンドで行います。

オプションの指定方法は CentOS のパッケージ管理ツール yum とほぼ同じなので戸惑うこともないでしょう。例えば ssh サーバーをインストールする場合は次のように指定します。

sudo apt -y install ssh
apt --help
(略)
Most used commands:
  list - list packages based on package names
  search - search in package descriptions
  show - show package details
  install - install packages
  reinstall - reinstall packages
  remove - remove packages
  autoremove - Remove automatically all unused packages
  update - update list of available packages
  upgrade - upgrade the system by installing/upgrading packages
  full-upgrade - upgrade the system by removing/installing/upgrading packages
  edit-sources - edit the source information file
  satisfy - satisfy dependency strings

パッケージのアップデートは update と upgrade を組み合わせて使う

CentOS では yum update でインストール済みのパッケージが最新のものにアップデートされますが、Ubuntu の apt コマンドでは apt update でインストール済みの「パッケージのリスト」を更新し、更新されたパッケージのリストを元に apt upgrade でパッケージを最新のものにアップデートするといった手順になります。

sudo apt update
sudo apt upgrade

パッケージをインストールすると起動もしてくれる

デーモンの起動や停止は CentOS と同じく Ubuntu も systemd を使いますが、Ubuntu では apt コマンドで起動が必要なパッケージをインストールすると、インストール後になにもしなくても起動し、自動起動まで設定してくれます。

例えば Webサーバーの Apache をインストールしてみると、、

sudo apt -y install apache2

なにもしなくても Apache が起動し、

systemctl status apache2
(略)
     Active: active (running) since Fri 2020-07-31 21:17:52 UTC; 22s ago

Apache の自動起動も設定されています。

systemctl list-unit-files | grep apache2.service

apache2.service                        enabled         enabled

とても親切な仕様なのですが、CentOS ではパッケージをインストールしても起動もしなければ自動起動も設定されないので、CentOS を使ってきた方は少し戸惑うかもしれませんね。

ファイアウォールの設定は ufw を使う

Ubuntu でのファイアウォールの設定は ufw を使います。CentOS では firewall-cmd を使いますが、ファイアウォールのバックエンドは Ubuntu、CentOS ともに iptables です。

CentOS では初期状態でファイアウォールが有効になっていますが、Ubuntu では初期状態では無効になっています。

ufw status
Status: inactive ←無効

例えば SSH(ポート22番)接続を許可するには次のように指定します。

sudo ufw allow 22

ufw enable で有効化しようとすると「SSH接続ができなくなるかもよ!」と聞いてくれます。SSHのポートは許可していますので「y」を入力します。

sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y

ufw が有効になっていることを確認します。

sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere                  
22 (v6)                    ALLOW       Anywhere (v6)     

iptables の設定は難しいためラッパーとして CentOS では firewall-cmd が採用されていますが、余計に複雑になっているような気がします、、ufw は使い方が簡単なのが嬉しいですね。

command not found で終わらない

ほとんどの Linux/Unix系システムでは、インストールされてないコマンドを打つと「そんなコマンド無いよ」と表示されて終わりです。

mysql
-bash: mysql: command not found

しかし Ubuntu では、「次のようにしてインストールできるよ!」と教えてくれます。

mysql

Command 'mysql' not found, but can be installed with:

sudo apt install mysql-client-core-8.0     # version 8.0.21-0ubuntu0.20.04.3, or
sudo apt install mariadb-client-core-10.3  # version 1:10.3.22-1ubuntu1

SELinux はインストールされない

CentOS は、初期状態で SELinux がインストールされ有効になっていますが、Ubuntu では初期状態でインストールされません。

getenforce

Command 'getenforce' not found, but can be installed with:

sudo apt install selinux-utils

SELinux が必要な場合は、上に表示されているコマンドでインストールしましょう。

ネットワーク系コマンドは ip と ss を使う

これは Ubuntu に限ったことではありませんが、Linux で長年使われてきた ifconfig、arp、route、netstat などのネットワーク系コマンドは、現在メンテナンスされていないため非推奨になっています。

長くLinuxを使っているとつい apt install net-tools でインストールしたくなりますが、そこはグッとこらえて ip コマンド、や ss コマンドを使いましょう。

非推奨コマンド代替えのコマンド
ifconfigip a
arpip n
routeip r
netstatss(ss -antup が見やすい)

参考資料:Deprecated Linux networking commands and their replacements

ネットワークの設定は netplan で行う

Ubuntu Server 20.04 での IPアドレスや DNSサーバーなどネットワーク関連の設定は netplan で行います。

CentOS で使われている network-manager を apt からインストールすることもできますが、そもそもネットワーク接続ができていないがためにネットワークの設定を行うこともありますので Ubuntu を使うのであれば netplan に慣れておいた方がよいでしょう。

例えば、固定で設定している IPアドレスを netplan で変更するには次の手順で行います。

インストール時に生成された設定ファイルをリネームして netplan の設定ファイルを作成します。先頭の番号が大きいほどその設定ファイルが優先されます。(自動で生成された設定ファイルを直接編集するのは作法的によろしくないようです)

sudo mv -i /etc/netplan/00-installer-config.yaml /etc/netplan/99_config.yaml

作成した設定ファイルを編集して IPアドレスを変更します。
sudo vi /etc/netplan/99_config.yaml

    enp0s8:
      addresses:
      - 192.168.56.11/24
          ↓
      - 192.168.56.12/24

変更した設定を反映します。

sudo netplan apply

参考資料:
Network - Configuration | Server documentation | Ubuntu
Examples | Netplan

netplan の注意点

netplan は /etc/netplan/ 以下に配置されている設定ファイルをすべて読み込み、設定は「マージされる」ことに注意してください。

例えば次のような netplan の設定ファイルが2つあった場合、優先度の高い設定ファイル 99_config.yaml の 192.168.56.12 が設定されそうなのですが、、

/etc/netplan/00-installer-config.yaml

    enp0s8:
      addresses:
      - 192.168.56.11/24

/etc/netplan/99_config.yaml

    enp0s8:
      addresses:
      - 192.168.56.12/24

実際には設定はマージされ 192.168.56.11 と 192.168.56.12 の2つの IPアドレスが設定されます。

ip a

3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:54:67:0f brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.12/24 brd 192.168.56.255 scope global enp0s8
       valid_lft forever preferred_lft forever
    inet 192.168.56.11/24 brd 192.168.56.255 scope global secondary enp0s8

DNSサーバーの確認は systemd-resolve --status を使う

Ubuntu Server 20.04 での DNS 名前解決は systemd-resolved というサービスが使われているため /etc/resolv.conf を見ても設定されている DNSサーバーを確認することができません。

cat /etc/resolv.conf
nameserver 127.0.0.53

Ubuntu で 設定されている DNSサーバーを確認するには「systemd-resolve --status」コマンドを使います。

systemd-resolve --status
(略)
         DNS Servers: 8.8.8.8
                      1.1.1.1

DNSサーバーの設定変更については、先の netplan を使います。
sudo vi /etc/netplan/99_config.yaml

    enp0s8:
  (略)
      nameservers:
        addresses:
        - 8.8.8.8
        - 1.1.1.1
       ↓
        - 4.4.4.4

ホスト名の変更は hostnamectl を使う

CentOS では hostnamectl または NetworkManager でホスト名を変更することもできますが、Ubuntu では hostnamectl を使うのが作法のようです。

sudo hostnamectl set-hostname sv999

オプションなしで hostnamectl コマンドを実行すれば設定されているホスト名などを確認できます。

hostnamectl

   Static hostname: sv999
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 9abda5526995450c82eaadf21174c82c
           Boot ID: be7383c8a6464561886643d53067bffd
    Virtualization: oracle
  Operating System: Ubuntu 20.04 LTS
            Kernel: Linux 5.4.0-42-generic
      Architecture: x86-64

時刻同期は systemd-timesyncd を使う

Ubuntu Server 20.04 での時刻同期は NTPクライアントの systemd-timesyncd を使います。

systemd-timesyncd が参照する NTPサーバーを指定します。複数設定する場合は半角スペース区切りで指定します。
vi /etc/systemd/timesyncd.conf

#NTP=
 ↓
NTP=ntp.nict.jp 0.jp.pool.ntp.org 1.jp.pool.ntp.org 2.jp.pool.ntp.org 3.jp.pool.ntp.org

systemd-timesyncd を再起動します。

systemctl restart systemd-timesyncd

NTPサーバーと同期していることを確認します。

timedatectl status
(略)   
System clock synchronized: yes ←同期OK           
              NTP service: active                     
          RTC in local TZ: no   

Apache httpd の設定は独特の作法がある

Ubuntu Server 20.04 での Apache httpd の設定は独特の作法があります。

例えばバーチャルホストの設定は、バーチャルホストごとに /etc/apache2/sites-available/ の下に1つ設定ファイルを作成し、a2ensite コマンドで有効にするといった手順になります。

参考資料:Web Servers - Apache | Server documentation | Ubuntu

つい /etc/apache2/apache2.conf(httpd.conf に該当する設定ファイルです)にまとめて設定したくなりますが、郷に入れば郷に従え Ubuntu の作法に慣れましょう。

おわりに

Ubuntu Server 20.04 は、初期状態で必要なパッケージのみインストールされますので(sshdすらインストールされません)意図しないサービスが起動していることもありません。CentOS とはだいぶ作法は違いますが、Ubuntu は安心して使える LinuxサーバーOSだと思います。

コメント

タイトルとURLをコピーしました