ゼロからわかるLinuxサーバー超入門 Ubuntu対応版

補足解説

この記事を読むのに必要な時間:およそ 5 分

カーネルアップデート P.124

時折,以下のようなカーネルアップデートの画面が割り込むことがあります。学習時は,上下キーなどで,[OK]に合わせ,Enterキーで確定して進めてください。

linux1.png linux2.png

ただし,カーネルのアップデートには,大きな変更が含まれることがあります。すると,何が起こるか予測ができません。

また,市販のソフトウェアや,開発ベンダーの開発したシステムなどで,カーネルのバージョンが指定されており,動かなくなってしまうこともあります。特に,ウィルス対策ソフトなど,マイナーバージョンを含めた指定があるようなソフトウェアを使っている時には,引っかかってしまいやすいです。

そのため,実際の運用時にカーネルのアップデートが求められた場合には,慎重に関係者と検討してください。アップデートはしなければならないものですが,それが叶わないこともあります。よく調査し,判断してください。

DNS P.17, 144, 308

※この内容は,少し難しいので,本書読了後に読んで下さい。

我々が,レストランに向かう時,その場所の住所を頼りに店を探します。

同じように,サーバーや,クライアントがネットワーク上のどこにいるのか?を表す住所のようなものがIPアドレスです。118.11.XX.XXXのような数字の組みあわせであらわされます。

ですから,Webサーバー(Webページ)にアクセスする時も,本来ならIPアドレスでアクセスするのですが,毎回「118.11.xxx…」と入力するのは,覚えづらいです。そこで,人間にも分かりやすいように,アルファベットなどの文字列(URI)でアクセスできるようにしている仕組みがDNS(Domain Name System=ドメイン ネーム システム)です。URIの「gihyo.jp」「mofukabur.com」のような部分のことを,「ドメイン」と言います。IPアドレスが住所なら,ドメインは建物のニックネームのようなものです。

たとえば,閲覧者が,「www.mofukabur.com」にアクセスしようとした時に,「www. mofukabur.comのIPアドレスは,118.11.xxx…です」と建物のニックネームから実際の住所を教えてくれるのがDNSなのです。

これを「名前解決」と言います。そして,問い合わせを行うソフトウェアを「リゾルバ(resolver)」と言います。

一つの名前解決を行うのに必要なDNSサーバーは,複数です。一つのDNSサーバーが世界中のドメインを解決できるわけがないので,情報は分散しているのです。

例えば,閲覧者が「www.mofukabur.com」とブラウザなどに入力すると,まずは,閲覧者が使っているプロバイダのDNSサーバーに問い合わせ,そこからいくつかのDNSサーバーを経由して,ルートDNSサーバーに辿り着きます。

ルートDNSサーバーは,ドメイン名を右側から見ていって,「jp」のドメインなら,「jpを担当するDNSサーバー」に問い合わせします。jp担当DNSサーバーは,更に次の「DNS,次のDNSは更に次のDNSとバケツリレーのようにたどり,実際にその対応を知っているサーバーに問い合わせるのです。そして,帰ってきた答えもバケツリレーで伝わります。

DNSサーバーを設定するには,まず,自分のサーバーにbindなどのソフトウェアをインストールし,その設定ファイルに,「www.mofukabur.com」といったドメイン名とIPアドレスとの関係を記述します。これを「レコード」と言います。

これだけでは,他の人からの問い合わせが,このDNSサーバーに来ないので,上位のDNSサーバーからたどられるように,構築したDNSサーバーのIPアドレスを登録してもらうように依頼します。この依頼は,通常,ドメインを取得した会社(レジストラ)に申請します。最近はフォームから入力すると,1日程度で反映してもらえます。

なお,近頃では,自前でDNSサーバーを立てることは少なくなっており,ドメイン事業者が運営しているDNSサーバーを使ったり,クラウドで借りたりすることが多くなっています。

※同人誌「空飛ぶエンジニア用語辞典」より引用

