2017年05月23日 情報科学類 コンピュータリテラシ 筑波大学 システム情報系 情報工学域 新城 靖 <yas@cs.tsukuba.ac.jp>
このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~yas/coins/literacy-2017/2017-05-23
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~yas/
http://www.cs.tsukuba.ac.jp/~yas/
図? アクセス制御における主体、オブジェクト、および、操作
アクセス制御のオブジェクトは、ファイル、または、プロセスである。 操作には、次のようなものがある。
図? 実世界のユーザとUNIX中のプロセス・ファイル
Unixでは、全てのファイルやプロセスは、あるユーザの所有物である。 ファイルとプロセスには、UID が付加されている。
1人のユーザが複数のグループに属することができる。
whoami
コマンドを用いる。
$ whoami
yas
$
この例では、この人(のプロセス)のユーザ名は、yas
。
プロセスが属しているグループのグループ名を調べるには、
groups
コマンドを用いる。
$ groups
ugrad _developer netaccounts everyone com.apple.sharepoint.group.1
$
この例では、この人(のプロセス)は、
ugrad
, _developer
, netaccounts
everyone
,
com.apple.sharepoint.group.1
,
という5つ
のグループに属している。
idコマンドも使える。
$ id
uid=1013(yas) gid=530(ugrad) groups=530(ugrad),204(_developer),62(netaccounts),12(everyone),402(com.apple.sharepoint.group.1)
$
$ ls -l ~/.bashrc
-rw-r--r-- 1 yas prof 450 4 8 16:14 /home/prof/yas/.bashrc
$ ls -ld ~
drwxr-xr-x 54 yas prof 7168 5 19 14:12 /home/prof/yas
$
この例では、UID 属性が yas、GID 属性が prof である。
ファイルの「内容」のアクセス3段階であるが、ファイルの「属性」次の2段 階である。
(ホームディレクトリ以下の)ディレクトリの x を使ったファイルへの読み込み アクセスの許可と禁止。
図? ディレクトリのxの働き
スーパー・ユーザ(super user)
は、UID が 0 。
特権ユーザ(privileged user)、
ルート(root)、
su
(su コマンド、あるいは super user の略)ともよばれる。
スーパーユーザのユーザ名は、慣例として
root
という文字列が使われる。
ファイルのバックアップなど、システム管理の作業には スーパー・ユーザの仕組みが必要になる。
chown
コマ
ンドを用いる。ただし、スーパーユーザの権限が必要である。
ファイルをコピーして、元ファイルを消すことはできる。
ファイルの GID 属性を変更するには、chgrp
コマンドを使う。
一般ユーザは、自分が属しているグループにのみ変更できる。
任意のグループに変更するには、スーパー・ユーザの権限が必要である。
$ ls -l file1.txt
-rw-r--r-- 1 yas prof 2 5 10 18:59 file1.txt
$ chmod go-r file1.txt
$ ls -l file1.txt
-rw------- 1 yas prof 2 5 10 18:59 file1.txt
$
file1に対して、グループ(g)とそれ以外の人(o)に対して「読込み可」の許可を
取り除いている。
chmodは一般的には次の形式で実行する。
$ chmod set file1 file2 ...
set の形式
[ugoa][=+-][rwx]
ここの[ugoa]は、誰に対するアクセスの設定を変更するかを対象となる人を以
下の表から選んで並べる(複数可)。
文字 | 単語 | 意味 | |
u | user | ユーザ(利用者,所有者) | |
g | group | グループ | |
o | others | その他 | |
a | all | 全員、ugo と同じ |
文字 | 意味 |
+ | 許可を追加する |
- | 許可を除く |
= | 指定した許可だけとする |
文字 | 単語 | 意味 |
r | read | 読込み可 |
w | write | 書込み可 |
x | execute | 実行可 |
X | execute | 実行可(所有者に対して「実行可」がある時だけ) |
chmod には、-R (recursive)オプションがある。 これは、ディレクトリをたぐり全部変更することを意味する。
rw-r--r--
rwxr-xr-x
rwxr-xr-x
rwx------
rw-r--r--
~/public_html
以下のファイル)
rwxr-xr-x
public_html
以下のディレクトリ)
rwxr-xr-x
または rwx--x--x
~
。~/public_html
の親ディレクトリ)。
x ビットを出す。
rw-rw-r--
または rwxrwxr-x
r-xr-xr-x
, r-x------
ネットワークには、次のものを含めて考える
暗号とは、情報の意味が当事者以外にはわからないように情報を変 換することである。
図? 暗号の考え方
暗号化の方法が秘密になっていると、一見、より強そうにみえる。しかし、そ の暗号が、強いのか弱いのか調べる方法がない。攻撃すると、簡単に破られる かもしれない。暗号化の方法を提供している者が信頼できない時には使えない。
鍵を長くするだけで、安全性が指数関数的に高くなる。 鍵を1ビット長くすると、解読時間が2倍になる。 (「鍵の長さを2倍にすると解読時間が2倍になる」は、誤り)。
図? 指数関数
図? 指数関数
パスワードは、コンピュータの中では、暗号化の鍵として使われる。 長いパスワードは、破られにくい。1文字(大文字小文字数字記号)増やすと、 総当たりで解読に要する時間が、50倍から100倍近くかかるようになる。
暗号の方法は、大きく2つに分類される
例
図? 共通鍵暗号系による暗号通信
公開鍵暗号系(非対称暗号系)では2つの異なる鍵を用いる。 便宜上、この2つを公開鍵と秘密鍵と呼ぶ。
これらの鍵は、互いに相手の逆関数になっているものが広く使われている。
図? 公開鍵暗号を使った暗号通信の手順
ここで、公開鍵から秘密鍵を計算することは難しい。ある平文を公開鍵で暗号 化してみたところで、秘密鍵を得ることは難しい。
![]() |
![]() |
共通鍵。各自7つの鍵を管理する。 | 公開鍵。各自、1組の鍵を管理する。 |
認証とは、情報の正当性や完全性を確保する技術である。
図? man-in-the-middle攻撃
ディジタル署名では、通常の署名と同様に、次のような性質が必要である。
図? 公開鍵暗号を使ったディジタル署名の手順
メッセージ全体を暗号化する代わりに、メッセージを平文で送り、それにメッ セージを ハッシュ関数 と呼ばれる方法で計算して短くし、その短い結果だけを、 秘密鍵で暗号化したものを送る方法もある。
ディジタル署名や利用者認証は、公開鍵暗号系ではなく、共通鍵暗号系を用い ても可能である。ただし、この場合、鍵を管理する信用できる管理センターが 必要となる。
チェックサムや CRC (Cyclic Redundancy Check) にも似ているが、暗号やディ ジタル署名で使われるのは、Collision Proof 性が求められる。
よく使われるハッシュ関数
MD5, SHA-1 には、使い方によっては、脆弱性が見つかっている。
サーバへのログインを例に、これを説明する。
単なる暗証番号の場合、通信を傍受されたら終り。 毎回違う数を使えば、傍受されていても平気。
公開鍵で自由に鍵が得られたとしても、鍵か偽物だと、意味はない。
鍵がが本物であるかをどうやって確認するか。
証明書に含まれている重要な情報
証明書の内容の例。coins の Web サーバ www.coins.tsukuba.ac.jp で使われ ているもの。
$ openssl x509 -text -noout < coins-www.certCertificate: Data: Version: 3 (0x2) Serial Number: 943716538689393170 (0xd18c131213e1212) Signature Algorithm: sha256WithRSAEncryption Issuer: C=JP, L=Academe, O=National Institute of Informatics, CN=NII Open Domain CA - G4 Validity Not Before: Jun 24 08:48:15 2015 GMT Not After : Jul 24 08:48:15 2017 GMT Subject: C=JP, L=Academe, O=University of Tsukuba, OU=College of Information Science, CN=www.coins.tsukuba.ac.jp Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:ac:c6:73:f4:4f:e6:3f:c2:4b:31:d2:ce:00:df: 7f:33:7e:5d:fd:9b:39:b6:4d:08:e9:99:83:80:58: 24:d2:ee:40:21:12:ae:60:a1:4f:02:99:83:b1:2c: a8:62:b9:81:32:0c:87:ed:b0:ba:f0:ad:c5:f0:0b: 39:66:97:e8:95:27:0d:b7:f7:b3:ea:52:fd:8c:71: b5:ce:3f:23:21:89:9b:a7:f5:01:5e:51:e0:36:c7: 41:5c:86:7d:db:1d:62:a8:98:2a:67:61:65:18:3f: 4a:26:cc:f5:e8:cf:08:ba:6c:78:60:ef:18:96:14: c7:6d:5b:e9:e5:5d:a7:60:4d:e6:64:7e:01:76:f9: 71:0b:98:40:d5:df:d8:7a:e7:d7:14:b2:36:53:a6: 28:8c:7c:76:e1:40:0d:d2:ca:4c:4f:67:32:7b:cb: 83:ae:a9:e9:06:e7:07:80:b8:f2:7b:49:a5:ec:08: 04:da:9d:cf:02:8a:04:0b:4e:55:60:6c:5a:eb:dd: 93:6e:8c:54:e5:8d:66:89:85:0a:1a:d2:d1:75:92: 43:ee:64:30:cd:3a:92:e3:cc:f6:7e:9d:68:0d:d3: 54:71:9a:36:87:62:3a:60:c4:c3:d7:60:f8:f1:25: ff:cd:f8:a6:91:43:4a:75:e9:1b:5b:16:94:63:a4: cd:31 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Extended Key Usage: TLS Web Server Authentication, TLS Web Client Authentication X509v3 Authority Key Identifier: keyid:19:0B:6F:39:1F:31:03:34:5F:E4:D2:40:1F:37:E6:8D:E7:62:39:7C X509v3 CRL Distribution Points: Full Name: URI:http://repo1.secomtrust.net/sppca/nii/odca3/fullcrlg4.crl X509v3 Key Usage: critical Digital Signature, Key Encipherment X509v3 Subject Key Identifier: 18:C6:32:E5:21:7B:02:85:75:04:E6:AD:D0:D7:3E:0E:3E:74:BC:E4 X509v3 Certificate Policies: Policy: 1.3.6.1.4.1.32264.3.2.1.1 CPS: https://repo1.secomtrust.net/spcpp/cps/index.html Authority Information Access: OCSP - URI:http://niig4.ocsp.secomtrust.net X509v3 Subject Alternative Name: DNS:www.coins.tsukuba.ac.jp Signature Algorithm: sha256WithRSAEncryption 75:81:d3:d9:fd:63:ed:f6:4e:c4:f0:2c:82:3a:c7:58:b7:34: ad:19:b8:fe:19:56:6e:32:4f:8a:e0:ee:36:63:b9:3d:c2:8b: 1b:2f:74:6b:c5:15:ea:e5:12:e9:51:15:7e:06:75:6f:c6:f4: dc:ce:16:17:e0:a1:ff:ed:dd:a1:c7:9a:40:84:ee:aa:06:c1: ab:03:7e:c9:f8:1f:c7:c2:30:d2:ef:45:15:7f:7d:16:5f:01: 92:21:4c:80:b3:35:40:fe:01:78:d6:7b:0e:58:c4:c7:9f:c2: b5:78:3d:36:f4:34:f1:1c:83:4c:5b:46:48:b4:af:5f:3a:96: a3:bf:e0:67:a9:21:6a:cf:1f:a8:a4:91:15:88:5e:af:c9:96: b4:b6:8b:e6:9c:a1:c4:a0:5f:24:e2:bc:e7:44:f7:23:db:10: 87:45:fa:b4:18:49:92:4a:12:2b:ae:95:a8:bd:9c:07:38:c6: f9:d4:72:93:6d:2d:9d:3b:a0:bc:d9:1a:da:31:40:ac:7a:6f: a0:9b:d0:e6:d5:15:80:67:1e:f4:a2:dd:61:cc:a0:10:b8:eb: e2:d5:38:28:d6:2a:c5:87:35:95:6b:ce:7f:fa:aa:8d:67:e1: 57:53:57:a6:10:30:de:d2:fa:30:c7:40:5e:81:ef:0e:e9:cd: ae:60:25:c3 $
![]()
証明書がついていたとして、それが本物であるかをどうやって確認するか。
認証局(CA, Certificate Authority)に、証明書を発行してもらう。(認証局の 秘密鍵でディジタル署名をしてもらう)
その認証局は、信頼できるか?
WWWブラウザには、ルート認証局の証明書が予め含まれている。
末端のWWWサイトは、ルート認証局、または、中間認証局から発行された証 明書を提示する。
図? ルート認証局から始まる証明書のチェーン
インターネットで通信をプログラムを利用する時、 「クライアント」と「サーバ」という分けて考えることが多い。
例:
コンピュータが1台しかない場合、プログラムは1つでよい。通信をする場合 には、プログラム(コンピュータ)が2つになる。そのうちの1つのプログラ ム(またはコンピュータ)を、「クライアント」、もう1つを「サーバ」とい う。
.pub
が着いているものが公開鍵が入っているファイル、つ
いていないものが秘密鍵が入っているファイル。
$ ls -l /etc/ssh_host_rsa_key*
-rw------- 1 root wheel 1671 3 19 2014 /etc/ssh_host_rsa_key
-rw-r--r-- 1 root wheel 382 3 19 2014 /etc/ssh_host_rsa_key.pub
$ cat /etc/ssh_host_rsa_key
cat: /etc/ssh_host_rsa_key: Permission denied
$ cat /etc/ssh_host_rsa_key.pub
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA0gXvdJx/uWMpeVT8jOMQOXSUCeMgbDjzs1WY3FzdCtvY1yZYgXd9LQihQiuh9a2GN+WMPYFzIR1wlsxNjC1fpKaS3JGwwciJLYZO6tKn4lEWuAyR7exyPWYqRAJQgkTrJr9/0D5vVrVxykc+1dKC1YQpkHHuFdhzVjA4u0E7STzK/1NWnabfsKfLxBwjxiJoyPC/4j4zlnWmNebdf4AiUDmo1GGqKHE52+8VcWLl8wK6MzlYnWzbUAeQCcgHUSdvv3QEUzIoLf8c/slGT8XcJ3f+exgPbVBJpb5s6xxO4nMsn93CMokbryIWoB8950QzbdWxhuXumog3SMEOWht0uQ==
$ ssh-keygen -l -f /etc/ssh_host_rsa_key.pub
2048 1d:9a:8c:98:36:de:59:bd:d9:f3:e7:f5:5e:d4:e6:e5 (RSA)
$
$ grep crocus40 ~/.ssh/known_hosts
crocus40.coins.tsukuba.ac.jp,130.158.86.250 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA
0gXvdJx/uWMpeVT8jOMQOXSUCeMgbDjzs1WY3FzdCtvY1yZYgXd9LQihQiuh9a2GN+WMPYFzIR1wlsxN
jC1fpKaS3JGwwciJLYZO6tKn4lEWuAyR7exyPWYqRAJQgkTrJr9/0D5vVrVxykc+1dKC1YQpkHHuFdhz
VjA4u0E7STzK/1NWnabfsKfLxBwjxiJoyPC/4j4zlnWmNebdf4AiUDmo1GGqKHE52+8VcWLl8wK6MzlY
nWzbUAeQCcgHUSdvv3QEUzIoLf8c/slGT8XcJ3f+exgPbVBJpb5s6xxO4nMsn93CMokbryIWoB8950Qz
bdWxhuXumog3SMEOWht0uQ==
$
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桁
128ビット (または64進数(base64)43桁
256 ビット) の数は、接続先のホストの公開鍵を、ハッシュ関数 MD5 (または
SHA256)にかけた結果である。この32桁(または43桁)の数を目で確認することに
より、
接続先のホストが正しい(
man-in-the-middle攻撃
が行われていない)ことがわかる。
ホストの公開鍵は、普通、2048 ビット以上あるが、これを人の目で比較するの はつらい。そこで、ハッシュ関数により、ビット数を減らして、人の目で確認 できるようにしている。SSHのプログラムは、公開鍵全体を保存しているが、人 間に表示する時には、ハッシュ値で表示している。
個人ごとに公開鍵での認証機能を利用したほうがよい。
coins では、学外から SSH で接続する時には、パスワードによる認証が使えな い。外部から、SSH で接続するには、公開鍵を使うしかない。 練習問題 sshにおける公開鍵による認証 参照。
130.158.83.243 - - [21/May/2017:17:56:25 +0900] "GET /~yas/coins/liter acy-2017/2017-05-23/index.html HTTP/1.1" 200 61743 "-" "Mozilla/5.0 (M acintosh; Intel Mac OS X 10.11; rv:53.0) Gecko/20100101 Firefox/53.0" 130.158.83.243 - - [21/May/2017:17:56:25 +0900] "GET /~yas/coins/liter acy-2017/2017-05-23/images/crypt-idea.png HTTP/1.1" 404 255 "-" "Mozil la/5.0 (Macintosh; Intel Mac OS X 10.11; rv:53.0) Gecko/20100101 Firef ox/53.0"この例では、一番左に表示されているものは、クライアントの IP アドレスで ある。その他に、日付やどの URL をアクセスしたか、転送したバイト数、 ブラウザの種類も表示されている。
Webブラウザを利用する時には、サーバ側にアクセスログが残されていることを 意識する。
練習問題 学類 Web サーバのアクセス・ログの観察 参照。
$ id
$ whoami
$ groups
$ echo ~
$ ls -ld /
$ ls -ld /home
$ ls -ld /home/ugrad/
・・・中略・・・
$ ls -ld ~
ディレクトリ ~/public_html, ~/public_html/htdocs や ~/public_html/index.html のモードを調べな
さい。
$ ls -ld ~/public_html
$ ls -ld ~/public_html/htdocs
$ ls -l ~/public_html/htdocs/index.html
他の人(WWWページとして公開するために、WWWサーバ・プロセスからのアクセ
スも含む)がアクセスしようとしたらどうなるかを考察しなさい。
その他に、次のファイルやディレクトリのモードを調べなさい。
$ cd ~yas
$ ls -l
$ ls -l literacy-a*
$ lv literacy-a2.txt
$ lv literacy-a3.txt
$
$ cd ~yas
$ ls -l
$ ls -l literacy-a*
$ lv literacy-a4.txt
$ lv literacy-a5.txt
$
$ ls -l file1.txt
-rw-r--r-- 1 yas prof 2 5 10 18:59 file1.txt
$ chmod go-r file1.txt
$ ls -l file1.txt
-rw------- 1 yas prof 2 5 10 18:59 file1.txt
$
go-r
を含めて、様々なモードの設定方法がある。
次の設定方法の意味を確認しなさい。
WWW ページとして公開するファイルのモードはその他(others)に対するアクセ ス許可で r ビットが立っている必要がある。もし、このビットを chmod o-r で落した場合、Web ブラウザでアクセスできなくなる。このことを確かめなさ い。
$ cp sample1.html sample2.html
<アクセス制御のテスト用のファイルを cp コマンドで作成する。>
$ ls -l sample2.html
-rw-r--r-- 1 yas prof 408 5 18 11:11 sample2.html
<Firefoxでアクセス、再読み込み等>
$ chmod o-r sample2.html
$ ls -l sample2.html
-rw-r----- 1 yas prof 408 5 18 11:11 sample2.html
<Firefoxでアクセス、再読み込み等>
$ chmod o+r sample2.html
$ ls -l sample2.html
-rw-r--r-- 1 yas prof 408 5 18 11:11 sample2.html
<Firefoxでアクセス、再読み込み等>
$
同様に、ディレクトリを作成し、その他(others)に対する x ビットを立てたり 落したりしながら、その効果を確認しなさい。
$ cd ~/public_html/htdocs
$ mkdir dir1
$ emacs dir1/file1.html
$ ls -ld dir1
$ ls -l dir1/file1.html
<Firefoxでアクセス、再読み込み等>
$ chmod o-x dir1
$ ls -ld dir1
<Firefoxでアクセス、再読み込み等>
host1$ ssh hostname
Password: (パスワードを打つ。画面には表示されない。)
hostname$
hostname
は、
www
など、接続したいコンピュータの名前を入れる。
実習では、別のコンピュータとしては、次のものを利用しなさい。
$ ssh www.coins.tsukuba.ac.jp
$ ssh pentas-compa.coins.tsukuba.ac.jp
実習室内では、coins.tsukuba.ac.jp を省略できる。
$ ssh www
$ ssh pentas-compa
一番最初に接続する時には、次のような警告(Warning:)が表示される。
crocus40:~ yas$ ssh www
The authenticity of host 'www (130.158.87.1)' can't be established.
RSA key fingerprint is 17:1a:63:a8:0d:82:e3:d6:60:f7:fb:28:1a:19:4e:7b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'www' (RSA) to the list of known hosts.
yas@www's password:
Last login: Wed May 20 21:45:51 2015 from violet-nwa.coins.tsukuba.ac.jp
violet-nwa:~ yas$
この fingerprint は、接続先のホストの公開鍵のハッシュ値である。これが次
のリストに含まれているかを確認してから yes と打ち込みなさい。
遠隔ログインが成功すると、ログイン先でシェルが実行される。シェルのプロ ンプトには、(多くの場合)ホスト名が含まれているので、遠隔ログイン後に は、プロンプトが変化する。シェルを終了(exitコマンド)すると、遠隔ログイ ン自身も終了する(ログアウトする)。
ssh で遠隔ログインした後に、シェルのプロンプトが変わることを確認しなさ い。また、exit コマンドを実行すると、ログアウトできることを確認しなさい。
(sshを実行する前、iTtermを実行した直後。)
$ hostname
(iMac のホスト名が表示される。)
$ ssh www
$ hostname
(www サーバのホスト名が表示される。)
$ exit
$
(sshを実行する前、iTtermを実行した直後。)
$ ifconfig en0
(inet の次に iMac の IP アドレスが表示される。)
$ ssh www
$ ifconfig eth0
(inet の次に www サーバの IP アドレスが表示される。)
$ exit
$
crocus40:~ yas$ ssh www
The authenticity of host 'www (130.158.87.1)' can't be established.
RSA key fingerprint is 17:1a:63:a8:0d:82:e3:d6:60:f7:fb:28:1a:19:4e:7b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'www' (RSA) to the list of known hosts.
yas@www's password:
Last login: Wed May 20 21:45:51 2015 from violet-nwa.coins.tsukuba.ac.jp
violet-nwa:~ yas$
violet-nwa:~ yas$ cd /var/log/httpd/http
violet-nwa:http yas$ pwd
/var/log/httpd/http
violet-nwa:http yas$
access*
の「*
」は、
シェルの
ファイル名置換
の意味である。
violet-nwa:http yas$ ls
(多くのファイルが表示される)
violet-nwa:http yas$ ls access*
(多くのファイルが表示される)
violet-nwa:http yas$ ls access* | tail -1
access_log_20170521
violet-nwa:http yas$ ls -t access* | head -1
access_log_20170521
violet-nwa:http yas$
この例では、access_log_20170521
が最新のものである。
$ lv access上のlsの結果で置き換える
たとえば、上の例では、次のように打つ。
$ lv access_log_20170521
$ tail access上のlsの結果で置き換える
(表示がなされる。)
(しばらく待つ。)
$ tail access上のlsの結果で置き換える
(表示がなされる。)
(しばらく待つ。)
$ tail access上のlsの結果で置き換える
(表示がなされる。)
(しばらく間隔を空けてから)数回 tail コマンドを実行すると、その度に行
が増えているはずである。
たとえば、上の例では、次のように打つ。
$ tail access_log_20170521
$ tail access_log_20170521
$ tail access_log_20170521
$ grep IPアドレス アクセスログのファイル名
たとえば、IP アドレスが 130.158.86.249 であれば、次のように打つ。
$ grep 130.158.86.249 アクセスログのファイル名
ここで「アクセスログのファイル名」は、
練習問題 学類 Web サーバのアクセス・ログの観察
で調べなさい。
たとえば、その練習問題の例では、次のように打つ。
$ grep 130.158.86.249 access_log_20170521
$ tail -f アクセスログのファイル名
ここで「アクセスログのファイル名」は、
練習問題 学類 Web サーバのアクセス・ログの観察
で調べなさい。
たとえば、その練習問題の例では、次のように打つ。
$ tail -f access_log_20170521
-f オプションを指定すると、tail コマンドは終了することなく新しく追加さ
れた行を表示する。この tail コマンドは、自動的には終了しないので、終わっ
たら、
^C (Control+C) で強制終了させる。
violet-nwa:~ yas$ cd /var/log/httpd/https
ssl_access*
$ ls
(多くのファイルが表示される)
$ ls ssl_access*
(多くのファイルが表示される)
$ ls ssl_access* | tail -1
(1つだけ表示される)
$ ls -t ssl_access* | head -1
(1つだけ表示される)
$
$ cat ~/.ssh/known_hosts
www ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAv2S59b8mM56WSiNtdRr692yi1bxSub+k1WFXZIfK
bxqq5ZaMHEZaPK5nyU8ebekSIAb0oQq+pz2emaugnFMByExheM+Od19r2moXo3w4Qk9VejfhY77eEXNa
DS9ipw0u+MgLYQ1eeaVnsJOZ0Ia7TjUF+zPk25aY5TaLTWTiBWBq1eVIqrH6xieStXHbyDBaSoWU5++V
Cy3zYAhWA5ZG+sBq4wr2RYJhpG5PM/aIrT1RKmL3t+JmDTnBb8vyNyNncWrZfPppvnDFhgNUNObvtylI
O2791lrd211rRc6QEc5MBkSnKAQqpGPyBCe0Y9w96peMMTcUQNgVB8kmDJnOIw==
$
ログイン先とログイン元でユーザ名が異なる時には、次のように、-l オプショ ンに続きログイン先のユーザ名を使う。
host1$ ssh remotehost -l user
Password: (パスワードを打つ)
remotehost$
または、「@」の前にログイン先のユーザ名を指定する。
host1$ ssh user@remotehost
Password: (パスワードを打つ)
remotehost$
この -l オプションを利用する方法や @ を利用する方法で遠隔ログインを行っ
てみなさい。(注意:同じ場合でも、あえて指定することもできる。)
MacOSX
$ ls -l /etc/ssh_host_rsa_key.pub
$ cat /etc/ssh_host_rsa_key.pub
$ ssh-keygen -l -f /etc/ssh_host_rsa_key.pub
Linux (www サーバ等)
$ ls -l /etc/ssh/ssh_host_rsa_key.pub
$ cat /etc/ssh/ssh_host_rsa_key.pub
$ ssh-keygen -l -f /etc/ssh_host_rsa_key.pub
$ ls -ld ~/.ssh
<結果省略>
$ ls -l ~/.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/
等。
coins では、学外からの SSH での接続で、パスワードによる認証が使えない。 外部から、SSH で接続するには、公開鍵を使う必要がある。coins のコンピュー タで、以下の手順で公開鍵と秘密鍵の組を作成したら、秘密鍵を ssh のクライ アントにコピーして利用する。
ssh で、 公開鍵暗号を使った利用者認証 を利用しなさい。
まず、ssh-keygen コマンドを使って、公開鍵と秘密鍵の組を生成しなさい。
Enter file in which to save the key (ファイル名)
に対して、「ファイル名」を確認し、Enter (Enter passphrase
に対して、パスフレーズ(パス「ワード」より長い秘密の文字列)を打つ。
empty (空)には絶対にしないこと。
確認のために 2 度打つ。
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/prof/yas/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): パスフレーズ
Enter same passphrase again: パスフレーズ
Your identification has been saved in /home/prof/yas/.ssh/id_rsa.
Your public key has been saved in /home/prof/yas/.ssh/id_rsa.pub.
The key fingerprint is:
e4:93:eb:30:02:63:a3:73:d9:05:44:81:dc:0c:7e:85 yas@crocus14.coins.tsukuba.ac.jp
The key's randomart image is:
+--[ RSA 2048]----+
| ..*+o. |
| .o.E. |
| . o . |
| . . o . |
| = . S |
| o * . o |
|o o o o . |
| o . + |
| . |
+-----------------+
$
$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/prof/yas/.ssh/id_dsa):
Enter passphrase (empty for no passphrase): パスフレーズ
Enter same passphrase again: パスフレーズ
Your identification has been saved in /home/prof/yas/.ssh/id_dsa.
Your public key has been saved in /home/prof/yas/.ssh/id_dsa.pub.
The key fingerprint is:
65:86:35:fa:6d:12:db:c3:35:20:b2:cf:d5:ad:c9:82 yas@crocus14.coins.tsukuba.ac.jp
The key's randomart image is:
+--[ DSA 1024]----+
| . + . |
| * o o . |
| + = . + .|
| B O o + |
| S E B + |
| o o |
| |
| |
| |
+-----------------+
$
生成に成功すると、標準では、~/.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 crocus10
Password:
authorized_keys を作成した後には、ssh で接続する時に次のように
「パスフレーズ passphrase」が聞かれる。
$ ssh crocus10
Enter passphrase for key '/home/prof/yas/.ssh/id_rsa':
MacOSX では、次のように、ウインドウが表示されることがある。
図? MacOSX で ssh 公開秘密鍵のパスフレーズの打ち込み(ssh-agentとキーチェーンアクセスの機能)
coins の iMac で MacOSX が動作している時には、ssh-agent が利用可能になっ
ている。この事を確認しなさい。
ssh-agent が利用可能な場合、次のようにprintenv SSH_AUTH_SOCK
で
/tmp の下のファイル名が表示される。また、ssh-add -l
で、
ssh-agent と接続できる。
$ printenv SSH_AUTH_SOCK
/tmp/launch-IbzuAT/Listeners
$ ssh-add -l
The agent has no identities.
$
ssh-agent が利用できない場合、次のようにprintenv SSH_AUTH_SOCK
でなにも表示されない。また、ssh-add -l
で、ssh-agent と接続でき
ないというエラー・メッセージが表示される。
$ printenv SSH_AUTH_SOCK
(何も表示されない)
$ ssh-add -l
Could not open a connection to your authentication agent.
$
printenv SSH_AUTH_SOCK
でなにも表示されない。また、ssh-add -l
で、ssh-agent と接続でき
ないというエラー・メッセージが表示される。
$ printenv SSH_AUTH_SOCK
(何も表示されない)
$ ssh-add -l
Could not open a connection to your authentication agent.
$
次に、ssh-agent を実行する。
ssh-agent が利用可能な場合、次のようにprintenv SSH_AUTH_SOCK
で
/tmp の下のファイル名が表示される。また、ssh-add -l
で、
ssh-agent と接続できる。
$ ssh-agent bash
$ printenv SSH_AUTH_SOCK
/tmp/launch-IbzuAT/Listeners
$ ssh-add -l
The agent has no identities.
$
うえの例では、端末で別の bash を実行している。
その他に、次のように、同じ bash を使うこのもできる。
$ eval `ssh-agent`
$ printenv SSH_AUTH_SOCK
/tmp/launch-IbzuAT/Listeners
$ ssh-add -l
The agent has no identities.
$
eval を使う方法ではログアウトした時に ssh-agent のプロセスが残ること
がある。そうならないように ログアウト時に明示的に終了させる
ようにする。
$ ssh-agent -k
$ exit
$ ssh-add
鍵の登録
Enter passphrase for /home/prof/yas/.ssh/id_rsa: パスフレーズ
Identity added: /home/prof/yas/.ssh/id_rsa (/home/prof/yas/.ssh/id_rsa)
$ ssh-add -l
鍵が登録されたことの確認
$ ssh www
鍵の利用
$
~/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
$ 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 dgst -sha1 file1.txt
SHA1(file1.txt)= 89e6c98d92887913cadf06b2adb97f26cde4849b
$
coins でも、VPN 機能を提供している。 手引き 9.3節 参照。 この機能を利用しなさい。
$ ls -l file1.txt
(ファイルのグループの表示)
$ id
(自分(プロセス)が属しているグループの表示)
$ chgrp グループ file1.txt
$ ls -l file1.txt
(ファイルのグループの表示)
$
まず、適当な内容を持つテキスト・ファイルを作成しなさい。
$ echo hello > file1
$ ls -l file1
-rw-r--r-- 1 yas prof 6 5 23 22:28 file1
$ cat file1
hello
$
そして、次のような要求を満たすように chmod コマンドを使ってモードを変更
しなさい。提出するファイルには、chmod コマンドをどのように利用したか、
また、その結果 ls -l の表示がどのようになったかを含めなさい。
$ ls -ld dropbox
drwx-wx-wx 2 yas prof 80 5 19 15:28 dropbox
$
送信側は、受信者が読めるモードで、ファイルを作成し、受信者の drop box
ディレクトリの下にコピーする。
$ emacs file-2017-05-23.text
$ ls -l file-2017-05-23.text
-rw-r--r-- 1 yas prof 56353 5 19 15:38 file-2017-05-23.text
$ cp file-2017-05-23.text ~user/dropbox
$
送信者は、このディレクトリから目的の取り出す。cp コマンド等でファイルを
コピーし、元のファイルを rm コマンド等で削除する。
このような drop box を用いて、隣の人、あるいは、その他の友人にファイルを渡しなさい。 同様に、ファイルを受け取りなさい。
$ ls -l file-2017-05-23.text
-rw-r--r-- 1 yas prof 56353 5 19 15:38 file-2017-05-23.text
$ cp file-2017-05-23.text ~
$ rm file-2017-05-23.text
注意: Mac OS X では、このディレクトリは標準で ~/Public/Drop
Box
という名前のディレクトリを用いる。名前に空白が含まれていることに注
意しなさい。このディレクトリの使い方は、次のページに書かれている。
http://support.apple.com/kb/PH13775,Share files using a drop box
http://support.apple.com/kb/PH13775?viewlocale=ja_JP,ドロップボックスを使用してファイルを共有する
~/Public/Drop Box
は、自動的には作
成されない。この練習問題では、このディレクトリを用いても良いし、他の名
前のディレクトリでもよい。
注意: この練習問題では、
インターネット上のファイル・サービス
https://www.dropbox.com/
を用いない。
他の人へのアクセスを防ぐ方法として、ファイル名に乱数(予測されない文字 列)を含める方法がある。この方法を練習してみなさい。
なお、cp コマンド等でコピーした場合には、ps コマンドで引数が表示される ことがある。このことを確認しなさい。ファイル名を秘匿してdrop box に書き 込む時には、ps で表示されない方法を使う必要がある。その方法を考えなさい。
/tmp
など、誰でも書き込みできる場所にファイルを作成すると、その
ファイルの UID 属性はどうなるか調べなさい。新たに実験用のディレクトリを
mkdir コマンドで作成しなさい。そのディレクトリのGID属性を chgrp で変更
し、その中に新たなファイルやディレクトリを作成したら、その GID がどう設
定されるかを確かめなさい。また、既存のファイルをmv コマンドで移動したら
どうなるかを調べなさい。
$ lv ~/.bashrc
$ lv ~/.bashrc
$ host www.coins.tsukuba.ac.jp
www.coins.tsukuba.ac.jp is an alias for violet-nwa.coins.tsukuba.ac.jp.
violet-nwa.coins.tsukuba.ac.jp has address 130.158.87.1
$ ssh 130.158.87.1
<省略>
$ ssh www.coins.tsukuba.ac.jp
$ ssh -p 22 www.coins.tsukuba.ac.jp
$ ssh -p 100 www.coins.tsukuba.ac.jp
$ ssh -o VisualHostKey=yes www.coins.tsukuba.ac.jp
Host key fingerprint is 17:1a:63:a8:0d:82:e3:d6:60:f7:fb:28:1a:19:4e:7b
+--[ RSA 2048]----+
| |
| . . |
|oo... . + . |
|o.+..+ . + . |
| = .... S . |
|+ + . . |
| = E . |
| o. o |
| .. .. . |
+-----------------+
<省略>
急に電源が落ちた時などには、ハードディスクの状態が「ファイル」や「ディ レクトリ」としては正常にアクセスできなくなることがある。「ディスクユー ティリティ.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 が使われることを確認しなさい。
http://www.info-zip.org/
では、ディジタル署名の機能と暗号化機能を利用することが出来る。 これを動作させてみなさい。
$ ls -l mypicture.jpg
-rw-r--r--@ 1 yas prof 169125 5 9 15:36 mypicture.jpg
$
これは、拡張属性 (eXtended attribute) と呼ばれているものである。Unix の
実装によって、使い方が異なる。MacOSX では、次のように ls -l@ や xattr
コマンドで内容を表示することができる。
$ ls -l@ mypicture.jpg
-rw-r--r--@ 1 yas prof 169125 5 9 15:36 mypicture.jpg
com.apple.FinderInfo 32
com.apple.quarantine 29
$ xattr mypicture.jpg
com.apple.FinderInfo
com.apple.quarantine
$ xattr -l mypicture.jpg
com.apple.FinderInfo:
00000000 00 00 00 00 00 00 00 00 00 10 00 00 00 00 00 00 |................|
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000020
com.apple.quarantine: 0046;536b1f7b;Photo\x20Booth;
$
自分が持っているファイルで、拡張属性を持っているものを調べなさい。また、
その内容を ls -l@ や xattr コマンドで調べなさい。
以下の問題、および、回答をテキスト・ファイルに記述し、 レポート提出ページから提出しなさい。
(1) 自分のホーム・ディレクトリとその下にあるファイルについて、次のこと を行いなさい。
$ ls -ld ~
$ cd ~
$ ls -l file523.txt
-rw-r--r-- 1 s1754321 ugrad 4 5 20 10:43 file523.txt
$
このファイルを、coins の「他の利用者」が cat コマンドで読み出そうとした
時に何がおきると考えられるか。簡単に答えなさい。(実際に他の利用者に試
してもらって良い。考えるだけで実際には試さなくても良い。)
(他の人の操作)
$ cd ~s1754321
$ ls -l file523.txt
-rw-r--r-- 1 s1754321 ugrad 4 5 20 10:43 file523.txt
$ cat file523.txt
(他の人の操作)
$ cd ~s1754321
$ ls -l file523.txt
-rw-r--r-- 1 s1754321 ugrad 4 5 20 10:43 file523.txt
$ emacs file523.txt
調べるには、ls -l コマンドとlv コマンド、grep コマンドを使う方法もある。
$ ls -l | lv
$ ls -l | grep rw-r--r--
(他の人の操作)
$ cd ~s1754321
$ cat file523.txt
cat: file523.txt: Permission denied
$
ただし、自分自身は、読み込みもでき、書き込みもできる状態を保ちたい。最
終的には、どのようなモードになるか。ls -l の表示の形式で答えなさい。
(r,w,x,-
の9文字で答えなさい。)
$ chmod 回答
$ ls -l file523.txt
(確認)
$
(2) 練習問題(1113) を行いなさい。 Web サーバが生成しているアクセスログから、自分自身がアクセスした記録を 抜き出しなさい。それには、まず自分が利用しているコンピュータの IP アド レスを調べ、アクセスログからその IP アドレスが含まれている行を抜き出す とよい。アクセスログのうち、「数行」をレポートに含めなさい。
(3) coins の Web サーバ www.coins.tsukuba.ac.jp で使われている SSL の証 明書を観察しなさい。この証明書に含まれている重要な項目を2つ選びなさい。 それぞれ、何を意味するのか、簡単に説明しなさい。
SSLで使われる証明書、 練習問題(1121) SSLの証明書の表示 参照。
(4) 手引きの次の部分を読みなさい。
(5) [加点] 次の課題(a)と(b)の両方を行いなさい。
(a) 次の練習問題を行いなさい。
次の結果をレポートに含めなさい。
注意: この課題で用いるものは、
インターネット上のファイル・サービス
https://www.dropbox.com/
を用いるものではない。
(b) The Unix Super Text の次の部分を読みなさい。
(6) [加点] 関して、次の課題(a)から(3)のうち、3つ以上行いなさい。
(a) sshコマンド、PuTTY、Tera Term、その他の ssh クライアントを用いて、 用いて「公開鍵を用いた認証」により、coins のコンピュータに接続しなさい。 そのことを示すために、レポートには、どのようなプログラムを使ったのか、 公開鍵の生成手順、クライアント側の設定、サーバ側の設定を含めなさい。
学外から coins のコンピュータに接続できる人は、それを行いなさい。
レポートには、ログイン後のコマンドの実行結果を含め、確かに課題が完了し ていることを示しなさい。 練習問題 遠隔ログインによるコマンドの実行 参照。
(b) 学類外のコンピュータを VPN 機能を使って coins のネットワークに接 続しなさい。VPN を経由して、いくつかのサーバに接続し、利用しなさい。
(d) メールリーダ Thunderbird、Mew、または、その他のメール・リーダで、公 開鍵による暗号化されたメールの送受信を行いなさい。また、公開鍵によるディ ジタル署名署名付加と検証を行いなさい。 レポートには、これらのことが実施できたことを示すような、メールの内容(暗 号化された内容等)を含めなさい。また、メールリーダの設定方法の概略、参考 にした資料の出所を含めなさい。
(e) zipコマンド、unzipコマンド、または、MacOSX の「ディスクユーティリ ティ.app (Disk Utility.app) 」をつかって、ファイルを暗号化しなさい。暗 号化されたファイルを、復号しなさい。レポートには、これらのことが実施で きたことを示すような、端末の表示を含めなさい。