kusanagi環境を求めて、さくらのクラウドからさくらのVPSへお引っ越しした話。その3: Linuxの基本設定(ユーザ追加とSSH設定、そしてIPv6の有効化)

さて、前回まででさくらのVPSの登録がおわり、kusanagi入りのCentOS Stream 8にログインすることが出来ました。そこまでの経緯は以下の通りです。

関連記事

前にも書きましたがこのブログをおいているサーバがもっさりとしていて、Webのレスポンスも非常に遅い感じだったので、ちょっといろいろと考えていたのですが、そもそもなんで「クラウド」サービスで動かしているんだっけと思い始めてしまいました。ひい[…]

関連記事

さて、前回、前置きとしてさくらのクラウドからさくらのVPSへの引っ越しをもくろんだというお話しをしました。実際に手続きを始めるに当たってさくらのVPSの契約手順について紹介します。基本的にはさくらインターネット社が提供している情報に沿って[…]

さて、ということでいよいよkusanagiの基本設定をというところではあるのですが、作業をしやすいようにLinuxの基本設定を先にやります。人によってはそのままrootで作業すれば良いという人もいるかもしれませんが、なんとなく気持ち悪いので。

なお、さくらのVPSの契約はこちらのリンクから可能です。

作業用ユーザを作る

まずは作業用のユーザアカウントを作ります。rootアカウントは特権アカウントでありいわゆる「なんでもできる」アカウントです。少しのオペレーションミス(おぺちょん)がOS自体を破壊してしまうこともありますので、普段は一般ユーザで作業をし、必要なときだけ特権アカウント権限で作業をしましょう。

このOSは自身で設定をしてインストールしたわけではなくて、さくらのVPS用に用意されていたものをそのまま入れただけなので、すこし状況確認をします。

ユーザを作る

まずは、/etc/passwdの中身を見てみます。

# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
systemd-resolve:x:193:193:systemd Resolver:/:/sbin/nologin
tss:x:59:59:Account used for TPM access:/dev/null:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
unbound:x:997:994:Unbound DNS resolver:/etc/unbound:/sbin/nologin
sssd:x:996:993:User for sssd:/:/sbin/nologin
pesign:x:995:992:Group for the pesign signing daemon:/var/run/pesign:/sbin/nologin
chrony:x:994:991::/var/lib/chrony:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
httpd:x:993:990::/home/httpd:/sbin/nologin
kusanagi:x:1000:1000::/home/kusanagi:/bin/bash
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
mysql:x:992:989:MySQL server:/var/lib/mysql:/sbin/nologin
#

ちなみにコマンドラインの#マークはrootアカウントであるよという表示ですね。層でなければ$が使われる事が多いです。kusanagiにログインした瞬間はさくらVPS的に割り当てられているホスト名が表示されています。

[root@ik1-XXX-XXXXX ~]# 

ik1は石狩リージョン1でしょうね。Xは数字がはいっています。~はホームディレクトリを示していて、作業しているのがrootユーザのホームディレクトリ(= /root/)であることがわかります。

Linuxは伝統的に1000番以降をユーザIDとして指定します。このイメージではkusanagiというユーザが用意されており、このルールに基づいて、1000番が割り当てられており、そして二つ目の1000はグループIDですが同じく1000が割り当てられています。

では、グループのリストも確認してみます。

# cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mem:x:8:
kmem:x:9:
wheel:x:10:
cdrom:x:11:
mail:x:12:postfix
man:x:15:
dialout:x:18:
floppy:x:19:
games:x:20:
tape:x:33:
video:x:39:
ftp:x:50:
lock:x:54:
audio:x:63:
users:x:100:
nobody:x:65534:
dbus:x:81:
utmp:x:22:
utempter:x:35:
input:x:999:
kvm:x:36:
render:x:998:
systemd-journal:x:190:
systemd-coredump:x:997:
systemd-resolve:x:193:
tss:x:59:
polkitd:x:996:
ssh_keys:x:995:
unbound:x:994:
sssd:x:993:
stapusr:x:156:
stapsys:x:157:
stapdev:x:158:
pesign:x:992:
chrony:x:991:
sshd:x:74:
www:x:990:kusanagi
kusanagi:x:1000:
postdrop:x:90:
postfix:x:89:
mysql:x:989:
#