これはあくまで初心者のためのザックリとした説明です。DNSの仕組みに興味を持ったら,専門書を読んでみると良いでしょう。

メールの仕組み P.17, 308

※この内容は,少し難しいので,本書読了後に読んで下さい。また,先に前項のDNSの仕組みを読んで理解しておいてください。

メールの送受信はメールサーバーが担当します。正確には「SMTP(Simple Mail Transfer Protocol )サーバー」という名前です。メールをトランスファー(転送)するプロトコルを使ったソフトウェアです。

実際にメールを送信する場合,どのような経路をたどるのか説明していきましょう。

仮に,ニャゴロウが,チロ氏にメールを送るとします。ニャゴロウが,クライアントパソコンの中にあるメールソフトMUA=Mail User Agent)で送信ボタンを押すと,ニャゴロウの契約しているメールプロバイダのメールサーバーに送られます。会社の場合は,会社のメールサーバーのこともあります。

それらのメールサーバー(MTA=Mail Transfer Agent)は,メールを受け取ると,いったん,キューと呼ばれる場所に貯めます。そしてキューから適時メールを取り出して,転送処理を始めます。メールの転送処理では,宛先の「@以下のドメイン」をDNSサーバから探します。具体的にはMX(Mail Excahnge⁠」という設定のDNSのレコードを参照します。

ここには,そのドメインのメール受信を担当するメールサーバーのIPアドレスの一覧が書かれており,該当のサーバー(チロのプロバイダ)に接続して,メールを転送します。

転送されたメールは,チロのプロバイダにて,⁠@」よりも前のユーザー名の部分(chiro)が確認され,存在するユーザーであれば,MDA (Mail Delivery Agent)」が,そのユーザーのメールボックス(サーバー上の,そのユーザー専用のディスク領域)に保存します。

ここまでがメールの送信操作です。

受信する場合は,ユーザーは,サーバーに接続して,このメールボックスを読み出します。メールの受信側は,なんとなく勝手に送られてくるイメージがあるかもしれませんが,そうではなく,取りに行っています。メールが自動で届くように感じるのは,メールソフトが定期的に取りに行っているからに過ぎません。

メールボックスの読み出しには,SMTPではなく,POP3やIMAP4などのプロトコルが使われます。POP3はダウンロードして読み出すもの,IMAP4はサーバに置いたまま操作するものです。

メールサーバの構築方法は,SMTPサーバー(メールの転送)と,POP3サーバーやIMAP4サーバー(メールボックスの読み出し)とで異なります。

SMTPサーバーの場合は,SendmailやPostfixなどのソフトをインストールします。インストールする際には,担当するドメイン名(受信するドメイン名)を設定します。構築が終わったら,そのサーバーをDNSのMXレコードに登録することで,他から,そのドメイン名宛てのメールを受け取れるようになります。

SMTPサーバーを構築する場合は,関係のない人に使われないようにすることが必要です。そうしておかないと,構築したSMTPサーバーを使って,大量のSPAMを送信されてしまう恐れがあります。こうしたことがないよう,接続を社内のIPアドレスに絞ったり,ユーザー認証を設定して,送信の際にユーザー名やパスワードを求めるように構成します。

なお近年は,大量のSPAMが送信されるのを防ぐため,プロバイダによっては,SMTPサーバーがメールを転送するときに使うポート(ポート25番)が塞がれていて,SMTPサーバーを構築しても,メールを送信できないこともあります。

POP3サーバーやIMAP4サーバーの場合は,SMTPサーバーとは別のソフトをインストールします。たとえば,Dovecotなどです。Dovecotは,POP3とIMAP4の両方に対応するメールサーバーです。受信可能なユーザー(⁠⁠@」よりも前の名前)とパスワードを設定しておくと,PCにインストールしたメールソフト(MUA)から接続してそのユーザー宛に届いたメールを受信できます。

なお,SMTPサーバーとPOP3サーバ/IMAP4サーバーは,使っているソフトが違うので,ユーザー認証も別物です。ユーザー名やパスワードが違うと紛らわしいので,通常は,どちらも同じユーザー名・パスワードでアクセスできるように構成しますが,それは,そのように構成するからであり,自動で連動するわけではありません。

※同人誌「空飛ぶエンジニア用語辞典」より引用

これはあくまで初心者のためのザックリとした説明です。DNSの仕組みに興味を持ったら,専門書を読んでみると良いでしょう。

VMWareネットワーク設定 P.69

現在,準備中です。近日中に公開いたします。

一般ユーザーによるドキュメントルートへのアクセス P.182

ドキュメントルートのディレクトリの所有者がrootになっていると,一般ユーザーのアカウントではアクセスできません。しかし,初期状態ではそのようになっているので,ここでは,所有者を変える方法を説明します。

ディレクトリやファイルには,所有者や所有グループが設定されています。chownコマンドは,⁠change owner」の略で,オーナー(所有者)を変更するコマンドです。これを使って,⁠/var/www/html」ディレクトリの所有者を変更します。セキュリティに関わる重要な変更なので,sudoコマンドでの実行が必要です。

ディレクトリの所有者を変えるコマンド
nyagoro@yellow:~$ sudo chown [変更先ユーザー名] [変更したいディレクトリ]
「/var/www/html」ディレクトリの所有者をnyagoro ユーザーに変える例
nyagoro@yellow:~$ sudo chown -R nyagoro /var/www/html
※ -R は中身全ての所有者を変更するオプション

やってみよう

lsコマンドで,対象ディレクトリの所有者がrootになっていることを確認し,その後,chownコマンドで,所有者をnyagoroに変更。変更後に再びlsコマンドで所有者を確認します。

  1. 「ls」コマンドで所有者を確認する

    入力コマンド
    nyagoro@yellow:~$ ls -al /var/www

    出力結果
    total 12
    drwxr-xr-x 3 root root 4096 Feb 2 08:10 . ←/var/wwwの所有者
    drwxr-xr-x 14 root root 4096 Feb 2 08:10 ..  ←/var/の所有者
    drwxr-xr-x 2 root root 4096 Feb 7 21:05 html ←/var/www/htmlの所有者
  2. 「chown」コマンドでhtmlディレクトリの所有者を変更する

    入力コマンド
    nyagoro@yellow:~$ sudo chown -R nyagoro /var/www/html
  3. 「ls」コマンドでhtmlディレクトリの所有者がnyagoroになっていることを確認する

    入力コマンド
    $ ls -al /var/www

    出力結果
    total 12
    drwxr-xr-x  3 root    root 4096 Feb  2 08:10 .  ←/var/wwwの所有者
    drwxr-xr-x 14 root    root 4096 Feb  2 08:10 ..   ←/var/の所有者
    drwxr-xr-x  2 nyagoro root 4096 Feb  7 21:05 html  ←/var/www/htmlの所有者

    nyagoroに変更されていることがわかります。念のため,htmlに対してもlsコマンドで確認してみましょう。
  4. 「ls」コマンドでhtmlディレクトリ内ファイルの所有者を確認する

    入力コマンド
    $ ls -al /var/www/html

    出力結果
    total 32
    drwxr-xr-x 2 nyagoro root 4096 Feb 7 21:05 .  ←/var/www/htmlの所有者
    drwxr-xr-x 3 root root 4096 Feb 2 08:10 ..  ←/var/wwwの所有者
    -rw-r--r-- 1 nyagoro root 118 Feb 7 18:16 example.html ←html内ファイル
    -rw-r--r-- 1 nyagoro root 131 Feb 7 21:03 .htaccess ←html内ファイル
    -rw-r--r-- 1 nyagoro root 63 Feb 7 21:05 .htdigest ←html内ファイル
    -rw-r--r-- 1 nyagoro root 10671 Feb 2 08:10 index.html ←html内ファイル

AppArmorの解説 P.304

AppArmorは,コマンド(プログラム)のファイルへのアクセス制限を課して,セキュリティを強化する仕組みです。例えば,本書でも,lsやcatなど様々なコマンドを打ちましたが,そうしたコマンドに対し,⁠このファイルにはこのコマンドは有効」⁠このディレクトリには無効」と設定します。

どのディレクトリやどのファイルに対して,どのような制限を課すかは,⁠プロファイル(profile⁠⁠」と呼ばれる情報で管理します(プロファイルは/etc/apparmor.dにあります⁠⁠。

プロファイルには,警告のみが記録されるものの,実際のアクセスは制限しない「complainモード」と,実際にアクセス制限する「enforceモード」の2種類があります。前者は,設定が正しいかを確認するときなどに使います。

現在,どのプロファイルが有効であるのかは,aa-statusコマンドで確認できます。実際に確認すると,下記のように,33個のプロファイルが「enforceモード」で動作しているのがわかります。プロファイルには,⁠○○プログラムはペケペケファイルに対して有効」といった設定が書かれています。

$ sudo aa-status
apparmor module is loaded.
33 profiles are loaded.
33 profiles are in enforce mode.  ←ここから下のリストが一覧
   /snap/snapd/17883/usr/lib/snapd/snap-confine
   /snap/snapd/17883/usr/lib/snapd/snap-confine//mount-namespace-capture-helper
   /snap/snapd/17950/usr/lib/snapd/snap-confine
   /snap/snapd/17950/usr/lib/snapd/snap-confine//mount-namespace-capture-helper
   /snap/snapd/18357/usr/lib/snapd/snap-confine
   /snap/snapd/18357/usr/lib/snapd/snap-confine//mount-namespace-capture-helper
   /usr/bin/man
   /usr/lib/NetworkManager/nm-dhcp-client.action
   /usr/lib/NetworkManager/nm-dhcp-helper
(中略)
0 processes are unconfined but have a profile defined.
0 processes are in mixed mode.
0 processes are in kill mode.

これら初期状態で設定されているプロファイルの多くは,ネットワークやオンラインマニュアルなどに関するコマンド操作を制限するものです。どちらも操作されると大事になりやすいので,デフォルトで制限されています。

このように,制限されていることで,万一不正なコマンドが実行されても,重要なファイルやディレクトリへのアクセスできないので,OSをセキュアに保てます。

ただこれらはあくまで初期状態です。プロファイルを追加したいこともあるでしょう。

その場合は,apparmot-profilesというパッケージなどをインストールすると,追加のプロファイルが追加できます。

apparmot-profilesを追加するコマンド
$ sudo apt install apparmor-profiles

また,追加後にカスタマイズするのであれば,そのためのツール(apparmor-utils)も,別途必要です。こちらもインストールします。

apparmor-utilsを追加するコマンド
$ sudo apt install apparmor-utils

追加したプロファイルは,complainモードになっています。必要なものだけをenforceモードに変更するような仕組みです。増えたプロファイルは,aa-statusコマンドで確認するとわかります。

nyagoro@yellow:/etc/apparmor.d$ sudo aa-status
apparmor module is loaded.
50 profiles are loaded.
33 profiles are in enforce mode.
(中略)
17 profiles are in complain mode. ←ここから下が追加されたもの
   avahi-daemon
   dnsmasq
   dnsmasq//libvirt_leaseshelper
   identd
   klogd
   mdnsd
   nmbd
   nscd
   php-fpm
   ping
(中略)
0 processes are in mixed mode.
0 processes are in kill mode.

名前から想像できますが,たとえば「PHPに関するもの」⁠ログ(syslog⁠⁠」に関するものなどがあります。いくつか試しに,enforceにしたり,complainに戻す操作をしてみると良いでしょう。なお,完全に対象外にする場合は,aa-disableコマンドを使用します。

enforceモードに変更するコマンド
sudo aa-enforce [対象ファイルやディレクトリ]
complainモードに戻す変更するコマンド
sudo aa-complain [対象ファイルやディレクトリ]
対象から解除するコマンド(aa-disable)
sudo aa-disable /etc/apparmor.d/sbin.syslog-ng