Yamamoto's Laboratory
設定・管理

ネットワーク設定

ネットワークの設定方法を示します.

IP アドレスの設定

IPアドレスを自動取得から固定にします.その方が後々面倒が無くて良いからです. 私の WEB サーバーでは,以下の手銃で 192.168.1.82 に設定しました.固定 IP にするためには,ファイル「/etc/network/interfaces」を編集します.

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto enp2s0
      #iface enp2s0 inet dhcp
      iface enp2s0 inet static
	address 192.168.1.82
	netmask 255.255.255.0
	broadcast 192.168.1.255
	gateway 192.168.1.1
	dns-nameservers 192.168.1.1

赤字の部分を編集しました.以前の Netowrk Interface 名は eth0 でしたが,enp2s0 に変わりました.

DNS の設定

設定

以前の Ubuntu serve の DNS (Domain Name System) の設定は,「/etc/resolv.conf」でした.Ubuntu 18.04 の設定場所は,異なります.このファイルはありますが,「/run/resolvconf/resolv.conf」のシンボリックリンクになっています.リンク先のファイルのコメント欄に「DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN (あんたは,このファイルは編集するな.お前の変更は上書きされるぞ)」と書かれていますので,編集はできません(避けるべきです).

Ubunt 18.04 の DNS の設定は,「/etc/systemd/resolved.conf」に記述します.複数の IP を設定する場合は,空白で区切ります.

[Resolve]
DNS= XXX.XXX.XXX.XXX  YYY.YYY.YYY.YYY  8.8.8.8

この例では,三つの DNS (XXX.XXX.XXX.XXX, YYY.YYY.YYY.YYY, 8.8.8.8) を設定します.

確認

DNS の設定は,コマンド「systemd-resolve --status」で確認できます.コマンドと実行結果の例を以下に示します.

$ systemd-resolve  --status
Global
        DNS Servers: XXX.XXX.XXX.XXX
                     YYY.YYY.YYY.YYY
                     8.8.8.8
                     ······
                     ······

起動シーケンスと CUI に変更

基礎知識 (Ubuntu の起動シーケンス)

Ubuntu 15.04 から従来の sysvinit から systemd になり,ランレベルからターゲットに変わりました.デフォルトのターゲットは,コマンド「systemctl get-default」で表示します.

$  systemctl get-default
graphical.target

