1月7日 今日の学習記録

<目標>

  • "sudoをインストールする
  • "sshのの基本を理解する"
  • "標準入出力・リダイレクション・パイプを理解する"
  • タイムキープをすること
  • 日常作業も並行してこなすこと
  • 14ポモドーロ
  • 学びを意識する、怖がらない

どこまでいけるかわからないけれどいってみよう!


<結果/感想>

  • コマンドは通ると嬉しい
  • ホストとゲストが繋がった時は感動した。
  • ギリギリでできた感じ、ヒヤヒヤです。


<課題>

  • パスワード認証ログインを禁止にする。
$ vi /etc/ssh/sshd_config
...(省略)
PasswordAuthentication no
...(省略)
ChallengeResponseAuthentication no
...(省略)
  • rootでのログインを禁止にする。
etc/sysconfig/sshd
OPTIONS=”-o PermitRootLogin=no”

22番ポートでログインできないようにする。 - 8888に変更 <ソース>


<メモ>

aptitude install sudoができない、、、

  • エラーを見てもわからないけれどetc/apt/sources.listの16行目に問題があるとか。。。 前回のプラクティスでいじったせいか、#の消えている行があった。 そこに#を入れたら無事インストールできた。焦った。
  • "教訓:ファイルをいじる前にはバックアップを取っておこう"


sudoers関連 - /etc/sudoersファイルを編集して、権限の設定を行います。

/etc/sudoers
# hogeはroot権限を全て利用できる
hoge  ALL=(ALL:ALL) ALL

<ソース>  Linuxの教科書に書いてあった気がする。。。


# visudo ソース - visudoはsudo権限を変更するためのコマンドだ。sudoersファイルを安全に編集するコマンドになる。

  • /ect/sudoers.tmpがnanoで開いた。
  • 追加したばかりでsudo権限を持っていないユーザに権限を付与できる。

「ホストtty7からアクセスしたユーザーsnowは、vagrantとして/usr/sbin/useraddコマンドをsudoで実行できる」という場合は次の設定になる。

snow tty7=(vagrant) /usr/sbin/useradd
  • 編集結果にエラーがあるとメッセージが出て助かる。

  • sudoerfileにユーザを入れないと sudoが使えない。。。 とりあえず、ユーザーを追加してみる。 -> sudo 使えた!

adduser グループに追加 - - adduser testuser group - %sudo ALL=(ALL:ALL) ALLというラインがvisudoで表示される。 sudoグループにsudo権限が設定されている。


nanoの右下に書いてあるundo/redoのコマンドM-E``M-U - Mはメタの意味だった、osxではoptionキー


<中ボス shhに再挑戦>

ssh 【Secure SHell】 セキュアシェル <ソース>

  • sshとは、主にUNIXコンピュータで利用される、ネットワークを介して別のコンピュータにログインして操作するためのソフトウェアの一つ。通信経路が暗号化されるため、インターネットなどを経由しても安全にアクセスすることができる。
  • シェルの一種、暗号化しなが遠隔操作が可能になる。

sshd (ssh daemon) - UNIX系OSなどで、外部からのsshによる接続を受け付ける常駐プログラムのことを慣習的にsshd(ssh daemon/sshデーモン)という。 - ゲストOS側のSSH - sshクライアントからの接続要求を受け付け、通信経路の暗号化や利用者の認証、操作コマンドの受信と実行などを行なう。sshサーバソフトには様々な種類があるが、ほとんどのソフトでは共通してsshdという実行ファイル名となっている。

scp (secure copy/secure copy protocol) - sshは手元のコンピュータから遠隔地のコンピュータへの通信を暗号化し、認証情報やコマンドの発行、応答などの通信内容を安全にやりとりできる。scpはssh上でのファイルコピー機能で、接続先のコンピュータとの間で安全にファイルの送受信が行える。 - FTPに相当するSFTPというものもあるらしい。

インストール

  • sshをインストールするとクライアントとサーバー両方の設定ファイルが入っているようだ。

  • 接続できる端末を限定するには、/etc/hosts.allowsshd : 192.168.1.のように設定する

telnetとshh - telnetはクライアントとサーバ間が暗号化されていない

ポートフォワーディング - sshの安全な通信路を他のプログラムにも使わせる

MACOS用のsshクライアントは? - teraterm / PuTTY? と思ったら入っていた。 - ssh サーバ名 -l アカウント名 でログイン. - logoutでsshからログアウト - $ ssh [ユーザー名]@[サーバーアドレス] -p [ポート番号]でログイン.