こちらもkusanagiというエントリに1000番が割り当てられていることがわかります。それに一つ大事なことはwwwというエントリの最後にkusanagiという文字がみえますね。wwwグループが所有しているファイルにはkusanagiという「ユーザ」も操作が可能となっています。

ということで、作業用ユーザを実際に作りましょう。適当に名前を決めて下さい。ここでは便宜上workuserというグループとユーザを作ります。普段つかうユーザ名なので、覚えやすくて入力しやすいものを適当に決めましょう。作業は以下の通り。

# groupadd -g 2000 workuser
# useradd -u 2000 -g 2000 workuser
# passwd workuser

なんとなく2000番を使い明示的にグループも作りましたが、Linuxはuseraddだけすると同じIDでグループも作ってくれるはずです。で、IDって実は余り大きな意味は無いので指定しなくても大丈夫です。自動的に1000番以降が割り当てられ、存在する一番大きなID以降が自動的にわりあてられますが、1000にkusanagiが割り当てられているので、1001が自動的に割り当てられます。

# useradd workuser
# passwd workuser

要するにこれだけでも良いです。パスワードは適宜つけて下さい。ホームディレクトリの位置などをデフォルト(/home/以下)以外にしたい場合はその指定を忘れずに。

sudoを設定する

次にsudoコマンドを使えるようにします。ユーザ毎に権限を設定してもいいのですが、最近は権限を持つグループにユーザを追加しておいて、そのグループに対してsudoの許可を与えるというやりかたです。

いにしえのBSDからwheelというグループがあり、このグループに所属しているユーザが管理者であるという使われ方をしてきました。ということで、まずこのグループにworkuserをいれます。

まずは現在の状態を確認します。

# id workuser
uid=2000(workuser) gid=2000(workuser) groups=2000(workuser)

先ほど作ったworkuserの設定は入力したそのままの値になっていますね。wheelグループに追加します。

# usermod -G wheel workuser
# id workuser
uid=2000(workuser) gid=2000(workuser) groups=2000(workuser),10(wheel)

これで、wheelグループに追加されていることがわかりますね。次にsudoの設定をします。visudoコマンドを実行すると、sudoの設定ファイルが表示されるのでこれを編集します。

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL
## Same thing without a password
# %wheel        ALL=(ALL)       NOPASSWD: ALL

こう書いてあるところをみつけてください。viの使い方はいろいろなところにまとまっていると思いますので、調べていただければと…。

#で始まっている行がコメントで、設定ファイルとしては意味をなさないところです。2行目の%wheelではじまる行が有効になっています(#がついていない)。これでwheelグループに入っているユーザがすべてのコマンドを実行できるよう指定しています。

その2行したにはNOPASSWDという設定が付いていますが、その上の英語でのコメントにもあるとおり、sudo実行時にログインパスワードが聞かれなくなる設定です。逆に言うと今の設定のままだとsudo実行時にパスワードが聞かれます。とはいえ、一度入力すると一定時間は覚えておいてくれますので、まずはこの設定でいいと思います。

さて、これで、workuserというユーザを作ってsudoが出来るようになりました。先ほどつけたパスワードでもログインできますが、さくらのVPSの設定をしたときにrootのssh鍵を登録したように公開鍵を登録しておきましょう。

sshでログインできるようにする

# mkdir ~workuser/.ssh
# vi ~workuser/.ssh/authorized_keys
ここに公開鍵をコピー
# chown -R workuser:workuser ~workuser/.ssh
# chmod 700 ~workuser/.ssh
# chmod 600 ~workuser/.ssh/authorized_keys