systemd での起動は,default.target のユニットという単位で処理されます.そのユニットは,コマンド「systemctl list-dependencies」を使うと,ツリーでユニットを表示することができます.コマンドの結果のツリーは,以下のとおりです.ノードをクリックすると,ツリーを開いたり閉じたりできます.

  • default.target
    • accounts-daemon.service
    • apport.service
    • display-manager.service
    • grub-common.service
    • systemd-update-utmp-runlevel.service
    • ureadahead.service
    • multi-user.target
      • apache-htcacheclean.service
      • apache2.service
      • apport.service
      • atd.service
      • console-setup.service
      • cron.service
      • dbus.service
      • ebtables.service
      • grub-common.service
      • irqbalance.service
      • lxcfs.service
      • lxd-containers.service
      • mysql.service
      • networkd-dispatcher.service
      • networking.service
      • nmbd.service
      • ondemand.service
      • open-vm-tools.service
      • plymouth-quit-wait.service
      • plymouth-quit.service
      • pollinate.service
      • rsync.service
      • rsyslog.service
      • smbd.service
      • snapd.autoimport.service
      • snapd.core-fixup.service
      • snapd.refresh.timer
      • snapd.seeded.service
      • snapd.service
      • ssh.service
      • systemd-ask-password-wall.path
      • systemd-logind.service
      • systemd-resolved.service
      • systemd-update-utmp-runlevel.service
      • systemd-user-sessions.service
      • thermald.service
      • ufw.service
      • unattended-upgrades.service
      • winbind.service
      • basic.target
        • -.mount
        • tmp.mount
        • paths.target
          • acpid.path
          • apport-autoreport.path
        • slices.target
          • -.slice
          • system.slice
        • sockets.target
          • acpid.socket
          • apport-forward.socket
          • dbus.socket
          • dm-event.socket
          • iscsid.socket
          • lxd.socket
          • snapd.socket
          • systemd-initctl.socket
          • systemd-journald-audit.socket
          • systemd-journald-dev-log.socket
          • systemd-journald.socket
          • systemd-udevd-control.socket
          • systemd-udevd-kernel.socket
          • uuidd.socket
        • sysinit.target
          • apparmor.service
          • blk-availability.service
          • dev-hugepages.mount
          • dev-mqueue.mount
          • keyboard-setup.service
          • kmod-static-nodes.service
          • lvm2-lvmetad.socket
          • lvm2-lvmpolld.socket
          • lvm2-monitor.service
          • open-iscsi.service
          • plymouth-read-write.service
          • plymouth-start.service
          • proc-sys-fs-binfmt_misc.automount
          • resolvconf.service
          • setvtrgb.service
          • sys-fs-fuse-connections.mount
          • sys-kernel-config.mount
          • sys-kernel-debug.mount
          • systemd-ask-password-console.path
          • systemd-binfmt.service
          • systemd-hwdb-update.service
          • systemd-journal-flush.service
          • systemd-journald.service
          • systemd-machine-id-commit.service
          • systemd-modules-load.service
          • systemd-random-seed.service
          • systemd-sysctl.service
          • systemd-timesyncd.service
          • systemd-tmpfiles-setup-dev.service
          • systemd-tmpfiles-setup.service
          • systemd-udev-trigger.service
          • systemd-udevd.service
          • systemd-update-utmp.service
          • cryptsetup.target
          • local-fs.target
            • -.mount
            • boot-efi.mount
            • systemd-fsck-root.service
            • systemd-remount-fs.service
          • swap.target
            • dev-disk-by\x2duuid-0a271d4f\x2d0c92\x2d44b7\x2da12a\x2d7a40acac627…
        • timers.target
          • apt-daily-upgrade.timer
          • apt-daily.timer
          • fstrim.timer
          • motd-news.timer
          • phpsessionclean.timer
          • snapd.snap-repair.timer
          • systemd-tmpfiles-clean.timer
      • getty.target
        • getty-static.service
        • getty@tty1.service
      • remote-fs.target

ルートの default.target が OS 起動シーケンスの起点となるユニットです.ユニットの種類は,拡張子で区別されます.このうち拡張子が「*.service」となっているものがサービス (デーモン) の起動です.

CUI に変更

WEB サーバーには GUI は不要なので,CUI に変更します.そのためのコマンドは「systemctl set-default multi-user.target」です.以下にコマンドと実行結果を示します.

$ sudo systemctl  set-default  multi-user.target
Created symlink /etc/systemd/system/default.target → /lib/systemd/system/multi-user.target.

