Linux構築メモ その2

次にWindowsからputtyで接続する環境を整える

 

まずは、仮想環境のIPアドレスを調べる
VirtualBoxに表示されるログイン画面からログインをする
今回はIPを調べるだけなので一般アカウントで十分

ログイン後「ip address」(ip addr/ip aも同じ)と入力すると自分のIPを知ることができる

ここでは、192.168.11.12というアドレスが割り当てられていることがわかる。
これをputty側で設定する。
なお、これはDHCPでランダムに割り当てられた数字なので、ルーター設定で固定をしないとほぼ毎回違うアドレスになって、その都度IPアドレス調べたりputty設定し直したり大変になる。固定の仕方はルーターのマニュアルを読んで。

 


受け入れるを選択

今後はWindows上のputtyのこの画面で設定を行っていく。

 

さて、Linux上での設定作業は、基本的にはrootは使わずに一般ユーザーがsudoを使って行うのがセオリーなんだけど、私はものぐさなのでrootで作業します。
ここではちゃんとsudoを使って作業したい人向けトピックス

 

デフォルトではsudoが入ってないので自分でインストールする必要がある。
まずは

# su -

でrootに切り替える。VirtualBoxの画面だと直接rootでログインできるが、puttyでの操作は直接rootでパスワード認証によるログインできない設定になっているのでsu -でrootに切り替える。
あとはsudoインストール

# apt install sudo

インストールできたら、sudoが使いたいユーザーをsudoグループに追加する

# usermod -aG sudo ユーザー名

あとは、いったんログアウトしてログインし直すとsudoが使えるようになってる。

以下はrootでの作業を前提に記述
一般ユーザーで作業する場合は、「sudo コマンド」に読み替える

 

では、puttyを使えるようになったので、まずは何を置いてもアップデートを行う

# apt update
# apt upgrade

apt updateはパッケージリストの更新。
apt upgradeは実際にマシンに入ってるインストール済みのソフトをリストを元に最新バージョンに更新する
つまりupdateでリスト更新せずupgradeだけ実行しても、いつまでも古いリストに基づくので新しいアプリのバージョンはこない。

 

一般ユーザーを作る

インストール画面で一般ユーザーを作り損ねた人、追加で作りたい人向けメモ
root権限が必要

# adduser ユーザー名

あとは対話に従って本名とか住所とかパスワードとかいれて行けば完成。
一応、別のやり方を書くと

# useradd -s /bin/bash -m ユーザー名
# passwd ユーザー名

こっちは複雑だけど、オプションで細々とした設定ができるので好きな方で。

 

終了と再起動

終了

# poweroff
# systemctl poweroffも同じ
# shutdown -h nowも同じ

再起動

# reboot
# shutdown -r nowも同じ

 

Vimをいれる

CUI上で作業するので、テキストエディタが必要。
ここではVimを入れる

# apt install vim

Vimの設定は検索サイトで調べてほしいが、rootだけとかログインした一般ユーザーだけとかに適用するには、自分のホームフォルダ.vimrcを作って記述、環境全体(全ユーザー)に及ぼすには/etc/vim/vimrc.localに記述が必要
個人的にやってる変更は以下

# vim /etc/vim/vimrc.local

set number "行番号表示
colorscheme darkblue "色変更
set encoding=utf-8 "文字化け対策

全体の設定で変更しても、個々人のホームに.vimrcを作れば上書きして環境を構築できる
色は個人の好みがあるので、自分にあったやつを選ぶかオリジナル配色の設定をつくるか。
darkblueもちょっと見づらいけど、配色作るのも面倒くさいので放置

 

OpenSSH設定その1

今回はセキィリティ向上のため、SSHで接続するポート番号の変更とrootでの直接ログイン禁止を設定する

ポート番号を1024以上の好きな番号に設定する
それより小さい番号は、システムが割り当ててる可能性が高い

# vim /etc/ssh/sshd_config

14行目あたりに

#Port 22

とあるのでコメント部分を削除して

Port 好きなポート番号

とする。

それと33行目あたりに

#PermitRootLogin prohibit-password

とあるので、コメントを取ってnoにする

PermitRootLogin no

この設定はputtyなど外部からアクセスするときにパスワードでのrootログイン禁止を設定していた(最初にputtyからはrootログインできないといってた話)
prohibit-passwodはパスワードだけではログインできないけど、公開鍵認証などでは直接rootログインできる仕様。
今回ここをnoに変更することで、一切のrootログイン禁止にしてセキュリティを高める
もちろん、一般ユーザーでログイン後su -でrootになれるので作業は困らない。

設定が終わったら保存して閉じて、設定を適用する

# systemctl reload ssh

ここで、いまの作業画面を閉じずに、新しく画面を開いてログインする。
なぜなら、ポート番号を間違って設定した場合、ログインできなくなるので確認が必要。(たとえばポート2700と思って設定したのに実際は入力ミスで2800だったり)

 

