class: compact # <small>第04回おしながき</small> <div class=footnote> <small><small> </small></small> </div> <small> 1. おしらせ(or アンケート) - 特になし? - ポータルのパスワード ... qRjF - (理由のある)欠席とかあった人は言ってくださいね - 課題を見てもらう -> メディコンさん (いまのところ課題見たのは第02回だけ,レポートは別途) 1. EL (確認テスト) 1. 今回のハイライト 1. 前回(第03回)の課題の答え合わせ 1. 演習 "プロセスとファイル" - vocareum と aws console 両方の画面を出しておいてください - 例題は、一緒に操作をしていきます - 課題はポータルのレポート機能で提出 - 今回、課題の動作確認はありません </small> --- class: compact,col-3 # <small>第04回のハイライト</small> <div class=footnote> <small><small> (脚注) 予習スライドに書いたとおり、 「Unixセキュリティモデルが、開発の現場には、この程度の区別があれば十分という設計思想」だからです (これがベストであるという主張ではありません)。 「エリート開発チームばかりの職場なら、この程度の区別で十分」と言い換えられそうです。 一般の開発現場は、このゆるい区別では運用できないでしょう </small></small> </div> <small> - ユーザAが開始したプロセスX(「ユーザAのプロセスX」)はユーザAと同じ権限を持ちます - ファイルには属性があり、権限は9通り(だれ(3通り)」X「読み/書き/実行(3通り))あります - `ls -l`(lsコマンド)は、上の9通りの属性を「 rw-r--r-- 」のように左端に表示しています </small> ![height240px](../../images/unix-file-mode-low9bits.png) ![height2400px](../../images/unix-security-model.png) --- class: compact # <small>第03回のレポートの答え合わせ(必須)</small> <div class=footnote> <small><small> </small></small> </div> >必須: sudo python3 /home/admin/www.pyについて、何のコマンドを、だれが、引数とオプションを何にして実行してるのか?を、きちんと説明してください 1. adminユーザがsudoコマンドをpython3 /home/admin/www.pyを引数に実行する。sudoのオプションは無し。 2. sudoコマンドは(rootユーザの権限下で)、python3コマンドを/home/admin/www.pyを引数として実行する。python3のオプションも無し。 3. python3(インタープリタ)はwww.pyファイルの中身をpythonのソースコードとして解釈し、実行結果を表示する --- class: compact # <small>第03回のレポートの答え合わせ(自由)</small> <div class=footnote> <small><small> </small></small> </div> >任意(自由課題): ssh コマンドで初回接続時にだけ発生する問い合わせは何をやっているのか?を説明してください (該当スライドページを参照) 公開鍵暗号を応用して「誰(この場合はサーバのこと)」を確認/検証する方法がある。 sshの初回接続時には、この検証に使う情報(接続先サーバの情報)を保存する必要があり、「この情報を保存してよいか?を yes/no で尋ねている様子。 これをしておけば、接続2回め以降の検証は自動的に行われる。 検証しない場合、同じサーバ名もしくは同じIPアドレスで、こっそりサーバの中身がすりかわっていることに気づかないかもしれない。 これを検出する仕組み。 よって、サーバをリニューアルすると、ふたたび yes/no を聞かれることになるが、これは正しい動作。 なお、逆に言えば、初回接続時は「ユーザが自信を持って操作している」という大前提がある。ここが間違っていたら、ずっとだまされっぱなしとなることに注意 --- class: compact # <small>演習</small> <div class=footnote> <small><small> </small></small> </div> - vocareum と aws console 両方の画面を出しておいてください - 例題は、一緒に操作をしていきます - 課題: ワークシートを出してください - 答え合わせは来週します - [再掲] 本科目の目標(の2/3位?)は「`sudo python3 /home/admin/www.py`を詳細に説明できる」こと --- class: compact # <small>5W1HはUnixでも大事</small> <div class=footnote> <small><small> (脚注) Unixでは「lsはLiSt directory contentsの略」と称していますが、 Multicsに由来する説(lsはlist segmentの頭文字)があり、たぶんそちらが正解です (注: Unixのファイルに相当するものをMulticsではセグメントと呼んでいた)。 Unix開発チームは、Unix開発以前MulticsというOS開発に関係していました。 Unixの用語や概念はMulticsや(さらにその先祖)CTSSに由来するものがいろいろあります </small></small> </div> - システム構築でも、 <B>つねに</B>、 <B>いま自分が誰(役)で、どこで、何をしているのか?を把握する</B> ことは重要です - 今回は、5W1Hから少しずれていますが、 うまくいかないとき、 <B>誰</B>=ユーザ(自分)にとって、 <B>ファイルの権限が何に当たるのか?</B> を確認する必要があります - ファイルの権限まわりで、よく使うUnixコマンド - ls ... ファイルの一覧を表示するコマンド(lはエルです、limaのl) - chmod ... 属性(モード)を変えるという意味(そのままの)change modeの頭文字 --- 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>【復習】例題: いま自分は誰(役)なのか?</small> <div class=footnote> <small><small> </small></small> </div> <small> - いま、みなさんはAWS EC2にログインしていますね? - コマンド - id ... ユーザ情報を表示するコマンド ``` // デフォルトでは、たくさん表示されますが $ id // uidのみを表示したいなら -u オプションをつけます $ id -u 1000 // では、これを実行すると、どうなるか? $ sudo id -u 0 ``` </small> --- class: compact # <small>例題: ダウンロードするとファイル属性はどうなるか?</small> <div class=footnote> <small><small> (脚注) <br> Q: なぜ属性が、このように設定されるのか? <br> A: (1) ソースコード内でファイルを作成するコード(curlのプログラマによる指定) (2) ファイルを作成する関数が、シェルの設定(umask)を見て、 (1)と(2)をあわせた結果が、これ。 もっともファイルを作成するために呼び出す関数が、 こてこていろいろする関数なのか、生っぽいか?によって挙動は微妙に異なる。 上の説明は、いちばん生っぽい場合(OSの機能を呼び出すopenシステムコール)の説明 </small></small> </div> <small> - 実行する前に、どういう結果になるでしょうか?を5秒間かんがえてからやってみましょう ``` // ダウンロードする $ curl -O http://api.fml.org/dist/cc-04.py // ファイルの属性を見ると? $ ls -l /home/admin/cc-04.py // これも、ためしてください $ /home/admin/cc-04.py ``` </small> --- class: compact # <small>解説: ls -l /home/admin/cc-04.py</small> <div class=footnote> <small><small> (脚注) つまりユーザ(本人)だけは読み書き可能、自分以外の人も読むことだけ出来ます </small></small> </div> ``` $ ls -l /home/admin/cc-04.py -rw-r--r-- 1 admin admin 587 Oct 25 09:25 /home/admin/cc-04.py ``` ![height240px](../../images/unix-file-mode-low9bits.png) --- class: compact # <small>例題: 実行権限を付けてみる</small> <div class=footnote> <small><small> (脚注) 大事なところから2度書いておきますね。 <br> <B> 【大事】 何か作業をしたら、そのあと、つねに結果を確認するクセをつけること! 【超重要】 </B> </small></small> </div> <small> - 実行権限を付けてみましょう ``` // 実行権限を付けて $ chmod a+x /home/admin/cc-04.py // 何か作業をしたら、そのあと、つねに結果を確認するクセをつけること! 【超重要】 $ ls -l /home/admin/cc-04.py // 実行してみると? $ /home/admin/cc-04.py ``` </small> --- class: compact # <small>例題: では、こうすると?</small> <div class=footnote> <small><small> </small></small> </div> <small> - 前回(第03回)と今回(第04回)のハイブリッドな作業内容ね ``` // 前ページの実行結果 $ /home/admin/cc-04.py hello world uid (user id) = 1000 gid (group id) = 1000 // もちろん、こうやっても同じ結果 $ python3 /home/admin/cc-04.py // こうすると、どうなる?実行する前に5秒考えてから実行してください $ sudo /home/admin/cc-04.py ``` </small> --- class: compact # <small>例題: chmodできるユーザは誰?</small> <div class=footnote> <small><small> (脚注1) ユーザrootは最強なので、全ユーザの権限を変更できます <br> (脚注2) 普通のサーバで試さないように! <br> (脚注3) まちがえてsudo chmod と打つなよ! </small></small> </div> ``` // 前回みえなかったファイルですね? $ vi /etc/shadow // こうすると、どうなるかな? $ chmod a+w /etc/shadow ``` --- class: compact # <small>課題</small> <div class=footnote> <small><small> (脚注) これも、とりあえず考えてみよう。 参加することに意義があるぞ。 あと、丸暗記するのが仕事じゃないぞ、 丸暗記して成果を検索する仕事なら Google 先生とか OpenAI とかのほうが圧倒的に強いから、 人間より OpenAI とか Gemini とか Bedrock (AWS)を下請けにしたほうが安くて速くて圧倒的にいいわね </small></small> </div> <small> - 必須: - なぜダウンロードすると rw-r--r-- が定番なのか? (つまり実行権限(x)が付けないようにしているのか?) を考察しなさい - 任意(自由課題、すこしは加点していく) - `--x--x--x`という設定をすると、どういう動作になるのか? そして、この設定は、どういう場面で必要になるだろうか? (実際、うちの運用サーバ上の、とある場所では、この設定をしています) - 実行権限(x)を付ければコマンドになるわけではない (たとえばzipはコマンドに成らない)。 www.pyやcc-04.pyが実行権限(x)を付けるとコマンドになるのは、 どういう理屈なのだろうか? </small>