CUI の変更後は,サーバー PC の再起動が必要です.再起動後に,コマンド「systemctl list-dependencies」でターゲットのツリーを確認します.CUI (multi-user.target) のツリーは以下のとおりです.ノードをクリックすると,ツリーを閉じたり,開いたりできます.CUI にしたことで,デフォルトの graphical.target の multi-user.target が展開されていることが分かります.

  • default.target
    • apache-htcacheclean.service
    • apache2.service
    • apport.service
    • atd.service
    • console-setup.service
    • cron.service
    • dbus.service
    • ebtables.service
    • grub-common.service
    • irqbalance.service
    • lxcfs.service
    • lxd-containers.service
    • mysql.service
    • networkd-dispatcher.service
    • networking.service
    • nmbd.service
    • ondemand.service
    • open-vm-tools.service
    • plymouth-quit-wait.service
    • plymouth-quit.service
    • pollinate.service
    • rsync.service
    • rsyslog.service
    • smbd.service
    • snapd.autoimport.service
    • snapd.core-fixup.service
    • snapd.refresh.timer
    • snapd.seeded.service
    • snapd.service
    • ssh.service
    • systemd-ask-password-wall.path
    • systemd-logind.service
    • systemd-resolved.service
    • systemd-update-utmp-runlevel.service
    • systemd-user-sessions.service
    • thermald.service
    • ufw.service
    • unattended-upgrades.service
    • winbind.service
    • basic.target
      • -.mount
      • tmp.mount
      • paths.target
        • acpid.path
        • apport-autoreport.path
      • slices.target
        • -.slice
        • system.slice
      • sockets.target
        • acpid.socket
        • apport-forward.socket
        • dbus.socket
        • dm-event.socket
        • iscsid.socket
        • lxd.socket
        • snapd.socket
        • systemd-initctl.socket
        • systemd-journald-audit.socket
        • systemd-journald-dev-log.socket
        • systemd-journald.socket
        • systemd-udevd-control.socket
        • systemd-udevd-kernel.socket
        • uuidd.socket
      • sysinit.target
        • apparmor.service
        • blk-availability.service
        • dev-hugepages.mount
        • dev-mqueue.mount
        • keyboard-setup.service
        • kmod-static-nodes.service
        • lvm2-lvmetad.socket
        • lvm2-lvmpolld.socket
        • lvm2-monitor.service
        • open-iscsi.service
        • plymouth-read-write.service
        • plymouth-start.service
        • proc-sys-fs-binfmt_misc.automount
        • resolvconf.service
        • setvtrgb.service
        • sys-fs-fuse-connections.mount
        • sys-kernel-config.mount
        • sys-kernel-debug.mount
        • systemd-ask-password-console.path
        • systemd-binfmt.service
        • systemd-hwdb-update.service
        • systemd-journal-flush.service
        • systemd-journald.service
        • systemd-machine-id-commit.service
        • systemd-modules-load.service
        • systemd-random-seed.service
        • systemd-sysctl.service
        • systemd-timesyncd.service
        • systemd-tmpfiles-setup-dev.service
        • systemd-tmpfiles-setup.service
        • systemd-udev-trigger.service
        • systemd-udevd.service
        • systemd-update-utmp.service
        • cryptsetup.target
        • local-fs.target
          • -.mount
          • boot-efi.mount
          • systemd-fsck-root.service
          • systemd-remount-fs.service
        • swap.target
          • dev-disk-by\x2duuid-0a271d4f\x2d0c92\x2d44b7\x2da12a\x2d7a40acac627…
      • timers.target
        • apt-daily-upgrade.timer
        • apt-daily.timer
        • fstrim.timer
        • motd-news.timer
        • phpsessionclean.timer
        • snapd.snap-repair.timer
        • systemd-tmpfiles-clean.timer
    • getty.target
      • getty-static.service
      • getty@tty1.service
    • remote-fs.target

起動シーケンスのターゲット「multi-user.target」では,私の WEB サーバーで必要な以下のサービスが起動します.ユニットを追加する必要はありません.

WEB サーバーで使うサービス
ユニット 動作
apache-htcacheclean.service Disk Cache Cleaning Daemon for Apache HTTP Server
apache2.service The Apache HTTP Server
cron.service Regular background program processing daemon
mysql.service MySQL Community Server
smbd.service Samba SMB Daemon
ssh.service OpenBSD Secure Shell server

サービス(デーモン)の管理

service による起動他

コマンド「service」を使うと,サービスの起動・停止,状態確認などができます.例えば,以下のとおりです.

$ service apache2 status
  apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset:
  Drop-In: /lib/systemd/system/apache2.service.d
           └─apache2-systemd.conf
   Active: active (running) since Mon 2019-08-12 14:54:46 JST; 1h 29min ago
  Process: 1104 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCE
 Main PID: 1233 (apache2)
    Tasks: 6 (limit: 4915)
   CGroup: /system.slice/apache2.service
           ├─1233 /usr/sbin/apache2 -k start
           ├─1234 /usr/sbin/apache2 -k start
           ├─1235 /usr/sbin/apache2 -k start
           ├─1236 /usr/sbin/apache2 -k start
           ├─1239 /usr/sbin/apache2 -k start
           └─1241 /usr/sbin/apache2 -k start

 8月 12 14:54:46 www3 systemd[1]: Starting The Apache HTTP Server...
 8月 12 14:54:46 www3 systemd[1]: Started The Apache HTTP Server.

しかし,これは PC を再起動すると,元に戻ります.systemd のターゲットの指定のとおりになります.一時的に,起動/停止などをするときは便利です.このコマンドは,「/etc/init.d/」にある起動スクリプトを操作しています.したがって,この起動スクリプトを直接実行させても,service を使っても同じ結果が得られます.たとえば,先のコマンドは,このコマンド「/etc/init.d/apache2 status」で同じ結果が得られます.