サーバーアドレス: xxxx.xxxx.xxxx
SSHポート番号: 222
ユーザー名: root
パスワード: yyyyyyyy

#のコマンドは $ ssh root@xxxx.xxxx.xxxx -p 222

sshの構造 - ここではsshのバージョン2.0について説明しましょう。sshのプロトコルは図3に示すように3つの層からできています。下からトランスポート層プロトコル、ユーザー認証プロトコル、コネクションプロトコルという名前が付いています。 -  一番下にあるトランスポート層プロトコルは、(1)接続相手がニセモノではない本当のサーバであること、(2)データの暗号化、(3)データの一貫性の確保、さらにオプションで(4)データの圧縮をします。一言でいえば、正しいコンピュータとの間に、安全な通信路を用意する働きをしている、 - その上にある「ユーザー認証プロトコル」は、トランスポート層プロトコルの働きで作られた安全な通信路を使って、サーバにアクセスすることが許されているかどうかをチェックするための仕組みです。このチェックには、IDとパスワードを使う一番簡単な方法のほかに、より安全な方法(鍵情報が入ったファイルを持つ人だけアクセスできるなど)も用意されています。

クライアントでキーペアを作成.

  • $ ssh-keygen -f client_rsa -t rsa -b 2048
  • -f 名前指定
  • -t 鍵の種類
  • -b 暗号化強度、鍵の種類によって異なる異なる

  • .pubが付いているのが公開鍵/付いていないのが秘密鍵鍵


結局$ ssh-keygen -t rsaで作成 <ソース>

キーチェーンに登録 - $ ssh-add -K ~/.ssh/client_rsa ←鍵の登録

鍵をサーバーに登録(ssh-copy-idコマンドを使った方法).

鍵を作成.

taku-no-MacBook-Pro:.ssh takunaka$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/takunaka/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /Users/takunaka/.ssh/id_rsa.
Your public key has been saved in /Users/takunaka/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:jAM3P31TvXpUCQTp7mJyHVY/Ul1PDmEskzD/t7nsPnI takunaka@taku-no-MacBook-Pro.local
The key's randomart image is:
+---[RSA 2048]----+
|          oo+=o. |
|           ++.+.+|
|    . o   . .o.=*|
|     o = . . + .*|
|      o S o + +o.|
|       . . = oo+o|
|          + ...+.|
|       . + o .oE.|
|        + .   ==.|
+----[SHA256]-----+

とりあえず、passphraseは空で、、、 id_rsa id_rsa.pub鍵ができた。

クライアントにキーペアを登録.

  • 作成した鍵はsshコマンド実行時に-iオプションを使って認証時に使うことができますが、ssh-addコマンドを使って鍵を登録しておくと-iオプションを省略できます。用途ごとにキーペアを使い分けている場合、このように設定しておくと便利です
  • (Macの場合 ) なお、Macクライアントの場合はSSH Agentの起動は必要ありません。 ssh-addコマンドに-Kオプションを実行することでキーチェーンに登録できます)。 $ ssh-add -K ~/.ssh/client_rsa ←鍵の登録

  • でも使い分けてないしスキップ。。。

ssh-copy-idコマンドでリモートサーバーに鍵を登録します.

sshの再起動 - $ /etc/init.d/sshd reloadと書いてあったがdebianは# /etc/init.d/ssh reload

鍵の名前を変更する場合 - vi ~/.ssh/config IdentityFile ~/.ssh/(変更した名前)

サーバのアドレスのアドレスを調べる

  • > scp ~/.ssh/id_rsa.pub サーバのユーザ名@サーバのアドレス:~/.ssh/authorized_keysを実行するも止まったまま
  • ip aで調べたenp0s3のip4アドレスでログインできた!

etc/sysconfig/sshd って設定ファイルに OPTIONS=”-o PermitRootLogin=no” ってのを発見!!!

PermitRootLoginの変更<ソース>

/etc/ssh/sshd_config
#PermitRootLogin yes 

から下に変更

/etc/ssh/sshd_config
PermitRootLogin no

rootユーザでのログイン - ssh接続のログイン時にユーザ名rootでログインすること。

/etc/ssh/sshd_config
#PermitRootLogin prohibit-passwordになっている。

-PermitRootLoginのパラメータ