自分向けのマニアックな解説

rootログインを許す許さないという話は、サーバーサイドの話なのでSSHデーモンの設定ファイルsshd_configを書き換える。

じゃあなんでreload sshdじゃなくてreload sshになってるかというと、/etc/systemd/system/の中のsshd.serviceは/lib/systemed/system/ssh.serviceに読み替えなさいというエイリアス設定がしてあるため。

つまり実際はreload sshとして呼ばれている。

じゃあSSHデーモンのリロード処理はどうなってるかというと、上記の/lib/systemed/system/ssh.serviceの中の記述に
ExecReload=/usr/sbin/sshd -t
としてsshdをリロードしてるので問題ない。

 

次に、systemctl restartとreloadの違いはなにか?
reloadは変更した設定ファイルを読み込んで、新しいセッション(次に立ち上げたターミナル)から適用する。
万が一構文が間違っていた場合、設定ファイルを適用せずにエラー文を出す。つまりいま起動してるやつはそのまま。

restartはいったんプロセスを終了させて、変更した設定ファイルを読み込む。ここで万が一構文が間違ってると起動しない。

 

じゃあなんでもreloadがいいのかと思うが、たぶんserviceファイルにExecReloadの項目がないと、reloadできないってエラーになるんじゃないかな。

 

今回のSSHの場合、仮にsystemctl restart sshにしても、設定失敗してsshが起動しないだけでセッションは維持されるので、設定ファイル修正してssh起動しなおせばいい。

 

結論:reload使えるならそっち使った方が良い。なかったらrestart使え。

 

ファイアウォール設定

ポートの変更が終わったら、次は必要なポート以外は全部閉じることによって外部からのアクセスを可能な限りブロックすることにする

まずはファイアウォールufwをインストールする

# apt install ufw

次に全体を接続不可にしたあと、puttyで作業するポートだけ開放する

# ufw default deny
# ufw allow 自分の設定したSSHポート/tcp

最後に起動。

# ufw enable

ここで、画面を閉じずに新しくputtyのターミナルを起動して接続できることを確認する。
設定ポート間違えるとターミナルからログインできなくなる
(いまは間違ってもVirtualBox上からログインできるのでそこまで困らないが、VPSなど外部サービスを借りた場合ウェブ上からのコンソールがあるとは限らないので、確認する癖をつける)

# ufw status

とするといま設定している内容が表示される

 

To                         Action      From
--                         ------      ----
3844/tcp                   ALLOW       Anywhere
3844/tcp (v6) ALLOW Anywhere (v6)

(v6)はIPv6のこと

今回はIPv6を使用しないので、IPv6の設定をオフにする

# vim /etc/default/ufw

の中のIPV6=yesをnoに変更して反映

# ufw reload

これでstatusをみるとv6の行が消えている。

実験したところ、IPv6をオフにするとIPv6向けの設定は消えるので、オンにしたあとに改めてallow設定などを行う必要がある

# ufw reset

で初期化はできる。

 

OpenSSH設定その2

毎回ログイン時にパスワード入力が面倒くさ…じゃなくてセキュリティ向上のため、公開鍵認証に切り替える

これは一般ユーザーでのログインが前提なので、作業は一般ユーザーで行います。

 

まずは公開鍵と秘密鍵putty上で生成。
鍵の種類は、ed25519

ちょっと前まではrsa方式がスタンダードだったんだけど、いま推奨されてないらしい。

パスワードを設定するが、パスワード入力が面倒くさいという理由なので、今回は空白。

puttygenで作った公開鍵はOpenSSH用に変換する作業が入る(コマンド1行だけど)

 

公開鍵(debiankey.pub)と秘密鍵(debiankey.ppk)をそれぞれ保存する。

putty側でキーの設定を忘れずに。

 

次に、Linux上の一般ユーザーから公開鍵にするための環境を整える

ホームディレクトリに.sshフォルダ作成、公開鍵保存のためのauthorized_keys作成

# mkdir .ssh
# chmod 700 .ssh
# touch .ssh/authorized_keys
# chmod 600 .ssh/authorized_keys

準備ができたら、FileZillaなんかで公開鍵を.sshフォルダに転送。

転送ができたらOpenSSH用に変換して追加

# ssh-keygen -i -f .ssh/debiankey.pub >> .ssh/authorized_keys

 

なんだったら、FileZillaなんかで転送せずに上のOpneSSHのペーストキーをputty経由で貼り付けてもいける。

# vim .ssh/authorized_keys

puttyのバー上で右クリック→貼り付け

 

鍵によるログインが可能になったので、OpneSSHの設定を変更して、パスワードログインを禁止する(ここはroot権限必要)。

# vim /etc/ssh/sshd_config

PasswordAuthenticationをアンコメントしてnoに変更。
OpneSSH再起動

# systemctl reload ssh

 

ここまでやれば、最初の環境構築としては十分なのでは。

おしまい。