公開鍵はauthorized_keysの一行に一つずつ保管することが出来ます。作業をするそれぞれのホストで鍵を作ってその公開鍵をコピーしておけばいいですね。秘密鍵を複数のホストにコピーして、authorized_keysに保管する公開鍵は一つだけというパターンもありますが…。

mkdirは、Windowsでいうフォルダの作成です。Unix系ではディレクトリというのでmake directoryの略です。.sshというディレクトリを作成しました。~workuserというのはこのユーザのホームディレクトリを示しています。今回のケースだと具体的には/home/workuserを示しています。workuserで作業をするときには~だけで同じ意味を持ちます。今はrootユーザで作業をしているので~だけ指定するとrootユーザのホームディレクトリが指定されます。

chownはディレクトリやフォルダの所有者を変えるコマンドです。change ownerですね。rootユーザでファイルなどを作成するとrootユーザのもちものになりますので、その権限をworkuserに渡したのです。一つ目のworkuserはユーザ名、二つ目のworkuserはグループ名。ユーザを作ったときと一緒ですね。

chmodはchange modeです。モードという考え方はUNIX独特のものですがだれがこのファイルやフォルダを変更出来るかといったあたりを指定しています。wordpressやwebサーバの設定などでもこの魔法のような数字が出てきますよね。Webを見ていると、よくわからないまま設定している人が多いきがします。707とかいうモード設定とか「なんでやねん」と思っていまいます。

簡単にだけ説明しておきます。基本は3桁で指定します。(4桁の場合もあります)。先ほどからユーザやグループという概念が出てきていますが、これに他人(other)を足した3種類の権限をこの3桁で示しています。それぞれの数字でユーザ(左の数字)、グループ(真ん中の数字)、他人(右の数字)がこのファイル群に対して何が出来るかをしめしています。最大が7、最小が0です。先ほどの707という数字にも出てきました。

ファイルおよびフォルダへの操作には何があるかというと以下の3種類です。

  • 読込: 4
  • 書込: 2
  • 実行: 1

この3種類。わかりやすいでしょうか。現実世界に照らし合わせると、机の上にバインダがあります。この中には文章が書いてありますが、読込権限があると中に何が書いてあるかを読み込めます。書込権限があるとそこにペンや消しゴムを使って中身を修正できます。そして実行権限は…、現実世界では何でしょう。それを指示書としてだれかに与えてここに書いてあることをやれ!といえるという感じでしょうか。コンピュータの世界ではプログラムとして実行できるという意味になります。

さて先ほどのリストの後ろに4、2、1の数字を書きました。この数字を使ってそのファイルやディレクトリへの「権限」を指定します。この権限のことを「パーミッション(permission)」といいます。

先ほど出てきた707という「パーミッション」は何を示すでしょう。実はこの「7」は先ほどの数字4と2と1の合計です。4+2+1=7ですね。

7が割り当てられた人は、4と2と1、すなわち読込と書込と実行が可能なパーミッションを与えられているのです。あとよく見るのは5です。この人は読込4と実行1の合計5の権限が与えられており、ファイルを読んだり実行したりは出来るけど変更が出来ない人です。一つだけ注意ですが、フォルダに1が割り当てられるとそのフォルダの中に移動することが可能となります。

さて、707が不思議だということを先ほど書きましたが、これは何を示しているでしょう。左の7はファイルを持っているユーザ自身が何でも出来ることを示しています。そして真ん中の0はそのユーザが所属しているグループに入っているお友達は何も出来ないことを示しています。そして一番右の7は、それ以外の全く関係ない他人が何でもできるのです。現実世界に例えると、自分はおうちに入っていろいろなものを見れるけど、同じグループに入っている家族はおうちに入れず、そして全く関係ない他人はおうちに入ってこれる…、そんな設定です。普通は一番左の数字が一番大きくなり右に行くほどに小さくなっていくはずなのです。707という設定を行う場合は単純に適切なグループ設定ができていないということになります。

