これまで LinuxサーバーのOSといえば CentOS をよく利用してきたのですが、つい先日 Ubuntu Server(ウブントゥ・サーバー)を使う機会がありました。CentOS と Ubuntu は、流派が異なるため、各種設定方法などに違いがあります。そこで今回は、CentOS との違いに着目して Ubuntu Server 20.04 の設定方法などをまとめてみました。
関連記事:Ubuntu Server 20.04 LAMP環境インストールメモ
- パッケージ管理は apt コマンドを使う
- パッケージのアップデートは update と upgrade を組み合わせて使う
- パッケージをインストールすると起動もしてくれる
- ファイアウォールの設定は ufw を使う
- command not found で終わらない
- SELinux はインストールされない
- ネットワーク系コマンドは ip と ss を使う
- ネットワークの設定は netplan で行う
- DNSサーバーの確認は systemd-resolve --status を使う
- ホスト名の変更は hostnamectl を使う
- 時刻同期は systemd-timesyncd を使う
- Apache httpd の設定は独特の作法がある
- おわりに
パッケージ管理は apt コマンドを使う
Ubuntu でのパッケージ管理は apt(Advanced Package Tool)コマンドで行います。
オプションの指定方法は CentOS のパッケージ管理ツール yum とほぼ同じなので戸惑うこともないでしょう。例えば 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 upgrade
パッケージをインストールすると起動もしてくれる
デーモンの起動や停止は CentOS と同じく Ubuntu も systemd を使いますが、Ubuntu では apt コマンドで起動が必要なパッケージをインストールすると、インストール後になにもしなくても起動し、自動起動まで設定してくれます。
例えば Webサーバーの Apache をインストールしてみると、、
なにもしなくても 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 では初期状態では無効になっています。
Status: inactive ←無効
例えば SSH(ポート22番)接続を許可するには次のように指定します。
ufw enable で有効化しようとすると「SSH接続ができなくなるかもよ!」と聞いてくれます。SSHのポートは許可していますので「y」を入力します。
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系システムでは、インストールされてないコマンドを打つと「そんなコマンド無いよ」と表示されて終わりです。
-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 コマンドを使いましょう。
非推奨コマンド | 代替えのコマンド |
---|---|
ifconfig | ip a |
arp | ip n |
route | ip r |
netstat | ss(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 の設定ファイルを作成します。先頭の番号が大きいほどその設定ファイルが優先されます。(自動で生成された設定ファイルを直接編集するのは作法的によろしくないようです)
作成した設定ファイルを編集して IPアドレスを変更します。
sudo vi /etc/netplan/99_config.yaml
enp0s8: addresses: - 192.168.56.11/24 ↓ - 192.168.56.12/24
変更した設定を反映します。
参考資料:
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サーバーを確認することができません。
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 を使うのが作法のようです。
オプションなしで 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.nict.jp 0.jp.pool.ntp.org 1.jp.pool.ntp.org 2.jp.pool.ntp.org 3.jp.pool.ntp.org
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だと思います。
コメント