宮島の弥山山頂付近から青い海 |
みなさん,こんにちは。
IoT実験のためにサーバをレンタルして,ある程度構築した後,再度,Ubuntuデスクトップ版イメージファイルのインストールを行ってしまい,全ての作業が初期化されてしまいました。
そのため,データ修復に時間をとられていました。
SSH接続環境の構築(Ubuntu版)
さて,前回,小規模事業者のためのサーバ構築について,VPSサーバを例に導入事例を申し上げましたが,今後は,もう少し具体的なサーバ構築ステップについて記述していきます。
具体的な構築ステップは,インターネットをググれば天才エンジニアの皆さんがいろいろと教えてくれるので,ポイント的なところだけ記述します。
それでは学習を始めます。
まず,第一ステップとして,クラウドサーバ(VPSの場合)を購入した後は,サービスプロバイダの指示に従って,OSをインストールすることになります。
Ubuntu linuxであれば「root権限」へのアクセスのため,パスワードの指定や「パスフレーズ」を指定した「公開鍵暗号方式」の秘密鍵を貰えるので,これを大切に保管します。
次に,サーバへログインするための手段を構築します。
最初は,「root権限」でログインしてもいいのですが,クラウドサーバは,外部インターネットに晒されますので,いつまでもroot権限でログインできるようにしておくのは,セキュリティ上問題があります。
特に,サーバroot権限へのパスワードによるログインはセキュリティ上危ないので,早い段階でパスワードログインできないようにします。
「公開鍵暗号」でのログインであれば,秘密鍵を持つのは自分だけですので,当面はこれを利用します。しかし,これも将来的にはログイン出来なくする方がいいかもしれません。
それでは,将来的にどうするかというと,ユーザIDを新たに登録して,それに特権(スーパーユーザ)を与えて,必要時に「root権限」に戻れるようにするという事です。
私はクラウドサーバへのログインソフトとしては,「TeraTerm」を利用することにしました。「TeraTerm」をインストール後,起動します。
TCP/IP プロトコル
〇ホスト(T)欄はXXX.XXX.XXX.XXX,TCPポート(P)は22,SSHで接続します。 |
サーバへ暗号接続するので「OK」を押します。XXX.XXX.XXX.XXXはIPアドレスでもドメイン名称でもOKです。
なお,ドメインはサーバとドメインを紐づけた後でないと入力できないのでご注意ください。
初めて接続する場合は、「セキュリティ警告」ウィンドウが表示されますが,「known hostsリストファイル」を追加する行為なので,「このホストをknown hostsリストに追加する」を選択して「続行ボタン」を押します。
次からは「セキュリティ警告」画面は出なくなります。
続いてSSH認証の画面が開くので,
|
サーバプロバイダによって多少やり方が異なるので,詳しくは,各サーバプロバイダの説明を見て頂ければと思います。
サーバ会社の一例として,「Xサーバ」のSSH設定資料をご覧ください。
サービスプロバイダによるサーバOS構築時に公開鍵暗号方式を採択せず,パスワードだけを選択した場合は,認証方式が「プレインパスワードを使う」になりますが,root権限ログインをパスワードにすると危険性が増しますので,なるべく公開鍵暗号方式をお勧めします。
第二ステップ(ユーザID登録)
SSH接続でサーバにroot権限でログイン出来たと思います。現在は,rootディレクトリ「#表示」の下にあると思いますので,今度はユーザIDを追加します。
コード
adduser ユーザ名
#はスーパーユーザ権限で動作していることを意味します。そこに「adduser」コマンドを入力することで,任意のユーザ名を追加することが出来ます。このコマンドアウトプットの途中で,パスワードの入力を要求されますので忘れずにメモしておきます。また,このコマンドによって「/home」下にユーザ名のホームディレクトリが作成されます。
参考に,「adduser」コマンドを打った時の展開例を以下に示します。
コード
# adduser user_name
Adding user `user_name' ...
Adding new group `user_name' (1001) ...
Adding new user `user_name' (1001) with group `user_name' ...
Creating home directory `/home/user_name' ...
Copying files from `/etc/skel' ...
Enter new UNIX password: # パスワード入力
Retype new UNIX password: # パスワード入力(確認)
passwd: password updated successfully
Changing the user information for user_name
Enter the new value, or press ENTER for the default
Full Name []: # Enter連打でよい
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] Y # Yes
# 終了
これでユーザIDが登録できましたが,このユーザIDに特権を与える必要があります。これは次のコマンドを打つことで「sudo」権限(sudo suと打てば#になれる)が付与されます。
コード
gpasswd -a ユーザ名 sudo
以下に展開例を示します。
コード
# gpasswd -a user_name sudo
Adding user user_name to group sudo
#
(注)CentOSなどRedHat系のLinuxでは別のコマンドで、sudoersというファイルを編集します。/etc/sudoersファイルの中に,追加されたユーザの利用できるコマンド権限が指定されています。
【例】ユーザ ALL=(ALL) ALL など
# userdel -r user_name user_nameを削除します。-r (--remove)でユーザディレクトリも消します。 |
$ cat /etc/passwd
Ubuntuで作成済みのユーザ一覧を確認するコマンドです。 $ getent passwd でも同じです。
|
$ cat /etc/group Ubuntuで作成済みのグループ一覧を確認するコマンドです。 $ getent group でも同じです |
$ groups user_name user_nameのグループ一覧を確認するコマンドです。 user_nameを省略しても同じです |
# gpasswd -a user_name group_name Ubuntuでuser_nameというユーザをgroup_nameというグループに追加します。 # usermod -aG group_name user_name でも同じです |
このコマンドには,いろんなオプション引数がある。 # gpasswd -h Options: -a, --add USER add USER to GROUP -d, --delete USER remove USER from GROUP -h, --help display this help message and exit -Q, --root CHROOT_DIR directory to chroot into -r, --remove-password remove the GROUP's password -R, --restrict restrict access to GROUP to its members -M, --members USER,... set the list of members of GROUP -A, --administrators ADMIN,... |
$ who //自分情報の確認 $ whoami //自分のユーザ名の確認 |
以上によりユーザIDでログインし「sudo」コマンドで特権を得られるようになりました。
次に,TeraTermからユーザIDでログインするように再度トライします。
第三ステップ(Rootパスワードログインの停止)
続いて,/etc/ssh/sshd_configの中のRootログインでパスワード利用を禁止します。公開鍵暗号によるRootログインを除き,ユーザIDしかログインできなくなります。
下記の項目が以下のようになっているかを確認します。修正する場合は,
なお,「PermitRootLogin no」を行うと「root」にログインできなくなりますので,ユーザIDから確実にログイン出来ることと,「sudo」コマンドで特権を得ることが出来ることを確認してからでないと行ってはいけません。ご注意ください。
「#表示」で,最後に以下のコマンドを入力すれば定義が有効になります。
コード
systemctl restart sshd.service
最終的には全て公開鍵暗号でユーザログイン出来るようにした方が安全性が高いと思います。そこで,参考にユーザIDのログインで公開鍵暗号を使う方法を考えます。
まず,TeraTermでユーザIDにパスワードログインします。その場合のホームディレクトリは「/home/ユーザID」で「$表示」になりますので,そのディレクトリ上で以下のコマンドを入力し,公開鍵の格納フォルダを作ります。(既にある場合は省略)
コード
mkdir .ssh
続いてファイル権限を調整します。
コード
sudo chmod 0700 .ssh
次に,ユーザIDの公開鍵暗号を作成します。
コード
ssh-keygen -t rsa
これにより,ホームディレクトリ下の「.ssh」フォルダ内に,秘密鍵「id_rsa」と公開鍵「id_rasa.pub」というファイルが作られます。
次に公開鍵「id_rasa.pub」を「authorized_keys」というファイル名に変更します。
コード
mv id_rsa.pub authorized_keys
秘密鍵「id_rsa」は,TeraTermのSCP機能でパソコン側に移動して保管し,サーバ側の秘密鍵は削除します。これで,TeraTermで公開鍵によるユーザログインが可能になります。
「authorized_keys」ファイルの権限は,次のコマンドで調整してください。
コード
chmod 0644 authorized_keys
以上で,ユーザIDへのログインに公開鍵暗号が使えるようになったと思いますので,TeraTermを再起動して確認します。
【TeraTerm4バージョンの注意点】
最近のLinux OSバージョンでは,SSHのRSA暗号化においてRSA-SHA2暗号アルゴリズムを使う場合が増えています。TeraTerm4バージョンは,RSA-SHA暗号アルゴリズムしか使えませんので,公開鍵暗号では認証出来ない場合があります。
その場合はTeraTerm5バージョンを利用するか,暗号化方式をRSA暗号からECDSAなどの暗号方式に変えてください。以下にECDSA-512を利用した場合の暗号鍵の生成コマンドを示します。
コード
ssh-keygen -t ecdsa -b 512
第四ステップ(Rootパスワードログインの停止確認)
最後に,ログインできる状態を確認します。現状は,root権限でのログインは,公開鍵がないと出来ません。また,ユーザIDへのログインは,公開鍵,パスワード共にできる状態です。
但し,これらを設定するとユーザIDの公開鍵によるログイン以外は,受け付けなくなりますので秘密鍵の管理にご注意ください。
最後に,root権限でのパスワードが有る場合,サーバ(IPアドレス:XXX.YYY.ZZZ.AAA)に対しSSHを使ってパスワードでrootログインができないことを確認します。ユーザIDにログインした状態「$表示」で以下のコマンドを入力してください。
コード
ssh root@XXX.YYY.ZZZ.AAA
パスワードの入力を要求されますが,「Permission denied, please try again.」や「Permission denied (publickey).」というアラートが表示されたらOKです。
まとめ
以上で,SSH接続環境の構築ができました。これだけでもこんなに手間がかかります。
次は,「UbuntuにおけるUFW「Uncomplicated FireWal」の設定」ですが,長くなりますので次に回します。
(注意)なお,情報の正確性を期していますが,実施される場合には自己責任でお願いします。
0 件のコメント:
コメントを投稿