さて、長くなってしまいましたが、SSHに関連するファイルやフォルダはその人であると言うことを証明するために非常に大事な情報です。これが奪われてしまうとなりすましがされてしまうので、.sshフォルダは700として、自分だけしか触れないようにし、authorized_keysも自分自身しか読めないようにしています。今はこのファイルしかないですが、ssh-keygenなどで秘密鍵を作るとこのフォルダの下に保管されるので、しっかり鍵をかけておきましょう。

さて、一度rootをログアウトするか別のターミナルでworkuserからログインしてみてログインが成功すればOKです。workuserでsudoが動くかなども確認しておきましょう。

$ sudo ls /root

これはrootユーザのホームディレクトリを除いているのですが、デフォルトの設定ではrootがownerでパーミッションが700に設定されています。rootユーザしかみれないのですが、これで中身がみれればsudoの設定が正しく行われていることになります。

$ sudo ls
あなたはシステム管理者から通常の講習を受けたはずです。
これは通常、以下の3点に要約されます:
    #1) 他人のプライバシーを尊重すること。
    #2) タイプする前に考えること。
    #3) 大いなる力には大いなる責任が伴うこと。
[sudo] workuser のパスワード:
workuser は sudoers ファイル内にありません。この事象は記録・報告されます。

こうなってしまったら正しく設定されていないので、設定を確認して下さい。sudoersファイルというのはsudoの設定ファイルです。普段は暗号化されているのでvisudoコマンドを使って編集したのでした。

そして、hostnameを変更しておきましょう。

hostnameを変更する

$ sudo hostnamectl set-hostname ylangylang.hiiragiya.net

自分のサーバの名前はさくらのVPSにつけていただいた先ほどのik1-XXX-XXXXXという名前に設定されているのでなじみがある名前に変更しましょう。さくらのVPS契約の時にylangylangという名前にしたので、これに変更しておきます(ただ、入力しにくくて後で変えましたけど(笑))。

これで何が起きるかというと、これまでコマンドプロンプト(コマンドを入力する場所)の表記を簡易化して#とか$のみとしてきましたが、このイメージにはしっかりとデフォルトのbashの設定ファイルが用意されており、コマンドプロンプトにホスト名が表記されるようになっていますので、今どこのホストで作業しているかがわかるようになります。例えばこんな感じ。

[workuser@ylangylang ~]$

自分はworkuserというアカウントで@以下、ylangylangというサーバで作業していることがすぐわかります。そして、~ですので現在作業中のディレクトリ(カレントディレクトリ)はホームディレクトリです。最後の$で特権ユーザではないということもわかりますね。これだけで作業のミスが大きく減りますので、是非設定しておいて下さい。

最後にIPv6の設定を行う

そうそう、さくらのクラウドからさくらのVPSにお引っ越しした理由の一つに無料でIPv6のアドレスがもらえることがありました。ということで設定を行います。これ自体はさくらのVPSのページに詳しく書いてあるので、簡単に。

作業は二つです。

  • LinuxカーネルでIPv6を有効化する
  • ネットワークの設定を入れる

一つ目をsysctlで設定し二つ目はipコマンドやrouteコマンドで実行するのですが、前述のさくらインターネット社のページには設定ファイルを編集して再起動していっぺんに適用!というやり方があります。

具体的には1つめについては/etc/sysctl.confを編集。2つめについては/etc/sysconfig/networkと/etc/sysconfig/network-scripts/ifcfg-ens3を編集します。

/etc/sysctl.confの中身です。IPv6に関する部分だけ

# Do not accept RA
net.ipv6.conf.default.accept_ra=0
net.ipv6.conf.all.accept_ra=0
net.ipv6.conf.ens3.accept_ra=0
# Do not use IPv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