service は,以下のような引数をとります.

# service スクリプト  コマンド

たとえば,Apache を再起動するためには,「service apache2 restart」とします.最初の引数は起動スクリプトであることに注意してください.サービス名ではありません.この起動スクリプトは,/etc/init.d/ を見れば分かります.それぞれのサービスに対応した起動スクリプトがあるはずです.コマンドは起動スクリプト毎に異なりますが,代表的な以下のコマンドは大体の起動スクリプトで使えます.

start 起動
restart 再起動
stop 停止
status 状態表示

起動の確認

コマンド「pstree」を使うとプロセスの状況を確認できます.このコマンドの実行結果は,以下の通りです.

$ pstree
systemd─┬─agetty
        ├─apache2───5*[apache2]
        ├─atd
        ├─cron
        ├─dbus-daemon
        ├─htcacheclean
        ├─irqbalance───{irqbalance}
        ├─lvmetad
        ├─lxcfs───4*[{lxcfs}]
        ├─mysqld───26*[{mysqld}]
        ├─networkd-dispat───{networkd-dispat}
        ├─rsyslogd───3*[{rsyslogd}]
        ├─smbd─┬─cleanupd
        │      ├─lpqd
        │      └─smbd-notifyd
        ├─sshd───sshd───sshd───bash───pstree
        ├─systemd───(sd-pam)
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-resolve
        ├─systemd-timesyn───{systemd-timesyn}
        ├─systemd-udevd
        ├─thermald───{thermald}
        ├─unattended-upgr───{unattended-upgr}
        └─winbindd───3*[winbindd]

プロセスの親子関係がツリー構造で表されています.また,「5*[apache2]」は10個の apache2 のプロセスを表しています.pstree の詳細については,ここら辺を参考にしてください.

ポートの管理

ファイアーウォール

ubunts server の場合,デフォルトでは全てのポートは閉じています.そして,サーバープログラムをインストールすると,自動的に使うポートが開放されるようです.

ポートスキャン

ポートの状態を確認するには,ポートスキャンを最も効果的です.ここでは,nmap を使います.まずは,以下のコマンドで nmap をインストールします.

$ sudo apt-get install nmap

nmap はいろいろな使い方があるようです.たとえば,「清く、正しい、nmapの使い方」に,詳しく書かれています.「清くなく,正しくない使い方」もあるようですが,使う場合には気をつけてください.

サーバーの管理では,自分のポートの状態が重要です.自分のポートを調べるには,次のようにします.

$ nmap localhost -p 1-65535  ←ポートスキャンするコマンド

