2013年05月21日 情報科学類 コンピュータリテラシ 筑波大学 システム情報系 情報工学域 新城 靖 <yas@cs.tsukuba.ac.jp>
このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~yas/coins/literacy-2013/2013-05-21
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~yas/
http://www.cs.tsukuba.ac.jp/~yas/
ネットワークには、次のものを含めて考える
暗号とは、情報の意味が当事者以外にはわからないように情報を変
換することである。
図? 暗号の考え方
暗号化の方法が秘密になっていると、一見、より強そうにみえる。しかし、そ の暗号が、強いのか弱いのか調べる方法がない。攻撃すると、簡単に落ちるか もしれない。暗号化の方法を提供している者が信頼できない時には使えない。
鍵を長くするだけで、安全性が指数関数的に高くなる。
鍵を1ビット長くすると、解読時間が2倍になる。
(「鍵の長さを2倍にすると解読時間が2倍になる」は、誤り)。
図? 指数関数 図? 指数関数
パスワードは、コンピュータの中では、暗号化の鍵として使われる。 長いパスワードは、破られにくい。1文字(大文字小文字数字記号)増やすと、 総当たりで解読に要する時間が、50倍から100倍近くかかるようになる。
暗号の方法は、大きく2つに分類される
例
チェックサムや CRC (Cyclic Redundancy Check) にも似ているが、暗号やディ ジタル署名で使われるのは、Collision Proof 性が求められる。
よく使われるハッシュ関数
公開鍵暗号系(非対称暗号系)では2つの異なる鍵を用いる。 便宜上、この2つを公開鍵と秘密鍵と呼ぶ。
これらの鍵は、互いに相手の逆関数になっているものが広く使われている。
図? 公開鍵暗号を使った暗号通信の手順
ここで、公開鍵から秘密鍵を計算することは難しい。ある平文を公開鍵で暗号 化してみたところで、秘密鍵を得ることは難しい。
![]() |
![]() |
共通鍵。各自7つの鍵を管理する。 | 公開鍵。各自、1組の鍵を管理する。 |
図? 鍵の管理の例。8人の場合。
認証とは、情報の正当性や完全性を確保する技術である。
図? man-in-the-middle攻撃
ディジタル署名では、通常の署名と同様に、次のような性質が必要である。
図? 公開鍵暗号を使ったディジタル署名の手順
メッセージ全体を暗号化する代わりに、メッセージを平文で送り、それにメッ セージを一方向関数(ハッシュ関数)と呼ばれる方法で計算した結果だけを、 秘密鍵で暗号化したものを送る方法もある。一方向関数では、計算結果から元 の値(メッセージ)を計算することが難しい。
ディジタル署名や利用者認証は、公開鍵暗号系ではなく、共通鍵暗号系を用い ても可能である。ただし、この場合、鍵を管理する信用できる管理センターが 必要となる。
サーバへのログインを例に、これを説明する。
単なる暗証番号の場合、通信を傍受されたら終り。 毎回違う数を使えば、傍受されていても平気。
公開鍵で自由に鍵が得られたとしても、鍵か偽物だと、意味はない。
鍵がが本物であるかをどうやって確認するか。
認証には、証明書が使われる。
X.509 形式(バイナリ)を、テキストに変換したものの例:
$ openssl x509 -text -noout < coins-www.cert Certificate: Data: Version: 3 (0x2) Serial Number: 23:99:a5:01:dd:82:d2:1a Signature Algorithm: sha1WithRSAEncryption Issuer: C=JP, O=SECOM Trust Systems CO.,LTD., CN=SECOM Passport for Web SR 2.0 CA Validity Not Before: Mar 4 08:20:34 2010 GMT Not After : Mar 31 14:59:59 2014 GMT Subject: C=JP, ST=Ibaraki, L=Tsukuba, O=University of Tsukuba, OU=Department of Computer Science, CN=www.coins.tsukuba.ac.jp Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:bf:a8:d2:c6:ca:36:85:52:74:2d:ee:3c:23:f3: 71:94:88:85:c0:52:47:5f:50:dd:96:bf:07:b7:82: 04:ce:fa:38:b9:80:49:2e:9e:42:c7:d7:1b:2c:6b: da:0b:71:20:61:73:31:92:27:c2:75:9a:13:92:ea: 00:0d:d8:77:13:f9:db:54:bf:fc:22:ef:cf:b8:c0: d2:6c:1e:df:5e:30:0b:e4:1f:28:40:82:29:59:69: 5b:c1:84:88:a8:d1:bf:84:cf:4d:d5:d8:34:40:4b: 1f:98:ec:b0:ec:35:19:ad:ae:19:2b:d9:87:7b:21: cf:d1:ca:53:70:09:88:c4:6d Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Digital Signature, Key Encipherment X509v3 Extended Key Usage: TLS Web Server Authentication X509v3 Subject Key Identifier: B0:C1:54:B3:02:01:7C:7C:9B:F8:BA:42:36:09:66:50:98:20:26:9E X509v3 Authority Key Identifier: keyid:30:9A:00:57:99:44:63:6B:C9:B2:F2:3D:8D:83:6B:3B:D7:9D:EF:64 X509v3 Certificate Policies: Policy: 1.2.392.200091.100.741.1 CPS: https://repo1.secomtrust.net/spcpp/pfw/pfwsr2ca/ X509v3 CRL Distribution Points: URI:http://repo1.secomtrust.net/spcpp/pfw/pfwsr2ca/fullcrl.crl Netscape Cert Type: SSL Server Signature Algorithm: sha1WithRSAEncryption a9:aa:27:a3:1f:66:db:25:44:a1:06:ab:a8:2a:95:b9:08:72: a5:b9:aa:b9:ac:6a:93:da:74:3f:59:a9:2a:f5:d5:08:ec:6f: 60:e3:df:fd:79:a3:7c:23:b6:c4:0f:44:a0:46:7e:98:6f:e2: a8:4a:a8:38:c8:f0:3c:52:12:e3:f7:e4:7f:70:00:d9:39:cb: fe:a6:2e:a9:09:77:25:b1:a9:2b:0a:88:4a:44:c1:94:99:8b: 0e:64:e1:2c:2a:b4:a2:ac:3b:8e:9c:bf:27:22:6f:df:2f:dd: 0f:61:83:18:fc:d9:ba:fd:53:92:9e:8f:10:81:9c:46:e0:65: 7a:99:1b:db:20:2f:8a:35:9f:44:00:23:ce:2a:5d:c5:38:ca: f3:77:71:ce:07:90:b3:0c:e2:4d:1f:c1:13:40:a6:95:f5:a1: 22:24:0d:64:f6:27:07:bb:dc:d1:56:e5:9a:f3:b9:20:2e:a0: 5c:65:de:40:ef:26:c3:ee:f4:06:e9:19:5d:c7:da:bb:63:da: a0:8d:a5:2b:65:77:8e:30:a9:3b:b6:06:21:86:9c:5e:bc:dc: e2:23:aa:1f:4d:ce:8d:70:38:7d:2b:0d:70:c1:3d:ba:2d:e9: 7a:16:92:58:96:7e:3b:f2:a5:54:0c:bc:3d:35:bd:2c:18:46: e4:26:8b:26 $
証明書がついていたとして、それが本物であるかをどうやって確認するか。
認証局(CA, Certificate Authority)に、証明書を発行してもらう。(認証局の 秘密鍵でディジタル署名をしてもらう)
その認証局は、信頼できるか?
WWWブラウザには、ルート認証局の証明書が予め含まれている。
末端のWWWサイトは、ルート認証局、または、中間認証局から発行された証 明書を提示する。
インターネットで通信をプログラムを利用する時、 「クライアント」と「サーバ」という分けて考えることが多い。
例:
コンピュータが1台しかない場合、プログラムは1つでよい。通信をする場合 には、プログラム(コンピュータ)が2つになる。そのうちの1つのプログラ ム(またはコンピュータ)を、「クライアント」、もう1つを「サーバ」とい う。
.pub
が着いているものが公開鍵が入っているファイル、
ついていないものが秘密鍵が入っているファイル。
$ ls -l /etc/ssh_host_rsa_key*
-rw------- 1 root wheel 1675 3 2 15:20 /etc/ssh_host_rsa_key
-rw-r--r-- 1 root wheel 382 3 2 15:20 /etc/ssh_host_rsa_key.pub
$
ssh (scp, WinSCP, PuTTY, Tera Term含む) で始めてあるホストに接続する時 には、警告が現れる。
ssh コマンド
$ ssh ホスト名 -l ユーザ名The authenticity of host 'ホスト名 (IPアドレス)' can't be established. RSA key fingerprint is 16進数32桁. Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'ホスト名 (IPアドレス)' (RSA) to the list of known hosts. Password: (パスワードを打つ。画面には表示されない。)
ホスト名$
![]()
この 16進数32桁
の数は、接続先のホストの公開鍵を、ハッ
シュ関数 MD5 にかけた結果である。この32桁の数を目で確認することにより、
接続先のホストが正しい(
man-in-the-middle攻撃が
行われていない)ことがわかる。
3d:78:df:9c:5e:55:88:5f:0c:b2:8e:71:4a:0c:47:13
44:08:af:d4:56:7d:b9:20:25:d2:dd:0c:03:27:a4:d4
43:1a:7a:7f:f7:d6:3a:82:5c:10:98:b0:13:58:9e:c7
7a:bf:35:d6:b0:f3:c2:b9:ab:96:ec:a3:12:0c:95:b5
7f:29:f7:e7:87:65:c8:b9:02:f5:2a:22:41:ea:73:b9
13:29:e6:ad:e0:3f:73:7b:f8:9b:b4:03:6e:fe:d3:9b
de:18:ce:85:f0:a5:f3:b0:f7:cc:72:83:c8:1e:94:1b
個人ごとに公開鍵での認証機能を利用したほうがよい。
「端末」を複数開くと、「シェル」のプロセスが2つ。 プログラムとしては、同じ bash だが、プロセスとしては別物になる。
その昔は、1度に1個のプログラムだけしかメモリに入れられなかった。 (プログラムとプロセスの違いが希薄。)
$ ls
プロセスには、ID (identifier)と属性がある。 psコマンド は、プロセスの一覧と属性を表示するコマンドである。
$ ps
PID TT STAT TIME COMMAND
639 s000 S 0:00.01 -bash
652 s000 S+ 0:00.20 emacs
646 s001 S 0:00.01 -bash
$
1行が1プロセスに対応。左から次のような意味を持つ。
/dev/ttys001
は
s001
になる。
R
(runnable)
U
(uninterruptible), D
(Disk),
S
(Sleep)、I
(Idle)
Z
(Zombie)
T
(Traced)
TIME
COMMAND
$ ps x
PID TT STAT TIME COMMAND
526 ?? Ss 0:00.06 /sbin/launchd
547 ?? S 0:00.26 /System/Library/CoreServices/Dock.app/Contents/MacOS
548 ?? S 0:00.31 /System/Library/CoreServices/SystemUIServer.app/Cont
549 ?? S 0:00.62 /System/Library/CoreServices/Finder.app/Contents/Mac
553 ?? S 0:01.33 /System/Library/Frameworks/ApplicationServices.frame
556 ?? S 0:00.00 /usr/sbin/pboard
560 ?? S 0:00.01 /System/Library/Frameworks/InputMethodKit.framework/
561 ?? S 0:00.35 /System/Library/Input Methods/Kotoeri.app/Contents/M
564 ?? S 0:00.17 /usr/libexec/UserEventAgent -l Aqua
578 ?? S 0:00.04 /System/Library/CoreServices/Menu Extras/TextInput.m
580 ?? S 0:00.01 /System/Library/CoreServices/CCacheServer.app/Conten
604 ?? S 0:00.09 /System/Library/Frameworks/OpenGL.framework/Versions
606 ?? S 0:09.23 /Applications/iTerm.app/Contents/MacOS/iTerm -psn_0_
616 ?? S 0:02.03 /Applications/Firefox.app/Contents/MacOS/firefox-bin
638 s000 Ss 0:00.01 login -fp yas
639 s000 S 0:00.01 -bash
652 s000 S+ 0:00.21 emacs
645 s001 Ss 0:00.01 login -fp yas
646 s001 S 0:00.01 -bash
659 s001 R+ 0:00.00 ps x
$
$ ps a
$ ps u
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
yas 652 0.0 0.3 2451208 13168 s000 S+ 5:58PM 0:00.21 emacs
yas 646 0.0 0.0 2435468 1008 s001 S 5:58PM 0:00.01 -bash
yas 639 0.0 0.0 2435468 1008 s000 S 5:58PM 0:00.01 -bash
$
%CPU
%MEM
VSZ
(Virtual Size)
RSS
(resident set size)
STARTED
親子関係により、プロセスは全体として木構造を作る。
親プロセスのプロセス識別子は、psコマンドに「l」オプションをつけると PPIDのところに表示される。
$ ps l
UID PID PPID CPU PRI NI VSZ RSS WCHAN STAT TT TIME COMMAND
1013 639 638 0 31 0 2435468 1008 - S s000 0:00.01 -bash
1013 652 639 0 31 0 2451208 13168 - S+ s000 0:00.21 emacs
1013 646 645 0 31 0 2435468 1008 - S s001 0:00.02 -bash
$
PID 652 の emacs の親プロセスは、PID 639 の bash。
プロセスを殺すとは、プロセスが自主的に終了しない時に、強制的に終了させ ること。
Unix では、プロセスを殺す方法は、主に次の2つ。
$ cat
Line 1
Line 1
Line 2
Line 2
^C
$
^C
と同様に ^\
(「^\」または「^¥」)
もプロセスを強制終了させるキーで
ある。^\ は、^Cが利かないときでも利くことがある。
^\
の場合、デバッグ用にcore
という名前のファイル
ができる。普段は、core ファイルは不要なので、^C
を使うべ
きである。
coins の環境では、core ファイルが作られないように設定されている。 core ファイルの利用方法は、デバッガ gdb のマニュアル、 man core (core ファイルの man ページ(man コマンドで表示されるページ))、 Unix Super Text 下巻 「第60章 デバッグの方法」を参照。
stty コマンドを使うと、^C
や ^\
を変更でき
る。
$ stty -a
speed 38400 baud; 35 rows; 80 columns;
lflags: icanon isig iexten echo echoe echok echoke -echonl echoctl
-echoprt -altwerase -noflsh -tostop -flusho pendin -nokerninfo
-extproc
iflags: -istrip icrnl -inlcr -igncr ixon -ixoff ixany imaxbel -iutf8
-ignbrk brkint -inpck -ignpar -parmrk
oflags: opost onlcr -oxtabs -onocr -onlret
cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb -crtscts -dsrflow
-dtrflow -mdmbuf
cchars: discard = ; dsusp = ^Y; eof = ^D; eol = ;
eol2 = ; erase = ^?; intr = ^C; kill = ^U;
lnext = ; min = 1; quit = ^\; reprint = ^R; start = ^Q;
status = ; stop = ^S; susp = ^Z; time = 0; werase = ^W;
$
「intr」のところに表示されるものが「^C」,
「quit」のところに表示されるものが「^\」に相当するキー。
「kill」は、1行削除の意味。
^C
や ^\
で死なないプロセス
(lv, emacs など)
を殺すには、kill コマンドを使う。
$ kill pid
これは、プロセス識別子pidのプロセスを殺す。
他人のプロセスは、権限がないので殺せない。
注意:pid
には、プロセス識別子となる番号を入れる。「p」、
「i」「d」と3文字打つのではない。
-KILL
をつけてkillコマンドを実行する。
$ kill -KILL pid
ps プロセスの一覧の表示 ps ux プロセスの一覧の表示(BSD,Linux) ps aux プロセスの一覧の表示(BSD,Linux) stty all 端末の状態の表示(BSD) stty -a 端末の状態の表示(System V,Linux) kill PID プロセスを殺す kill -KILL PID プロセスを殺す(必殺)PID はプロセス識別子。 ;
TAや教官からメールが来て、必要な返事は、次の実習時間/講義時間までに 出すこと。
coins 以外のメール・サーバを主に使うときには、~/.forward による転送の設 定を行うこと。
~/.forward
というファイルに、転送先のアドレスを書く。
たとえば、
shiro@himalaya.is.tsukuba.ac.jp
に届いたメールを全て
shiro@alps.is.tsukuba.ac.jp
に転送したいとする。この時、
himalaya
の方のホーム・ディレクトリの下の
~/.forward
に次のように書く。
shiro@alps.is.tsukuba.ac.jp単純に転送先のアドレスを書く方法では、
~/.forward
が
あるホストには、何も残らないが、コピーを残しながら、転送する方法もある。
それには、次のように自分のログイン名に\
を付けたア
ドレスを含める。
\shiro, shiro@alps.is.tsukuba.ac.jp注意:「
\
」は、ASCII 「5c(16進数)」である。
「\」と表示されたり「¥」と表示されることがある。
「/」ではない。
この例では、himalaya に届いた電子メールは、himalaya
と
いうホストの
\shiro
というユーザの
配送プログラム用メール・ボックスに入り、
さらに、shiro@alps.is.tsukuba.ac.jp
にも送られる。
alps
にログインした時にも、
alps
と himalaya
の両方のメールが読め、
また、himalaya
にログインしてもやはり
alps
と himalaya
の両方のメールが読める
と便利に思えるかもしれない。しかし、こうすることは技術的に難しいので、
しばらくはあきらめて欲しい。
\loginname
の機能をつかっても、なかなかうまくいかない。
たとえば、次のよう
な ~/.forward
を作成したと考える。(実際に実行すると危険なので、
考えるだけする。)
(alps:~/.forward) \shiro, shiro@himalaya.is.tsukuba.ac.jp
(himalaya:~/.forward) \shiro, shiro@alps.is.tsukuba.ac.jpこの状態で、
shiro@alps.is.tsukuba.ac.jp
にメールが届いた
場合、次のようなことが起る。
alps
にコピーが残され、かつ、
shiro@himalaya.is.tsukuba.ac.jp
に送らる。
himalaya
では、やはり、コピーが残され(ここまでは順調)、
さらに、shiro@alps.is.tsukuba.ac.jp
に送られる(!)。
alps
では、コピーが残され(2回目)、himalaya
に送られる。
himalaya
では、コピーが残され(2回目)、
さらに、shiro@alps.is.tsukuba.ac.jp
に送られる。
alps
では、コピーが残され(3回目)、himalaya
に送られる。
himalaya
では、コピーが残され(3回目)、
さらに、shiro@alps.is.tsukuba.ac.jp
に送られる。
alps
では、コピーが残され(4回目)、himalaya
に送られる。
himalaya
では、コピーが残され(4回目)、
さらに、shiro@alps.is.tsukuba.ac.jp
に送られる。
3ヵ所以上でこの設定をしたとすると、中継される度にメールが増殖する。
\loginname
の機能を使っていなかったとすると、コピーは
残らないが、メールが行き来するだけで、どこにも届けられずにエラーになる。
~/.forward
の設定をしたら、必ず自分で自分あてに電子メールを出
して届くかテストすること。~/.forward
の設定を間違えると、エラー
のメールも届かなくなるので、エラーが起こっていることさえわからなくなる。
~/.forward
の機能は、もともとは、sendmail という種類のMTA の機
能である。他の MTA (qmail, postfix)でも使えるように設定していることが多い。
~/.forward
の応用として、他のアドレスに電子メールを転送するの
ではなく、(サーバ上で実行される)プログラムに転送する機能がある。すな
わち、(サーバ上で)プログラムを実行して標準入力に電子メールの内容を与
えるという機能がある。これには、次のように~/.forward
に書く。
"| /program/path/name arg1 arg2 arg3 ... argn"このように、
|
に続いて、プログラムのパス名と引数を書き、
全体を ""
で括る。
この機能を使って、受け取った電子メールを自動的に分類したり、
spamメール
を排除したりすることができる。たとえば、MH の
slocalやprocmail
と呼ば
れているプログラムがこの機能を使っている。
モード | 拡張子 |
---|---|
text-mode | .txt, .text |
html-mode | .html |
c-mode | .c, .h |
lisp-interaction-mode | .el |
fundamental-mode | なし |
M-x describe-mode
: モードの説明の表示
M-x describe-bindings
: キー操作の一覧の表示
;; This buffer is for notes you don't want to save, and for Lisp evaluation. ;; If you want to create a file, visit that file with C-x C-f, ;; then enter the text in that file's own buffer. -EEE:---F1 *scratch* All L5 (Lisp Interaction)-------------日本語訳:
;; このバッファは、保存する必要がない注意事項表示とLisp 評価のためのバッファです。 ;; もしファイルを作成したいなら、C-x C-f を使ってファイルを開きなさい。 ;; そして、ファイルのバッファへテキストを打ち込みなさい。 -EEE:---F1 *scratch* All L5 (Lisp Interaction)-------------このような表示がなされたら、画面の指示に従い、
C-x C-f
でファイル
を開くこと。
coins 以外に日常的に読み書きするメール・アカウントがある人は、毎日 coins に届いたメールを確認する方法として~/.forward を設定して、転送する 方法が考えられる。そのようにしたい人は、そうしなさい。
~/.forward は、emacs でテキスト・ファイルとして作成するとよい。
$ emacs ~/.forward
設定が完了したら、必ず
who@coins.tsukuba.ac.jp
にメールを書き、
~/.forward の機能がうまくうまく動いていることを確認しなさい。
(who
は s + 学籍番号下7桁
)のログイン名)
メールがループしないことを確かめなさい。
$ ps
$ ps -l
ps コマンドに、次のオプションを与えて、動作を確認しなさい。
$ ps l
$ ps -l
他のオプションについて、man ps を見て見なさい。
$ ps aux | lv
この方法を、確かめなさい。lv コマンドについては、
手引き 2.3.14 参照。
lv コマンド
を参照しなさい。q(終了)、次のページへの移動(スペースキー)、
ページを戻る(b)は、必ず覚えなさい。
$ ps aux
$ ps auxw
あるいは、iTerm の画面を横幅を広げて ps コマンドを打ちなさい。
横幅を広げるには、右下の斜線が入っている部分をドラッグすればよい。
$ top
$ top -o cpu
(CPU を消費している順)
MacOSX では、top コマンド自分自身が「重たい」と認識される。
その場合は、top コマンドが表示を変更する頻度を下げる。
$ top -s 4 -o cpu
man top でマニュアルを表示して、-o オプションと -U の使い方を
調べなさい。そして、メモリの利用順 (rsize) で表示しなさい。
-U オプションで自分自身のプロセスだけを表示しなさい。
$ top -U $USER
$ pstree
$ pstree | lv
iTerm の画面の横幅を広げると見やすい。
$ open "/Applications/Utilities/Activity Monitor.app"
または、Finder で、「移動」メニューから「ユーティリティ」を
選択。「アクティビティモニタ.app」のアイコンをダブルクリック。
アクティビティモニタの表示
表示されるプロセスの範囲を変えてみなさい。top コマンドの表示と比較しなさい。
$ cat
aaa
aaa
bbb
bbb
^C
$
なお、^C と 入力の終わりを意味する ^D は働きが異な
る。どちらでもプロセスが終了することがあるが、強制終了したい場合には、
^C を使いなさい。
$ ls -R ~/Library
(大量の表示、省略)
^C
$
C-c
) は、C-x C-c
のように、その
キーに割り当てられた関数を実行する意味。)
C-c
は、C-x
と同じように、2ストローク以上で1つの意
味をなすことが多い。何もない状態でC-c
を打った場合には、
C-g
によりキャンセルしなさい。
kill コマンドを使って、プロセスを殺してみなさい。
lv コマンドの代わりに、bash からなるプロセスを殺すとどうなるか調べなさい。
/etc/passwd
」の中にある「root
」とい
う文字を含む行を表示している。
$ grep root /etc/passwd
root:*:0:0:System Administrator:/var/root:/bin/sh
daemon:*:1:1:System Services:/var/root:/usr/bin/false
_cvmsroot:*:212:212:CVMS Root:/var/empty:/usr/bin/false
$
同じことを、パイプを使っても実行することができる。
$ cat /etc/passwd | grep root
root:*:0:0:System Administrator:/var/root:/bin/sh
daemon:*:1:1:System Services:/var/root:/usr/bin/false
_cvmsroot:*:212:212:CVMS Root:/var/empty:/usr/bin/false
$
grep コマンドを使って次のようなことを行ってみなさい。
/etc/services
にある http
が含まれる行
/etc/services
にある pop
が含まれる行
/etc/services
にある imap
が含まれる行
ls
が含まれる行
grep コマンドには次のようなオプションを指定することができる。
$ ps ux | grep cat
$ ps uxw | grep cat
この機能を利用して見なさい。
次のようにして、Finder や Dock のプロセスの PID を調べなさい。
$ ps uxw | grep Finder
$ ps uxw | grep -i finder
$ ps uxw | grep Dock
$ ps uxw | grep -i dock
grep コマンドに -i オプションを付けると大文字と小文字を関係なく調べるこ
とができる。
$ ps uxw | grep cat
$ kill 数
(まず、Commandキー() と Option キーを左手で押し、
押しっぱなしの状態で、右手で Esc キーを一度押して離す。)
この機能を確認しなさい。なお、この機能では、ウインドウを開くプロセスし か強制終了できない。iTerm の中で実行されるプロセスや端末とは結びついて いないプロセスを強制終了するには、kill コマンドを使うしかない。
host1$ ssh hostname
Password: (パスワードを打つ。画面には表示されない。)
hostname$
hostname
は、
cosmos10
など、接続したいコンピュータの名前を入れる。
実習では、別のコンピュータとしては、次のものを利用しなさい。
$ ssh cosmos10.coins.tsukuba.ac.jp
$ ssh www.coins.tsukuba.ac.jp
実習室内では、coins.tsukuba.ac.jp を省略できる。
$ ssh cosmos10
$ ssh www
一番最初に接続する時には、次のような警告(Warning:)が表示される。
cosmos09:~ yas$ ssh cosmos10
The authenticity of host 'cosmos10 (130.158.86.150)' can't be established.
RSA key fingerprint is 44:08:af:d4:56:7d:b9:20:25:d2:dd:0c:03:27:a4:d4.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'cosmos10,130.158.86.150' (RSA) to the list of known hosts.
Password: パスワード
Last login: Thu May 20 15:02:38 2010 from sharon.hlla.is.tsukuba.ac.jp
cosmos10:~ yas$
この fingerprint は、接続先のホストの公開鍵のハッシュ値である。これが
主なホストの公開鍵のハッシュ値
と同じことを確認してから yes と打ち込みなさい。
遠隔ログインが成功すると、ログイン先でシェルが実行される。シェルのプロ ンプトには、(多くの場合)ホスト名が含まれているので、遠隔ログイン後に は、プロンプトが変化する。シェルを終了(exitコマンド)すると、遠隔ログイ ン自身も終了する(ログアウトする)。
ssh で遠隔ログインした後に、シェルのプロンプトが変わることを確認しなさ い。また、exit コマンドを実行すると、ログアウトできることを確認しなさい。
$ cat ~/.ssh/known_hosts
cosmos10,130.158.86.150 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAspu6phmu41bhJX6s6pY6
+OgH+D0wY52m68NsfM+6prj64yhbW3I9s2MJT/gmBt6+dzY/jFYMQUMPtgESveYlgj72gJ0OrKAkhfWF
POWfeyXoULDy+1qroPLBxpWs4VMuohkXinmegcaUFnwedx1nE8i3dCKsgKQDsIHZb8K+oZkDzbWpHLpc
iY+9aNwIgo9YB9+jnB/azTpLx+DwT0yw/0xezAN4rQiJi3CyHN/Dn7zMX7E8xslVnQEjAfsTIz784/tH
+ffqrEMpm6i62teW1Q7p8zhq2dN2P1w1PBVtEBUd2GpnbpukB6FmLthVU7natkNWSMWC2F2Y8sP8T2+N
iQ==
$
ログイン先とログインもとでユーザ名が異なる時には、次のように、-l オプショ ンに続きログイン先のユーザ名を使う。
host1$ ssh remotehost -l user
Password: (パスワードを打つ)
remotehost$
または、「@」の前にログイン先のユーザ名を指定する。
host1$ ssh user@remotehost
Password: (パスワードを打つ)
remotehost$
この -l オプションを利用する方法や @ を利用する方法で遠隔ログインを行っ
てみなさい。(注意:同じ場合でも、あえて指定することもできる。)
(sshを実行する、iTtermを実行した直後。)
$ ifconfig en0
(inet の次に iMac の IP アドレスが表示される。)
$ ssh www
$ ifconfig bond0
(inet の次に www サーバの IP アドレスが表示される。)
$ exit
$
$ lv ~/.bashrc
cosmos10:~ yas$ ssh www
The authenticity of host 'www (130.158.86.1)' can't be established.
RSA key fingerprint is 3d:78:df:9c:5e:55:88:5f:0c:b2:8e:71:4a:0c:47:13.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'www,130.158.86.1' (RSA) to the list of known hosts.
Password:
Last login: Thu May 20 12:18:13 2010 from sharon.hlla.is.tsukuba.ac.jp
www:~ yas$
www:~ yas$ cd /var/log/apache2/public/
www:public yas$ pwd
/var/log/apache2/public
www:public yas$
access*
の「*
」は、
シェルの
ファイル名置換
の意味である。
$ ls
(多くのファイルが表示される)
$ ls access*
(多くのファイルが表示される)
www:public yas$ ls access* | tail -1
access_2013-05-18-21_31_57.log
www:public yas$ ls -t access* | head -1
access_2013-05-18-21_31_57.log
www:public yas$
この例では、access_2013-05-18-21_31_57.log
が最新のものである。
$ lv access上のlsの結果で置き換える
$ tail access上のlsの結果で置き換える
(表示がなされる。)
(しばらく待つ。)
$ tail access上のlsの結果で置き換える
(表示がなされる。)
(しばらく待つ。)
$ tail access上のlsの結果で置き換える
(表示がなされる。)
(しばらく間隔を空けてから)数回 tail コマンドを実行すると、その度に行
が増えているはずである。
$ tail -f access上のlsの結果で置き換える
-f オプションを指定すると、tail コマンドは終了することなく新しく追加さ
れた行を表示する。この tail コマンドは、自動的には終了しないので、終わっ
たら、
^C (Control+C) で強制終了させる。
130.158.83.140 - - [17/May/2013:18:39:29 +0900] "GET /~yas/coins/l iteracy-2013/ HTTP/1.1" 200 5454 "-" "Mozilla/5.0 (Macintosh; Inte l Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0"この例では、一番左に表示されているものは、クライアントの IP アドレスで ある。その他に、日付やどの URL をアクセスしたか、転送したバイト数、 ブラウザの種類も表示されている。
自分自身で、情報科学類の Web ページをアクセスした時に、自分が使っている iMac の IP アドレスが表示されることを確認しなさい。
次のようにして、 grep コマンド で IP アドレスを検索する方法もある。
$ grep 130.158.83.140 access上のlsの結果で置き換える
注意: IP アドレスとしては、「130.158.83.140」ではなく、
練習問題(1023)
を参考にして自分自身が使っている iMac のものを使いなさい。
$ cat /etc/ssh_host_rsa_key.pub
また、次のようにしてハッシュ値を表示しなさい。
$ ssh-keygen -l -f /etc/ssh_host_rsa_key.pub
$ ls -ld ~/.ssh
<結果省略>
$ ls -l ~/.ssh/known_hosts
<結果省略>
$
この ~/.ssh/known_hosts
には、接続先のホストの公開鍵が
含まれている。これを表示しなさい。
$ cat ~/.ssh/known_hosts
<結果省略>
$
また、公開鍵のハッシュ値を表示しなさい。
$ ssh-keygen -l -f ~/.ssh/known_hosts
<結果省略>
$
https://www.coins.tsukuba.ac.jp/ce/
等。
方法(1)
C-l
(control + L) キーを押す。
C-x b
(control + x に続いて小文字の b) キーを押す。
Switch to buffer (default *scratch*):
」に対して、
リターンキーを打つ。
*scratch* All L行番号 (Lisp Interaction) ----
「*scratch*」 バッファで、次のようなキー操作を行ってみなさい。
;; This buffer is for notes you don't want to save, and for Lisp evaluation.
;; If you want to create a file, visit that file with C-x C-f,
;; then enter the text in that file's own buffer.
(+ 1 2 3)^J
(- 100 10)^J
(* 100 10)^J
(/ 5 2)^J
(/ 5.0 2)^J
emacs-major-version^J
(getenv "HOME")
注意: 行末の括弧の右の^J
は、Control + J の意味。
M-x describe-mode
で、
モードの説明を表示しなさい。M-x describe-bindings
で、どのような
キー操作があるか調べなさい。
ssh-keygen コマンドを使って、公開鍵と秘密鍵の組を生成しなさい。鍵の種類
としては、rsa 、または、dsa を使うとよい。生成に成功すると、標準では、
~/.ssh
というディレクトリの下に、2つのファイルが作られる。
ssh でログインする時に、生成した鍵の組を使って認証を行いなさい。 それには、クライアント側に秘密鍵を置き、サーバ側の ~/.ssh/authorized_keys (OpenSSHの場合)に、公開鍵を設定すればよい。 接続時には、秘密鍵を暗号化するために使ったパス レーズを打つ込む。(通常の通常のログインのパスワードを打つことはない。)
coins 内で実験する時には、クライアントもサーバも同じ ~/.ssh を参照する。 したがって、authorized_keys を作成するには、次のようにする (RSAかDSAのどちらか一方を選んで実施する。 両方行った場合、後から行った設定が有効になる。)。
rsaの場合:
$ cd ~/.ssh
$ ls id_rsa*
id_rsa id_rsa.pub
$ cp id_rsa.pub authorized_keys
dsaの場合:
$ cd ~/.ssh
$ ls id_dsa*
id_dsa id_dsa.pub
$ cp id_dsa.pub authorized_keys
$
authorized_keys を作成する前には、ssh で接続する時に次のように 「パスワード Password 」が聞かれる。
$ ssh cosmos10
Password:
authorized_keys を作成した後には、ssh で接続する時に次のように
「パスフレーズ passphrase」が聞かれる。
$ ssh cosmos10
Enter passphrase for key '/home/prof/yas/.ssh/id_rsa':
これに対して、ssh-keygen でパスフレーズを打ち込む。(公開鍵による認証に
失敗すると、通常のパスワードによる認証に落ちるのが一般的である。システ
ムによっては、認証方式に制限を加えていることがある。)
$ ssh-agent tcsh
$ printenv SSH_AUTH_SOCK
$ ssh-add -l
ssh-agentが有効なこと確認
$ ssh-add
鍵の登録
$ ssh-add -l
鍵が登録されたことの確認
$ ssh remote1
$ ssh remote2
$ ssh remote3
利用
$ exit
ssh-agentが有効な tcsh の終了
$
ssh-agent にコマンド(上の例ではtcsh)を与える代りに、csh の環境変数を設
定させるコマンドを出力させ、eval で実行する方法もある。
$ eval `ssh-agent`
$ printenv SSH_AUTH_SOCK
<以下同じ>
ただし、この方法ではログアウトした時に ssh-agent のプロセスが残ること
がある。そうならないように ログアウト時に実行させるプログ
ラムで殺す(ssh-agent -k)ようにする。
~/Library/Keychains/login.keychain
「キーチェーンアクセス.app」のパスワードとログインの時に打つパスワード を同じにしていると、自動的に機密データの暗号を解いてアプリケーションに 渡す機能がある。注意すべきことは、ログイン・パスワードを変更しても、 「キーチェーンアクセス.app」のパスワードは変更されないことである。 活用するには、ログイン・パスワードを変更したら、 「キーチェーンアクセス.app」のパスワードも変更するとよい。
何も使っていなければ、「キーチェーンアクセス.app」のパスワードは、初期 パスワードのままになっている。重要な情報を保存していなければ、上記のファ イルを削除し、ログインしなおすことで、リセットするとよい。
次のような MacOSX のアプリケーションが、「キーチェーンアクセス.app」を 使って機密情報を暗号化して保存することができる。
「キーチェーンアクセス.app」を実行して、どのような機密データが保持され てるかを見てみなさい。
次の手順でパスワードを暗号化して保存しなさい。
$ ls -l ~/Library/Keychains/login.keychain
$ open "/Applications/Utilities/Keychain Access.app"
$ ls -l ~/Library/Keychains/login.keychain
急に電源が落ちた時などには、ハードディスクの状態が「ファイル」や「ディ レクトリ」としては正常にアクセスできなくなることがある。「ディスクユー ティリティ.app」は、このような時に不整合を修復する 機能がある。コンピュータの電源を入れた時に自動的に実行されることもある。
「ディスクユーティリティ.app」を使うと、1つの大きなファイルを、1個の ハードディスクのように扱うことができる。このように、ディスクに見立てる ことができるデータのことを「ディスク・イメージ」という。「ディスクユー ティリティ.app」を使うと、ディスク・イメージをファイルに保存することが でき、また、ファイルに保存されたディスク・イメージを、「マウント」とい う操作を行い、通常のアプリケーションからファイルとディレクトリの集合と してアクセス可能にする。
MacOSX では、ディスク・イメージを含むファイルの拡張子は、「.dmg」である。
自分で CD-R や DVD-R にファイルを保存する時には、まず、 「ディスクユーティリティ.app」を使って ディスク・イメージをファイルに保存する方法が一般的である。
次のような操作を行い、ディスクイメージを作成し、利用してみなさい。
$ open /Applications/Utilities/Disk\ Utility.app
「新規イメージ」ボタン、または、「ファイル」メニューから「空のディスク
イメージ」を選択し、ディスク・イメージを作成する。名前と場所(ディレク
トリ(フォルダ))、サイズ、暗号化するかどうか、フォーマットを選択し、
「作成」ボタンを押す。
$ ls /Volumes/
(ここにディスクイメージの名前が表示される)
$ umount /Volumes/ディスクイメージの名前
MacOSX の「ディスクユーティリティ.app (Disk Utility.app) 」を 使って、暗号化されたディスク・イメージを作成しなさい。 暗号化の方式としては、AES が使われることを確認しなさい。
$ emacs file1.txt
$ ls -l file1.txt
-rw-r--r-- 1 yas prof 2 5 20 15:46 file1.txt
$
$ openssl sha1 file1.txt
SHA1(file1.txt)= 3f786850e387550fdab836ed7e6dc881de23001b
$
$ emacs file1.txt
$ ls -l file1.txt
-rw-r--r-- 1 yas prof 2 5 20 15:49 file1.txt
$
$ openssl sha1 file1.txt
SHA1(file1.txt)= 89e6c98d92887913cadf06b2adb97f26cde4849b
$
coins でも、VPN 機能を提供している。 手引き 9.3節 参照。 この機能を利用しなさい。
(1) ssh コマンドを使って www (www.coins.tsukuba.ac.jp) にログインしなさ い。次のコマンドを www で実行するとで、ssh にログインできたことを示しな さい。レポートには、www での次のコマンドの実行結果を含めなさい。
(2) 練習問題(1025) を行いなさい。 Web サーバが生成しているアクセスログから、自分自身がアクセスした記録を 抜き出しなさい。それには、まず自分が利用しているコンピュータの IP アド レスを調べ、アクセスログからその IP アドレスが含まれている行を抜き出す とよい。アクセスログのうち、数行をレポートに含めなさい。grep コマンドを 使っても使わなくてもよい。
(3) ssh で最初にあるホストに接続する時に、次のような表示がなされることがある。
RSA key fingerprint is 44:08:af:d4:56:7d:b9:20:25:d2:dd:0c:03:27:a4:d4.
この表示の意味を、今日の授業内容の用語を用いて簡単に説明しなさい。
2回目以降は、この表示がなされない。その理由を簡単に説明しなさい。
(4) 以下の方法で、ps コマンドと kill コマンドを実行し、その結果をまとめ なさい。
$ lv ~/.bashrc
(5) 電子メールの転送について、当てはまる行の先頭に yes, 当てはまらない 行の先頭に no と記述しなさい。
(a) coins 以外に電子メールのアカウントがある。 (b) coins のメールを毎日読む。 (c) ~/.forward の機能を理解した。 (d) ~/.forward を設定した。
(6) 情報科学類の学生は、coinsに届いたメールを毎日確認する必要がある。あ なた自身がどのようにして毎日確認するかを書きなさい。
(7) 手引きの次の部分を読みなさい。
(8) [加点] 練習問題(1025) では、coins の通常の Web サーバのアクセスログを調べている。coins には、通常の Web サーバの他 に、SSL 対応の Web サーバがある。SSL 対応の Web サーバについて、 練習問題(1025) と同じことを行いなさい。SSL 対応の Web サーバのアクセスログは、次のディレクトリの下にある。
(9) [加点] 選択課題。次の課題を1つ以上行いなさい。
(9a) [加点] sshコマンド、PuTTY、Tera Term、その他の ssh クライアントを 用いて、「自宅」からcoins のコンピュータに接続しなさい。そのことを示す ために、レポートには、どのようなプログラムを使ったのか、ログイン後のコ マンドの実行結果等を含めなさい。
(9b) [加点] sshコマンド、PuTTY、Tera Term、その他の ssh クライアントを 用いて「公開鍵を用いた認証」により、coins のコンピュータに接続しなさい。 そのことを示すために、レポートには、どのようなプログラムを使ったのか、 公開鍵の生成手順、クライアント側の設定、サーバ側の設定を含めなさい。
(9c) [加点] ssh-agent を利用して、パスワード入力なしにリモート・ログイ ンできるようにしなさい。そのことを示すために、レポートには、次のコマン ドの実行結果を含めなさい。
(9d) [加点] 自宅から VPN 機能を使って coins のコンピュータに接続しなさ い。そのことを示すために、レポートには、どのような設定を行ったか、ログ インしたコンピュータの名前、who am i コマンドの結果(VPNを使った時と使わ なかった時の比較)等を含めなさい。
(9e) [加点] openssl コマンド、または、gpg2 コマンドを用いて、ファイルの 暗号化と復号化を行いなさい。ディジタル署名の付加、および、検証を行いな さい。それらが実現されていることがわかるように、シェルとの対話をレポー トに含めなさい。
(9f) [加点] 「ディスクユーティリティ.app」を用いて暗号化されていないディ スク・イメージと暗号化されてたディスク・イメージの2つを作成し、次のよ うにして暗号化の効果を確認しなさい。
$ strings ディスクイメージを含むファイル | grep 文字列
ここで「文字列
」には、1 でコピーしたテキスト・ファイル
の内容を指定する。コマンドラインからは漢字を打つことが難しいので、
「文字列
」には、ASCIIによる簡単なものを指定しなさい。
この結果、暗号化されていないものにはその文字列が表示され、暗号化されて いるものには表示されないことを示しなさい。
(9g) [加点] 練習問題(1037) を行いなさい。 保存前の ~/Library/Keychains/login.keychain の最終更新時刻と大きさ、 保存後の ~/Library/Keychains/login.keychain の最終更新時刻と大きさ、 保存した項目のキーチェーン項目を含めなさい。