ポートを指定してssh接続 $ ssh -p 8888 caminotak@192.168.0.126

sshクリア!おそらく

私の場合、このサイトで随分進みました。


<標準入出力・リダイレクション・パイプを理解する>

リダ入れクションの種類 - < file 標準入力をfileに切替える - << word 次にwordが行の先頭に出てくるまでの文字列を標準入力として使用する。 -> file 標準出力ををfileに切替える もしfileが存在していた場合は古い内容は上書きされる。 - >> file 標準出力ををfileに切替える 出力データはファイルの内容に追加される。 - >& file 標準エラー出力ををfileに切替える もしfileが存在していた場合は古い内容は上書きされる。 - >>& file 標準エラー出力ををfileに切替える 出力データはファイルの内容に追加される。

ワイルドカード[] .

-$ echo a?b
abc a3b
$ echo a[34]*
a3b a45b

 [ ]はまた、[a-z]や[5-9]などの指定もできます。[a-z]はaからzのアルファベット小文字全て、[5-9]は5から9までの数字にマッチします。

  •  この「すりかえ(リダイレクト)」は、細かい内部処理で言うと「fork」というプロセスを作る処理と「exec」というプログラムを行うことで実現されています。しかしこれについては、また別の機会に書きたいと思います。

  • catというコマンドは詳しく言うと、「与えられた引数をファイルとして認識し、それらをつなげて標準出力へ出力する。引数が存在しない場合は、標準入力から読み込んで標準出力へ出力する」

  • コマンドDはファイルを正常に終了させる

  • 終了文字 <<を使うと終端文字列を指定して標準入力を流しこむことができる。

$ cat << "EOF" > testfile.txt

デバイススペシャルファイル .

  • I/O の抽象化

キャラクタデバイス キャラクタデバイスは、時系列でデータが発生する端末、オーディオ、モデムあるいはテープ装置といったシーケンシャルにバイト単位でアクセスするような入出力を行うデバイスドライバです。 データはキャッシュしません。

ブロックデバイス ブロックデバイスは、ハードディスクのようなランダムアクセスができ、かつ入出力がブロック単位でアクセスを行うことができるハードウェアへのデバイスドライバです。 データをキャッシュするので効率良く入出力ができます。

擬似デバイス 擬似デバイス (Pseudo-devices) とはデバイスファイルのように見せかけているが、その先には具体的なハードウェアが結びつけられていないデバイスファイルです。 たとえば /dev/null は、その先が何もないデバイスファイルです。

I/Oスケジューラ さてまず、バッファに読み書きされることはわかりました。しかしハードディスク、あるいはそれに相当する具体的なブロックデバイスに書き込む、あるいは読み込む必要があります。 ハードディスクを例に取ると、円盤の磁性体が回っていて、そこに読み書きするヘッドが移動して、そして始めて読み書きが始まります。そのヘッドの移動のことをシークといいますが、ハードディスクのシーク時間は数ミリ秒程度かかります。数ミリ秒というと、とても短い時間のように思えますが、CPUの処理時間から比べれば長い長い時間です。

そこで有効な入出力をするためにスケジューラを用意します。スケジューラの役目は、全体のスループットの改善です。ですから、ある1つのプロセスだけを着目してみると、もしかすると、処理が遅くなっているという可能性もあります。 この当たりは単純に一つのI/Oスケジューリングのアルゴリズムが万能とはなかなかいかないので、Linux 2.6.0以降では Deadline I/O Scheduler、 Anticipatory I/O Scheduler[4]、 Complete Fairness Queueing I/O Scheduler [5]、 Noop I/O Scheduler といった複数 のスケジュールが用意されています。 またLinux 5.0以降ではI/Oスケジューラがマルチキュー I/O スケジューラに変更され、mq-deadline、bfq (Budget Fair Queuing)、kyber、none [6] が用意されています。

ネットワークデバイス 1981年当時4.1BSDを改造しTCP/IPのスタックを搭載したのがUNIXのTCP/IPの始まりです [8] 。 当時のLANも多くの場合イーサーネット(Ethernet)で構築されていました。 NIC (Network Interface Card) とか、あるいは LANポート と呼ぶネットワークインタフェースのためのデバイスがあり、 そのデバイスファイルとして /dev/eth0 が作成されました。

loはループバックのための仮想デバイスです。127.0.0.1は特別なIPアドレスで、これは自分自身を指します。