class: compact # <small>第05回おしながき</small> <div class=footnote> <small><small> 前半のハイライトは「`sudo python3 /home/admin/www.py`を詳細に説明できる」ことだよな ... 11月末は出来るか尋ねようか考え中 </small></small> </div> <small> 1. おしらせ - スケジュール案を更新したので見てね(ポータルも[オリジナル](https://lectures.fml.org/skill-cloud/)も) - ポータルのYoutube再生リスト直しておきました(貼り忘れてたみたい) - ポータルのパスワード ... C5Rs 1. EL (確認テスト) 1. 今回のハイライト 1. 前回(第04回,必須)の課題の答え合わせ 1. 演習 - vocareum と aws console 両方の画面を出しておいてください - 例題は、一緒に操作をしていきます - 課題はポータルのレポート機能で提出 - 今回、課題の動作確認はありません </small> --- class: compact # <small>第05回のハイライト</small> <div class=footnote> <small><small> </small></small> </div> <small> - ユーザの権限は、ユーザが起動したプロセスが利用する機能(例:ネットワーク)にも影響を与えます - 【復習】ユーザAが起動したプロセスXはユーザAと同じ権限を持つ - 一般ユーザが普通に利用する(例:ブラウザを使うなどの)場合、制限はありません - 管理者ユーザ(root)だけが主要サービスのサーバ(ポート番号が1024未満)の起動ができます - 【復習】UnixとAWSの機能の区別をきちんとしてください - security groupはAWSの機能で、今回のテーマとは(つまりUnixの話とは技術的に)別物 </small> --- class: compact # <small>第04回のレポートの答え合わせ(必須)</small> <div class=footnote> <small><small> </small></small> </div> > なぜダウンロードすると rw-r–r– が定番なのか? - 実行できたらまずいから - ついでに言えば、本人以外が編集できるのもよくないよ - これは、(ダウンロードする際に、 権限が a-x となるようにプログラムを書く人+OSの設定をする人が気を使っている) - アタックの定番のひとつは、なんとかして攻撃目標でUnixコマンドを実行すること (できればroot権限で実行したい) --- class: compact # <small>演習のハイライト</small> <div class=footnote> <small><small> </small></small> </div> - ネットワーク情報の基本的な調査方法を体験してみる - ユーザの権限とネットワーク(サーバ)を実感する - security groupの意義を実感する --- class: compact # <small>演習</small> <div class=footnote> <small><small> </small></small> </div> - vocareum と aws console 両方の画面を出しておいてください - 例題は、一緒に操作をしていきます - 課題: ワークシートを出してください - 答え合わせは来週します --- class: compact # <small>【再掲】AWS EC2にログインしてください</small> <div class=footnote> <small><small> </small></small> </div> <small> 1. いったん vocareum の画面を出してください 1. AWS EC2のPublic IPをクリップボードにコピーしてください 1. ターミナルで次のコマンドを叩いてください - IPアドレスは各自ことなります - IPアドレス以外は全員おなじ文字列です ``` $ ssh -i .ssh/labsuser.pem admin@10.20.30.40 ``` - 10.20.30.40の部分は上でコピーしたPublic IPです。各自ことなります - `$`の部分は、もっと長い変な文字が書いてありますが、上の例では省略しています - sshコマンドの引数 = ログインしたい目的のサーバ。 フォーマットは「ユーザ名@サーバのIPアドレス」 - だれ = ユーザ名 = admin (AWS EC2 debianの場合デフォルトが admin なので本科目ではadmin) - どこ = サーバのIPアドレス = EC2のPublic IP - 公開鍵暗号の認証情報を`-i ファイル名`で指定します。 </small> --- class: compact # <small>例題: ネットワークの調査(1): EC2のIPアドレスを確認する</small> <div class=footnote> <small><small> (脚注) 一般のサーバでは、そのサーバのグローバルIPアドレスが表示されるので、どこのサーバか?確認できます。 一方、EC2の場合、Unix側からPublic IPは確認できません。 プライベートアドレスが表示されるだけです。 たしかにAWS Consoleと同じだね!と確認できるだけだし、プライベートアドレスが変わることもあるので、特に重要な意味はありません。 </small></small> </div> <small> - EC2にログインしてipコマンドを実行します - ip コマンド、フォーマットは`ip コマンド オプション` - コマンドのところが色々あります。もっとも基本となる「IPアドレスの調査」であれば address を使います。 曖昧さがないなら、コマンド部分は省略形が使えます。aで始まるコマンドは他にないのでaでもよいです ``` $ ip addr 〜省略〜 ``` </small> --- class: compact # <small>例題: ネットワークの調査(2): EC2で現在利用されているポート番号一覧を確認する</small> <div class=footnote> <small><small> (脚注1) システム構築の各段階で、こういった動作確認をしながら進めていきます。 そういうクセがあるかないかが、プロとアマチュアの違いだ!と言ってよいでしょう <br> (脚注2) ユーザにやさしくなるように、プロトコル名とかドメイン名に変換した結果を出そうとしますが、 この変換システムが障害の場合は問い合わせ途中で止まってしまうし、 見間違えるのも困るので、プロは、生のIPやポート番号で読み書きできるべき </small></small> </div> <small> - ss ... (ss = socket status の略だったはず) - フォーマットは`ss [オプション]` - `-l` ... listenしているポート番号を表示。つまり「サーバが利用しているポートを教えろ」という指示 - `-4` ... IPv4アドレスのみ表示 - `-n` ... ポート番号を数字で表示(指定しないとプロトコル名が表示される) ``` $ ss -l4n 〜省略〜 ``` </small> --- class: compact # <small>課題(1): www.pyの権限を確認する</small> <div class=footnote> <small><small> (脚注) これは、ほぼ春学期と同じ作業なので、みまもってみましょう </small></small> </div> 1. curlでwww.pyをダウンロードし、 2. `python3 /home/admin/www.py`を実行すると、どうなるのか?試しなさい 3. どうすればwww.pyが動くのか?考えて試してみなさい ``` [実行例] $ curl -O http://api.fml.org/dist/www.py $ python3 /home/admin/www.py ``` - オプションの`-O`は大文字のオー(OscarのO)です --- class: compact # <small>課題(2): セキュリティグループ無しの場合どうなるのか?SSH編</small> <div class=footnote> <small><small> (脚注) これは、ほぼ春学期と同じ作業なので、みまもってみましょう </small></small> </div> - 新たに、もうひとつ<B>「すべてのセキュリティグループにチェックを入れない」</B>EC2を作成してください。 以下、EC2(2号機)と呼称します - このEC2(2号機)にSSHしてみてください - (次の2つの情報が分かるような)スクリーンショットを貼ったレポートを出してください - EC2(2号機)のPublic IP - sshして失敗している様子 --- class: compact # <small>課題(3): セキュリティグループ無しの場合どうなるのか?HTTP編</small> <div class=footnote> <small><small> (脚注) これは、手順だけ書いておきますので、レッツ、チャレンジ </small></small> </div> <small> 1. EC2(2号機)の security group の管理画面を開き、22/tcpと80/tcpを許可 1. EC2(2号機)のPublic IP情報を記録(スクリーンショットを取り、レポートに貼る) 1. EC2(2号機)にSSHでログインし、www.pyをダウンロードする 1. WWWサーバ(つまりwww.py)を起動し、サーバにアクセスしている記録をとる - ブラウザの上の方だけスクリーンショットを取り、レポートに貼えば十分です - Public IPとwww.pyの出力がわかるようにスクリーンショットを取ってください 1. EC2(2号機)の security group の管理画面を開き、80/tcpを不許可にする 1. WWWサーバにアクセスできなくなった様子を記録 (スクリーンショットを取り、レポートに貼る) 1. EC2(2号機)の security group の管理画面を開き、80/tcpを許可 1. WWWサーバにアクセスできるようになったことを確認 (スクリーンショットを取り、レポートに貼る) 1. 最後に、<B>今回あらたに作成したEC2(2号機)は削除してください</B> (課金を避けるため不要なEC2は削除) 1. EC2の管理画面でEC2が一つ(第2回に作成したもの)だけになっていることを確認 <br> (スクリーンショットを取り、レポートに貼る) </small> --- class: compact # <small>課題の提出</small> <div class=footnote> <small><small> </small></small> </div> - いつもと同じで、ポータルのレポートボックスに提出してください - 作成したEC2は削除してください (無駄に課金されます、削除しましょう)