Starting Nmap 7.60 ( https://nmap.org ) at 2019-08-12 17:33 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000060s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 65529 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
139/tcp  open  netbios-ssn
445/tcp  open  microsoft-ds
3306/tcp open  mysql
6010/tcp open  x11

Nmap done: 1 IP address (1 host up) scanned in 1.85 seconds

よく分からないポートがあった場合,コマンド「fuser」をつかって,そのポートを利用しているプロセスIDを調べます.先の例では,ポートの6010とか6011が何に使われているのか分かりません.

$ sudo fuser -nv tcp 445
445/tcp:              1388

この結果から,プロセス ID の 1388番がポートの 6010 を使っていることが分かります.プロセスの情報は「ps -p 1388」で得ることができます.その結果,PID=1388 は smbd が使っていることが判明しました.

ルーターの設定

自宅の WEB サーバーを外部に公開するためには,ルーターの設定が必要です.私の場合,NTTのルーター PR-S300NE で次のように設定しています.

ルーターの設定
変換対象プロトコル 変換対象ポート 宛先アドレス 宛先ポート
TCP www 192.168.1.82 www
TCP 22 192.168.1.82 22

ユーザー/グループの管理

ユーザーの追加・削除

追加

ユーザー「hogehoge」の追加は,次のようにします.

$ sudo adduser hogehoge

すると,パスワードなどが聞かれますので,適当にタイプします.新ユーザー「hogehoge」のパスワードは忘れると面倒なことになりますので,メモした方が良いでしょう.その後,フルネームやら部屋番号,電話番号の問い合わせがありますが,適当にタイプします.これらを入力しない場合は,そのまま [Enter] キーを押します.

ユーザーの情報は,ファイル「/etc/passwd」に書かれます.Ubuntu の場合,ユーザー情報は以下の通りです.

アカウント名:x:ユーザー ID:グループ ID:Full Name,Room Number,Work Phone,Home Phone,Other:ホームディレクトリー:ログインシェル

削除

ユーザー「hogehoge」の削除は,次のようにします.

$ sudo userdel hogehoge

この場合,ユーザー「hogehoge」のアカウントは削除されますが,ホームディレクトリーやメールスプールは残ります.「sudo userdel -r hogehoge」とすると,これらを含めて削除できます.

グループの管理

共同作業をするときに,グループを使うと便利です.

追加

例えば,グループ「project_A」は以下のようにして作成します.

$ sudo groupadd project_A

グループの情報は,ファイル「/etc/group」に書かれます.

管理

グループの管理には,コマンド「gpasswd」を使います.

$ sudo gpasswd  オプション  引数  グループ名

このコマンドでは,以下のオプションを使うことができます.

オプション(短) オプション(長) 引数 動作
-a --add ユーザー名 ユーザーをグループのメンバーに追加する.
-d --delete ユーザー名 ユーザーをグループのメンバーから削除する.
-r --remove-password グループのパスワードを削除する.引数は有りません.パスワードの設定には,コマンド「gpasswd グループ名」です.
-M --members ユーザー名1,… グループのメンバーを指定する.カンマ区切りで複数のユーザーの設定が可能.
-R --restrict newgrp を使った グループ ID の変更が不可能になります.すなわち,設定されたグループのメンバーのみこのグループ ID が利用可能になります.
-A --administrators 管理者1,… グループの管理者を設定する.カンマ区切りで複数の管理者の設定が可能.

グループのパスワードが設定されている状態で、 グループのメンバー以外のユーザーがコマンド「newgrp」でそのグループ ID になる場合,パスワードが求められます.正しいパスワードを入力すると,一時的にグループのメンバーになることができます.パスワードが設定されていない状態では,グループのメンバーのみ,そのグループの ID になることができます.要するに,グループパスワードが設定されていると,グループのメンバー以外もそのグループ ID が使えるようになります.これを防ぐためには,オプション「-R」あるいは「--restrict」を指定します.

削除

グループ「project_A」の削除は,次のようにします.

$ sudo groupdel project_A

グループによる共有

共同で作業を進める場合,ディレクトリーをグループで共有すると高率が上がります.ここでは,一般的なグループおよび共有するディレクトリーの作成方法を示します.

  1. グループ (例:group_X) を作ります.
    $ sudo groupadd group_X
  2. グループで共有するディレクトリー (例:project_X) を作成します.
    $ sudo mkdir /home/project_X
  3. 共有するディレクトリーのグループとパーミッションを変更します..
    $ sudo chgrp group_X  /home/project_X
    $ sudo chmod 770  /home/project_X
  4. 共有ディレクトリー下で,新規に作成したファイルやディレクトリのグループが自動的に共有グループになるように変更します.
    $ sudo chmod g+s /home/project_X
    あるいは,コマンド「sudo chmod 2770 /home/project_X」でもOKです./home/project_X のパーミッションが「drwxrws---」と,グループの実行許可が x から s に変わります(SGID).
  5. ユーザー(user01)をグループのメンバーに追加します.
    $ sudo gpasswd -a user01 /home/project_X
    メンバーの人数分,このコマンドを繰り返します.あるいは,最初の一回であれば,「gpasswd -M user01,user02,user03」とすることも可能です.

ページ作成情報

参考資料

  1. 私のサイトですが,Ubuntu server インストールサーバー管理を参考にしました.
  2. SystemdForUpstartUsers - Ubuntu Wiki
  3. ランレベルとターゲットの違いは,「いまだにsysvinitの手癖が抜けない人のためのsystemd - Qiita」が詳しいです.
  4. systemd については,「いまさらだけどsystemdに入門した」が分かりやすい.

更新履歴

2019年08月12日 ページの新規作成


no counter