こんにちは。くまごろーです。
今JavaアプリをWeb上にデプロイしたくて、さくらのVPSをレンタルして色々やってるのですが、中々うまくきません。
ApacheとTomcatのajp連携がうまくいかなくて、ついにteratailへの質問デビューも果たしてしまいました(-_-)
ここ10日間くらいで集中的にlinuxについて勉強してきたのですが、結局そもそもの問題(VPSでApacheとTomcatを連携させる)は解決できてないにしても、初めてLinuxを触った時と比べると、「何をしているのか」がわかってきました。
ここでは、CentOSにJDK,Apache,Tomcatを導入する前の段階、CentOSの初期設定についてまとめることにします。
■ 環境
・さくらのVPS
・OS:CentOS Linux release 7.8.2003
■ 手順(CentOSをインストールしてから)
1 rootユーザーでログインする
CentOSインストール直後は、rootユーザー以外にユーザーがいない状態なので、とりあえずrootユーザーでログインします。
2 OSをアップデートする
#yum update
初期状態ではインストールされていないパッケージもあるので、最初にこのコマンドでアップデートをやってしまう。
3 ログインユーザーを変更してセキュリティを強化する
サーバーは初期状態だと、rootユーザーしかいないが、rootユーザーは権限が非常に強い。rootユーザーのパスワード等を他人に知られてしまうと、サーバーを乗っ取られてしまう恐れがある。そのため、他にユーザーを作成し、rootユーザーではログインできないようにする。
●一般ユーザーを作成する
#adduser 任意のユーザー名
●さっき作ったユーザーのパスワードを設定する
# passwd 先ほど打ち込んだユーザー名
※ パスワードは2回入力を求められる
● 一般ユーザーでログインできるか確かめるために、rootからログアウトする
# exit
●先ほど作成したユーザー名でログインできればOK
● sshサーバーの設定を変更して、権限の強いrootでアクセスできないようにする
#cd /etc/ssh //cd:カレントディレクトリの遷移 #cp sshd_config sshd config_copy //cp:ファイルバックアップ #vim sshd_config //vim:ファイル編集
※ 上記のコマンドを実行すると、ファイル編集画面に遷移する。遷移直後はファイルへの入力を受け付けない状態。(コマンド入力モード)
入力を受け付けるモードに切り替えるには、[a]または[i]を入力する。反対に、コマンド入力に戻るには[esc]キーを押下する。
ファイルを保存して終了するには、コマンド入力モード中に「:wq」を、保存しないで終了する場合は「:q」を入力。
● 上記ファイルを編集する。
38行目あたりにある以下の部分を変更して、rootユーザーのログインを禁止する。
#PermitRootLogin yes → PermitRootLogin no
● sshサーバーを再起動する。
設定変更が終了したら、以下のコマンドを実行してサーバーを再起動する。
# systemctl restart sshd.service
● rootユーザーでログインしてみて、ログインできないことを確認
「Access denied」と表示されるはず。
4 ssh接続を鍵認証で行う
ssh接続はデフォルトだと、パスワード認証されるよう設定されている。この状態だと、「パスワードを知っていて」「サーバーにアクセスできる」と、だれでもサーバーにアクセスできてしまう。それを防ぐために、鍵認証でssh接続できるよう設定変更する。
● 鍵を保存するためのフォルダを用意
$ mkdir ~/.ssh //mkdir:ディレクトリ作成(鍵を保管するフォルダを作る) $ cd ~/.ssh //.sshフォルダに遷移する
● 公開鍵と秘密鍵を生成する
$ ssh-keygen -t rsa //id_rsaという秘密鍵と、id_rsa.pubという公開鍵が生成される
● SSHサーバに公開鍵を登録する
$ scp -P 22 ~/.ssh/id_rsa.pub ユーザー名@IPアドレス:~/.ssh/authorized_keys
※ サーバー側の.ssh/authorized_keysに、公開鍵id_rsa.pubを渡す。
● パーミッションを変更する。
$ chmod 700 ~/.ssh //クライアント側 $ chmod 600 ~/.ssh/authorized_keys //サーバー側
※ 700とか600とかは、ユーザー毎のアクセス権を数値で表したものです。このサイトを参考にしました。
アクセス権(パーミッション)の記号表記と数値表記
● 接続を確認する。
$ ssh <ユーザー名>@<IPアドレス>
※ 鍵のパスフレーズを求められればOK
5 ポート番号を変更する。
SSHサーバーは初期設定だと22番ポートを利用している。このポート番号は広く知られているので、侵入のリスクが高まる。
● 一般ユーザーでログインする
● su コマンドでrootユーザーに変更する。
※ 「su」コマンドを入力し、rootユーザーのパスワードを入力すると、一時的にrootユーザーとして操作できる。
● SSH設定ファイルを編集して、Port番号を変更する
# vim /etc/ssh/sshd_config //sshd_configファイルを編集
「#Port 22」 → 「Port 任意の番号」に変更する。
● 構文チェックを行い、問題なければssh設定を反映させる。
#sshd -t //構文チェック # service sshd restart //リスタート
● 新たに設定したポートでログインしてみる
$ ssh -p ポート番号 ユーザー名@IPアドレス
まとめてみるとなかなか長いですね(-"-)
これでもまだだめなところあるんだろうなあ・・・
手を出してみてすごいわかりましたが、サーバーって本当難しいですね。
言語の勉強やってる時の方がまだ気楽だなと感じました。
Javaだったらコンパイルエラー吐いている行を見つけて、検索するなりすれば大体解決できますが、Linuxいじっているときは本当に気を使います。
一度うまくいかなくなりだしたら、迷路に迷い込んだ人みたいになってしまう。
触っているうちに慣れてくるのかなあ