最後の2行 disable_ipv6 = 1 となっている部分がIPv6を無効にするスイッチで1がONです。これを0に変更します。viで触ればよいですが、さくらインターネット社のページではsedを使ってコマンドラインで書き換える方法が記載されています。viとかエディタの使い方は意外と難しいですからね…。

次に/etc/sysconfig/networkの中身です。

NETWORKING=yes
#NETWORKING_IPV6=yes
#IPV6_DEFAULTDEV="ens3"
#IPV6_DEFAULTGW="fe80::1"

これもした3行のコメントアウトを外します。#を消すだけ。

/etc/sysconfig/network-scripts/ifcfg-ens3の中身です。ens3はネットワークインタフェイスコントローラ(NIC)の名前でさくらのVPSのCentOS Stream 8ではこのインターフェイスがグローバルインターネットに接続されています。この設定でIPv6の設定を有効化します。これも下の3行の#をけずるだけです。

DEVICE="ens3"
IPADDR="XXX"
NETMASK="XXX"
GATEWAY="XXX"
ONBOOT="yes"
TYPE="Ethernet"
DNS1="XXX"
DNS2="XXX"
#IPV6INIT="yes"
#IPV6_ROUTER="no"
#IPV6ADDR="XXX"

これで再起動をして以下のコマンドでアドレスが付いているかを確認します。

$ ip addr show ens3
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether XXX brd ff:ff:ff:ff:ff:ff
    inet XXX brd XXX scope global noprefixroute ens3
       valid_lft forever preferred_lft forever
    inet6 XXX scope global noprefixroute
       valid_lft forever preferred_lft forever
    inet6 fe80:XXX/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

inet6の行が二つありますが、ここでは一つ目のfe80ではない方で、先ほどの/etc/sysconfig/network-scripts/ifcfg-ens3のIPV6ADDRで設定されていたアドレスが付いていればOKです。

アドレスが付いていたらあとは経路です。

$ ip -6 route show
::1 dev lo proto kernel metric 256 pref medium
XXX::/64 dev ens3 proto kernel metric 100 pref medium
fe80::/64 dev ens3 proto kernel metric 100 pref medium
default via fe80::1 dev ens3 proto static metric 100 pref medium

最後の行のdefaultがvia fe80::1となっていれば大丈夫です。

IPv6といけばkame.netですが(興味のある方は調べて下さい)、ping6で疎通を確認してみましょう。

$ ping6 www.kame.net
PING www.kame.net(2001:2f0:0:8800:226:2dff:fe0b:4311 (2001:2f0:0:8800:226:2dff:fe0b:4311)) 56 data bytes
64 bytes from 2001:2f0:0:8800:226:2dff:fe0b:4311 (2001:2f0:0:8800:226:2dff:fe0b:4311): icmp_seq=1 ttl=55 time=16.8 ms
64 bytes from 2001:2f0:0:8800:226:2dff:fe0b:4311 (2001:2f0:0:8800:226:2dff:fe0b:4311): icmp_seq=2 ttl=55 time=16.8 ms
64 bytes from 2001:2f0:0:8800:226:2dff:fe0b:4311 (2001:2f0:0:8800:226:2dff:fe0b:4311): icmp_seq=3 ttl=55 time=16.8 ms
^C
--- www.kame.net ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 16.769/16.803/16.823/0.024 ms
$

ちゃんと、出力がされることを確認できたら(できなくても)コントロールキーとCを同時におして終了させます。このように画面に順番に行が表示され、そしてコントロールとCを同時に押したときに表示されるping statistics のpaket lossが0%であればOKです。

何も表示されず1秒以上かかるならコントロール+Cでping6を終了させて設定を確認して下さい。

ということで長くなりましたが事前準備はとりあえず終了…。長々と書きましたが設定自体は10分ほどあれば終わる気がします…。

さて次回はやっとkusanagiの設定へ…。

最新情報をチェックしよう!