プラチナプラスチック

雑記のようなもの

サーバの運営の初めにすること

ホームページ然り、
サーバを借りて何かをするときのスタートアップ手順とか
SSHクライアントの設定を詳細に書く

サーバを借りる

VPSサーバを前提
Linux推奨

借りたサーバに繋げる

$ ssh root@***.***.***.***

PassWordはサーバを借りるときに設定したもの
"***.***.***.***"がサーバIPアドレス(ip_v4)

Winから繋げる場合はGitBashをつかう
Tera termでもいいかもしれない

Userを作成する

rootユーザ以外のユーザを作成する

$ useradd -m *USERNAME*

オプション -m をつけないとホームディレクトリが作成されない

パスワードを付ける

ユーザにパスワードを設定する

$passwd *USERNAME*

設定内容の確認、変更

$ cd /etc
$ cat passwd

このファイルに設定の記載がある
フォーマットに関してはここから
確認するのは、ホームディレクトリと起動シェル

*USERNAME*:  ....  :*HOMEDIR_PATH*:/bin/bash

最後の起動シェルをbashに変更(既定はshだった)
また、ホームディレクトリを任意に設定

作成ユーザからSSHログインする

exitで退出し、ログインできるか確認する

$ssh *USERNAME*@***.***.***.***

ログインできればOK

sudoの設定

sudo ができないので、それを設定する
rootユーザに切り替えて、

$ su
$ usermod -aG sudo *USERNAME*

作成したユーザーでsudoコマンドが使えるようになる

firewalldのインストール

初期状態ではむき出しのままなので、
firewalldをインストールする

$sudo apt install firewalld
  • 生きてるか確認
$systemctl status firewalld
  • 設定の確認
$firewall-cmd --list-all

初期値ではSSHがパブリックに設定されている

firewallの設定

$cd /usr/lib/firewalld/services
$ls

このパスにfirewalldに関する設定のファイルが入っている
ファイル名がそのままサービス名となり、
サービス名をfirewalldに設定し、その設定はこのファイルから引用される

ssh.xmlというファイルもあり、その内容は、

~
<port protocol="tcp" port="22"/>
~

となっている
tcpでポート22を空けますよ、ということになる
firewalldをインストールしたあと、
再度ログインしてみるとわかる

$ssh *USERNAME*@***.***.***.*** -p 22

ポート指定でログインして、22以外でログインできなければ正常に作動している

ルートでログインできなくする

$nano /etc/ssh/sshd_config

真ん中あたりでPermitRootLoginという項目がある
#(コメントアウト)をはずして

PermitRootLogin no

"no"にすることで、rootログインを禁止する
これで、rootをとる手順が、
登録ユーザでログイン→suで切り替え or sudoコマンドで権限昇格
となり、めんどくささが増す

SSHログインポートの変更

ログインのポート番号を既定の22から変更することで、
攻撃者に探す手間をつくる

$nano /etc/ssh/sshd_config

でPort欄に任意の番号を追加する
複数設定することも可能で、
これが記述ない場合は、Port 22で初期値が設定される
(初期はコメントアウト状態→既定)

  • 複数設定する
Port ****
Port ****
  • リッスンポートの確認
$systemctl sshd restart
$netstat -tlp

新規のポートのために、先のssh.xmlをコピーする
先のディレクトリに移動し、

$cp ssh.xml new_ssh.xml

で、内容のポートの欄と、サービス名を変更する

続いて、firewalld側に反映
Documentation - Manual Pages - firewall-cmd | firewalld

$firewall-cmd --add-service=new_ssh
$firewall-cmd --reload
$firewall-cmd --list-all

OKならサクセスと表示されるので、
リロードして、
.--list-allで追加されたかを確認

ここまで来たら、ログインを確かめる
.-p PORTNUMBER でいろいろな番号からアクセスしてみて
設定値でログイン出来たらOK

そしたら、22番(いらない番号)を消す

$firewall-cmd --remove-service=ssh --zone=public

publicにあるかは、あらかじめ--list-allで確認すること
消したらリロード

RSA4096認証

公開鍵認証方式のこと

ローカル側で、

$ssh-keygen -t rsa -b 4096

をして、パスフレーズを任意で入力(なしも可能)
保存するファイルパスを入力して作成完了

id_rsa.pubが公開鍵で、これをサーバに送る
保存場所はホームディレクトリの".ssh/authorized_keys"
内容をコピーして貼り付け

authorized_keysで保存した場合は、sshd_configの設定変更は
"PasswordAuthentication no"のみ
これは、パスワードによるログインを許可しないという設定
これをする前に、一度公開鍵認証でログインできるか確認することを推奨

ログアウトし、

$ssh *USERNAME*@***.***.***.*** -p *PORTNUM* -i rsa_id

秘密鍵をオプション-iの引数にしてSSHログインを開始
パスフレーズを入力してログインする
その後は-iオプションは必要ない

確認ができたら、先の"PasswordAuthentication no"をして、
パスワードでログインできないことを確認して終了

切断後のアプリケーション存続

SSHを切断したときに必要なプロセスが自動でキルされる
不要と判断されないように実行する必要がある
applingo.tokyo

$ nohup python hoge.py &

おわり

サーバ運用してみてわかったのは、
結局Wordpressとか使ったほうが楽だなってこと

ここまで設定できるのなら自前でサーバスクリプト用意するよりも
そういったオープンソースソフトウェア使うのが利口だわ
もちろん、どう動いてるのかをちゃんと理解した上で使うべきだけど