npca夏合宿 2014 講義資料

240
NPCA 合宿講義 2014年夏合宿

Upload: hiromu-yakura

Post on 31-May-2015

351 views

Category:

Technology


4 download

DESCRIPTION

灘校パソコン研究部 2014年度夏合宿で行った講義の資料です

TRANSCRIPT

Page 1: NPCA夏合宿 2014 講義資料

NPCA 合宿講義2014年夏合宿

Page 2: NPCA夏合宿 2014 講義資料

アジェンダ

• Linuxをさわってみよう

• Webサーバーを構築してみよう

• Webサーバーを作ってみよう

Page 3: NPCA夏合宿 2014 講義資料

Linuxをさわってみよう

Page 4: NPCA夏合宿 2014 講義資料

Linuxとは

• カーネル / オペレーティングシステムの1つ

• Open Source Software 

• だれでも自由に使える

• Linus Torvaldsが1991年から開発を始めた

Page 5: NPCA夏合宿 2014 講義資料

Linuxディストリビューション

• Linuxをベースとして様々なソフトウェアをまとめたもの

• Linuxカーネル + デスクトップシステムなど

• Androidもディストリビューションの1つという場合もある

Page 6: NPCA夏合宿 2014 講義資料

Linuxディストリビューション

• Debian

• Debian, Ubuntu, KNOPPIX, ...

• Red Hat Enterprise Linux (RHEL)

• Fedora, CentOS, Scientific Linux, ...

• Gentoo Linux, Arch Linux, ...

Page 7: NPCA夏合宿 2014 講義資料

今回使う環境

• Ubuntu Server 14.04 64 bit 

• Amazon EC2 t2.micro 

• RAM: 8GB 

• Tokyo Region

Page 8: NPCA夏合宿 2014 講義資料

SSHをしてみよう

• IP Addresses: http://goo.gl/mCPZSR 

• Username: ubuntu 

• SSH Private Key: http://goo.gl/1mz2Ns 

• Download Credential: npca / ab728b6e

Page 9: NPCA夏合宿 2014 講義資料

SSHをしてみよう

• Windows 

• Putty → めんどくさいのでPoderosa / TeraTermをいれてください

Page 10: NPCA夏合宿 2014 講義資料

SSHをしてみよう• Windows 

• TeraTerm 

Page 11: NPCA夏合宿 2014 講義資料

SSHをしてみよう• Windows 

• Poderosa 

Page 12: NPCA夏合宿 2014 講義資料

SSHをいれてみよう

• Linux / Mac OS X 

• chmod 400 d1ceb583620732b5ff2a037ac2a9e4d6.pem 

• ssh -i d1ceb583620732b5ff2a037ac2a9e4d6.pem ubuntu@<ip addr>

Page 13: NPCA夏合宿 2014 講義資料

シェルを使ってみよう

• シェルとは

• 様々なプログラム(コマンド)へのインターフェース

• プログラマブル

Page 14: NPCA夏合宿 2014 講義資料

シェルを使ってみよう

• Linuxでの操作は基本的にシェルをベースにしたもの

• ファイル操作

• 設定変更

• プログラミング

Page 15: NPCA夏合宿 2014 講義資料

シェルを使ってみよう

• bash (バッシュ)

• 様々なLinuxディストリビューションで使われているシェル

• 今回の環境でもbashが使われている

• 他にもcsh, zshなど

Page 16: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• 基本コマンドを覚えよう

• これが使えないとなにもできない

Page 17: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• はじめに - 様々なエイリアス

• . - 現在いるディレクトリを表す

• .. - 現在いるディレクトリの1つ上のディレクトリを表す

• ~ - ホームディレクトリを表す

Page 18: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• ls - list directory contents 

• ls <ディレクトリ名 / ファイル名>

• ディレクトリの中身を一覧表示

Page 19: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう• ls - list directory contents 

• オプション

• -a .で始まるファイルも表示

• -l 詳細表示

• -h ファイルサイズをわかりやすく表示

Page 20: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう• ls - list directory contents 

• ls -alh ~

total 28Kdrwxr-xr-x 4 ubuntu ubuntu 4.0K Aug 14 15:41 .drwxr-xr-x 3 root root 4.0K Aug 14 15:33 ..-rw-r--r-- 1 ubuntu ubuntu 220 Apr 9 01:03 .bash_logout-rw-r--r-- 1 ubuntu ubuntu 3.6K Apr 9 01:03 .bashrcdrwx------ 2 ubuntu ubuntu 4.0K Aug 14 15:41 .cache-rw-r--r-- 1 ubuntu ubuntu 675 Apr 9 01:03 .profiledrwx------ 2 ubuntu ubuntu 4.0K Aug 14 15:33 .ssh

Page 21: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう• ls - list directory contents 

• ls -alh ~

total 28Kdrwxr-xr-x 4 ubuntu ubuntu 4.0K Aug 14 15:41 .drwxr-xr-x 3 root root 4.0K Aug 14 15:33 ..-rw-r--r-- 1 ubuntu ubuntu 220 Apr 9 01:03 .bash_logout-rw-r--r-- 1 ubuntu ubuntu 3.6K Apr 9 01:03 .bashrcdrwx------ 2 ubuntu ubuntu 4.0K Aug 14 15:41 .cache-rw-r--r-- 1 ubuntu ubuntu 675 Apr 9 01:03 .profiledrwx------ 2 ubuntu ubuntu 4.0K Aug 14 15:33 .ssh

ディレクトリかどうか

Page 22: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう• ls - list directory contents 

• ls -alh ~

total 28Kdrwxr-xr-x 4 ubuntu ubuntu 4.0K Aug 14 15:41 .drwxr-xr-x 3 root root 4.0K Aug 14 15:33 ..-rw-r--r-- 1 ubuntu ubuntu 220 Apr 9 01:03 .bash_logout-rw-r--r-- 1 ubuntu ubuntu 3.6K Apr 9 01:03 .bashrcdrwx------ 2 ubuntu ubuntu 4.0K Aug 14 15:41 .cache-rw-r--r-- 1 ubuntu ubuntu 675 Apr 9 01:03 .profiledrwx------ 2 ubuntu ubuntu 4.0K Aug 14 15:33 .ssh

ファイルサイズ

Page 23: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう• ls - list directory contents 

• ls -alh ~

total 28Kdrwxr-xr-x 4 ubuntu ubuntu 4.0K Aug 14 15:41 .drwxr-xr-x 3 root root 4.0K Aug 14 15:33 ..-rw-r--r-- 1 ubuntu ubuntu 220 Apr 9 01:03 .bash_logout-rw-r--r-- 1 ubuntu ubuntu 3.6K Apr 9 01:03 .bashrcdrwx------ 2 ubuntu ubuntu 4.0K Aug 14 15:41 .cache-rw-r--r-- 1 ubuntu ubuntu 675 Apr 9 01:03 .profiledrwx------ 2 ubuntu ubuntu 4.0K Aug 14 15:33 .ssh

最終更新日時

Page 24: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう• ls - list directory contents 

• ls -alh ~

total 28Kdrwxr-xr-x 4 ubuntu ubuntu 4.0K Aug 14 15:41 .drwxr-xr-x 3 root root 4.0K Aug 14 15:33 ..-rw-r--r-- 1 ubuntu ubuntu 220 Apr 9 01:03 .bash_logout-rw-r--r-- 1 ubuntu ubuntu 3.6K Apr 9 01:03 .bashrcdrwx------ 2 ubuntu ubuntu 4.0K Aug 14 15:41 .cache-rw-r--r-- 1 ubuntu ubuntu 675 Apr 9 01:03 .profiledrwx------ 2 ubuntu ubuntu 4.0K Aug 14 15:33 .ssh

ファイル / ディレクトリ名

Page 25: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう• ls - list directory contents 

• ls -alh ~

total 28Kdrwxr-xr-x 4 ubuntu ubuntu 4.0K Aug 14 15:41 .drwxr-xr-x 3 root root 4.0K Aug 14 15:33 ..-rw-r--r-- 1 ubuntu ubuntu 220 Apr 9 01:03 .bash_logout-rw-r--r-- 1 ubuntu ubuntu 3.6K Apr 9 01:03 .bashrcdrwx------ 2 ubuntu ubuntu 4.0K Aug 14 15:41 .cache-rw-r--r-- 1 ubuntu ubuntu 675 Apr 9 01:03 .profiledrwx------ 2 ubuntu ubuntu 4.0K Aug 14 15:33 .ssh

所有ユーザー 所有グループ

Page 26: NPCA夏合宿 2014 講義資料

ユーザーとグループとは

• ユーザーは1つ以上のグループに所属する

• 1つ1つのユーザーに対して細かく設定するのはめんどくさい

• ユーザーを1つにグループにまとめてやりそのグループに対して設定を適用する

Page 27: NPCA夏合宿 2014 講義資料

ユーザーとグループとは

• id - print real and effective user and group IDs 

• id <username> 

• ユーザのIDやそのユーザーが所属するグループを確認できる

Page 28: NPCA夏合宿 2014 講義資料

ユーザーとグループとは• id - print real and effective user and group IDs 

• id ubuntu

uid=1000(ubuntu) gid=1000(ubuntu)groups=1000(ubuntu),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo), 29(audio),30(dip),44(video),46(plugdev),102(netdev)

Page 29: NPCA夏合宿 2014 講義資料

ユーザーとグループとは• id - print real and effective user and group IDs 

• id ubuntu

uid=1000(ubuntu) gid=1000(ubuntu)groups=1000(ubuntu),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo), 29(audio),30(dip),44(video),46(plugdev),102(netdev)

ユーザー メイングループ

Page 30: NPCA夏合宿 2014 講義資料

ユーザーとグループとは• id - print real and effective user and group IDs 

• id ubuntu

uid=1000(ubuntu) gid=1000(ubuntu)groups=1000(ubuntu),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo), 29(audio),30(dip),44(video),46(plugdev),102(netdev)

所属グループ

Page 31: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう• ls - list directory contents 

• ls -alh ~

total 28Kdrwxr-xr-x 4 ubuntu ubuntu 4.0K Aug 14 15:41 .drwxr-xr-x 3 root root 4.0K Aug 14 15:33 ..-rw-r--r-- 1 ubuntu ubuntu 220 Apr 9 01:03 .bash_logout-rw-r--r-- 1 ubuntu ubuntu 3.6K Apr 9 01:03 .bashrcdrwx------ 2 ubuntu ubuntu 4.0K Aug 14 15:41 .cache-rw-r--r-- 1 ubuntu ubuntu 675 Apr 9 01:03 .profiledrwx------ 2 ubuntu ubuntu 4.0K Aug 14 15:33 .ssh

パーミッション

Page 32: NPCA夏合宿 2014 講義資料

パーミッション

• Permission - 許可,承認

• だれがどのリソース(ファイルやディレクトリなど)にアクセスできるかを設定するもの

• セキュリティの最も基本となる部分

Page 33: NPCA夏合宿 2014 講義資料

パーミッション• 所有ユーザー,所有グループ,全員の3項目に対して設定できる

-rwxrw-r-- 1 ubuntu adm 220 Apr 9 01:03 file

所有ユーザーに対するパーミッション所有グループに対するパーミッション

その他全員に対するパーミッション

Page 34: NPCA夏合宿 2014 講義資料

パーミッション• 読み込み権限,書き込み権限,実行権限の3種類がある

-rwxrw-r-- 1 ubuntu adm 220 Apr 9 01:03 file

読み込み許可書き込み許可

実行許可 読み込み権限 = 4

書き込み権限 = 2

実行権限 = 1

として3桁の数で表すことも

この場合は741

Page 35: NPCA夏合宿 2014 講義資料

パーミッション• まとめると,この場合は

-rwxrw-r-- 1 ubuntu adm 220 Apr 9 01:03 file

• ユーザーubuntuは読み込み,書き込み,実行ができる

• グループadmに所属するユーザーは読み込み,書き込みができる

• その他のユーザーは読み込みができる

Page 36: NPCA夏合宿 2014 講義資料

パーミッション• クイズ

-rw-rw-r-- 1 ubuntu adm 220 Apr 9 01:03 file

• これを3桁の数字で表すと?

• このファイルに書き込みができるユーザーは誰?

Page 37: NPCA夏合宿 2014 講義資料

パーミッション• クイズ

-r-------- 1 ubuntu adm 220 Apr 9 01:03 file

• これを3桁の数字で表すと?

• このファイルに書き込みができるユーザーは誰?

Page 38: NPCA夏合宿 2014 講義資料

パーミッション• クイズ

-r-x--x-wx 1 ubuntu adm 220 Apr 9 01:03 file

• これを3桁の数字で表すと?

• このファイルに書き込みができるユーザーは誰?

Page 39: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• touch - change file timestamps 

• touch <ファイル名> 

• タイムスタンプの変更とかあるけど基本的に空のファイルを作るときにつかう

Page 40: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• touch - change file timestamps 

• testという名前のファイルを作ってlsで確認してみよう

Page 41: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• echo - display a line of text 

• echo <文字列> 

• 引数で与えた文字列を表示するだけの簡単なお仕事

Page 42: NPCA夏合宿 2014 講義資料

リダイレクトを使ってみよう

• 基本的にコマンドの出力は表示されるだけ

• ファイルに保存したい時はどうする?

• リダイレクト!!!

Page 43: NPCA夏合宿 2014 講義資料

リダイレクトを使ってみよう

• コマンド > 保存したいファイル名

• 簡単!

• コマンド >> 保存したいファイル名

• こうすると追記してくれる

Page 44: NPCA夏合宿 2014 講義資料

リダイレクトを使ってみよう

• 逆にファイルから入力したい時はどうする?

• コマンド < 入力ファイル

• JOIなどで必ず使います!!

Page 45: NPCA夏合宿 2014 講義資料

リダイレクトを使ってみよう

• echoを使ってtestの中身をhogehogeにしてみよう

• リダイレクトを使うと簡単

• でもどうやって確認しよう

Page 46: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• cat - concatenate and print files 

• cat <ファイル名> 

• ファイルの中身を出力

Page 47: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• cat - concatenate and print files 

• testの中身を出力してみよう

Page 48: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• head - output the first part of files 

• head <ファイル名>

• ファイルの先頭10行を表示

Page 49: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• head - output the first part of files 

• オプション

• -n <N> 始めのN行を表示 

Page 50: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• head - output the first part of files 

• head -n 15 /var/log/kern.log 

• cat /var/log/kern.logをしてみると違いがわかるはず

• ちなみに/var/log/kern.logはカーネルが出力したメッセージ

Page 51: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• tail - output the last part of files 

• tail <ファイル名>

• ファイルの末尾10行を表示

Page 52: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• tail - output the last part of files 

• オプション

• -n <N> 最後のN行を表示

• -f ファイルを監視して,末尾に追記される度に出力

Page 53: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• tail - output the last part of files 

• tail -f /var/log/auth.log 

• SSHでもう1接続してみると更新されているのがわかるはず

Page 54: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• grep - print lines matching a pattern 

• grep <パターン> <ファイル名>

• ファイルの中からパターンにマッチするものを出力

• ファイル名が省略された場合は標準出力から読み込む

Page 55: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• grep - print lines matching a pattern 

• 正規表現

• パターンに正規表現を使うことでより高度な検索が

• 例えば,IPアドレスの形式にマッチするものを検索とか

Page 56: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• grep - print lines matching a pattern 

• grep ubuntu /var/log/auth.log 

• auth.logの中でubuntuという文字列を含む行だけ出力

Page 57: NPCA夏合宿 2014 講義資料

パイプを使ってみよう

• grepはファイル名を省略したときは,標準入力から読み込む

• grep ubuntu < /var/log/auth.log 

• auth.logの先頭10行の中でubuntuという文字を含む部分を抜き出したい時は?

Page 58: NPCA夏合宿 2014 講義資料

パイプを使ってみよう• さっきのheadとリダイレクトを使えばよさそう!

• head /var/log/auth.log > output_file 

• grep ubuntu output_file 

• grep ubuntu < output_file 

• 正解,でももっと簡単に

Page 59: NPCA夏合宿 2014 講義資料

パイプを使ってみよう

• パイプを使ってみる

• head /var/log/auth.log | grep ubuntu 

• パイプ | を使うと,前のコマンドの出力がそのまま次のコマンドの入力となる

Page 60: NPCA夏合宿 2014 講義資料

パイプを使ってみる

• クイズ

• パイプを使って

• grep ubuntu /var/log/auth.logと同じ出力をする

• コマンドを実行してください

Page 61: NPCA夏合宿 2014 講義資料

パイプを使ってみる

• 答え

• cat /var/log/auth.log | grep ubuntu 

Page 62: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• cp - copy files and directories 

• cp <ファイル名> <新しいファイル名>

• ファイル / ディレクトリをコピーする

Page 63: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• cp - copy files and directories 

• オプション

• -r ディレクトリのときはr(ecursive)オプションが必要

Page 64: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• cp - copy files and directories 

• testファイルをtest_copyファイルにコピーしてみよう

Page 65: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• mv - move (rename) files 

• mv <ファイル名> <新しいファイル名>

• ファイル / ディレクトリを移動する = ファイル名を変更する

Page 66: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• mv - move (rename) files 

• testファイルをtest_newに名前を変更してみよう

Page 67: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• rm - remove files or directories 

• rm <ファイル名>

• ファイル / ディレクトリを削除する

Page 68: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• rm - remove files or directories 

• オプション

• -r ディレクトリのときはr(ecursive)オプションが必要

• -f 有無を言わさず消す!!

Page 69: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• rm - remove files or directories 

• test_copyファイルを削除してみよう

Page 70: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• chmod - change file mode bits 

• chmod <パーミッション> <ファイル名>

• ファイルのパーミッションを変更する

Page 71: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• chmod - change file mode bits 

• オプション

• -r ディレクトリ以下のすべてのファイルを変更したい時は r(ecursive)オプションが必要

Page 72: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• chmod - change file mode bits 

• パーミッションの表記

• 3桁の数字 - 755, 644とか

• 文字列で表記

Page 73: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• chmod - change file mode bits 

• chmod u=rwx file 

• 所有ユーザーにrwx(読み込み,書き込み,実行)権限を付与

Page 74: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• chmod - change file mode bits 

• chmod g+rx file 

• 所有グループに所属するユーザーにいま与えられている権限 + rx(読み込み,実行)権限を付与

Page 75: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• chmod - change file mode bits 

• chmod o-rx file 

• それ以外のユーザーに対していま与えられている権限からr(読み込み)権限を剥奪

Page 76: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• chmod - change file mode bits 

• chmod a=rwx file 

• すべてのユーザーにrwx(読み込み,書き込み,実行)権限を付与

• すべてのユーザーのときはaを省略できる

Page 77: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう• クイズ

• こういうファイルがあります-rw-rw-r-- 1 ubuntu adm 220 Apr 9 01:03 file

Page 78: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう• クイズ

-rw-rw-r-- 1 ubuntu adm 220 Apr 9 01:03 file

• chmod +rw をするとパーミッションはどうなる?

Page 79: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう• クイズ

-rw-rw-r-- 1 ubuntu adm 220 Apr 9 01:03 file

• chmod +rw をするとパーミッションはどうなる?

• 答え 666 (rw-rw-rw-)

Page 80: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう• クイズ

-rw-rw-r-- 1 ubuntu adm 220 Apr 9 01:03 file

• chmod g-wx をするとパーミッションはどうなる?

Page 81: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう• クイズ

-rw-rw-r-- 1 ubuntu adm 220 Apr 9 01:03 file

• chmod g-wx をするとパーミッションはどうなる?

• 答え 644 (rw-r--r--)

Page 82: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう• クイズ

-rw-rw-r-- 1 ubuntu adm 220 Apr 9 01:03 file

• chmod o=wx をするとパーミッションはどうなる?

Page 83: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう• クイズ

-rw-rw-r-- 1 ubuntu adm 220 Apr 9 01:03 file

• chmod o=wx をするとパーミッションはどうなる?

• 答え 663 (rw-rw--wx)

Page 84: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう• クイズ

-rw-rw-r-- 1 ubuntu adm 220 Apr 9 01:03 file

• chmod u+x をするとパーミッションはどうなる?

Page 85: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう• クイズ

-rw-rw-r-- 1 ubuntu adm 220 Apr 9 01:03 file

• chmod u+x をするとパーミッションはどうなる?

• 答え 764 (rwxrw-r--)

Page 86: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• chmod - change file mode bits 

• test_newの書き込み権限を剥奪してみよう

• echo hogehoge > test_newってするとどうなる?

• rm test_newはどうなる?

Page 87: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• chown - change file owner and group 

• chown <ユーザー> <ファイル名>

• ファイルの所有者情報を変更する

Page 88: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• chown - change file owner and group 

• オプション

• -r ディレクトリ以下のすべてのファイルを変更したい時は r(ecursive)オプションが必要

Page 89: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• chown - change file owner and group 

• chown ubuntu file 

• 所有ユーザーがubuntuになる

Page 90: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• chown - change file owner and group 

• chown ubuntu:adm file 

• 所有ユーザーがubuntuになる

• 所有グループがadmになる

Page 91: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• chown - change file owner and group 

• chown ubuntu. file 

• 所有ユーザーがubuntuになる

• 所有グループがubuntuになる

Page 92: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• pwd - print name of current/working directory 

• pwd 

• 現在いるディレクトリの名前がわかる

Page 93: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• wget - The non-interactive network downloader 

• wget <URL> 

• ネットワーク上のファイルを落としてくる

• HTTP / HTTPS / FTP

Page 94: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• wget - The non-interactive network downloader 

• オプション

• -O <ファイル名> 保存するファイル名を設定

• -r URL以下のファイルを全部取ってきてくれる (便利!!)

Page 95: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• wget - The non-interactive network downloader 

• wget http://www.npca.jp/ 

• index.htmlをcatしてみよう

Page 96: NPCA夏合宿 2014 講義資料

基本コマンドを覚えよう

• exit 

• 終了する

Page 97: NPCA夏合宿 2014 講義資料

エディタを使ってみよう

• SSHで作業するときはコンソールで動くエディタを使う

• vim / nano / emacs / ed / acme 

• この講義ではvim / nanoをおすすめします

Page 98: NPCA夏合宿 2014 講義資料

エディタを使ってみよう

• とりあえず起動

• vim 

• あとは自分でがんばってくれ

• http://www15.ocn.ne.jp/~tusr/vim/vim_text0.html

Page 99: NPCA夏合宿 2014 講義資料

エディタを使ってみよう

• vimにはいくつかモードがある

• 挿入モード

• 普通に入力する時のモード

• 押した文字が挿入される

Page 100: NPCA夏合宿 2014 講義資料

エディタを使ってみよう

• vimにはいくつかモードがある

• コマンドモード

• 「開く」「保存」とか普通のエディタだとマウスで行う部分

Page 101: NPCA夏合宿 2014 講義資料

エディタを使ってみよう

• vimにはいくつかモードがある

• ノーマルモード

• 起動直後の状態

• ここからコマンドモードや挿入モードに移行する

Page 102: NPCA夏合宿 2014 講義資料

エディタを使ってみよう

• とりあえず終了する

• :q 

• ノーマルモードで:を打つとコマンドモードになる

• :qはquitの意

Page 103: NPCA夏合宿 2014 講義資料

エディタを使ってみよう

• もう一回起動する

• vim

Page 104: NPCA夏合宿 2014 講義資料

エディタを使ってみよう

• 今度は挿入モードに移行する

• i 

• iと打つと下に-- INSERT --と表示されるはず = 挿入モード

• テキストを編集できるように

Page 105: NPCA夏合宿 2014 講義資料

エディタを使ってみよう

• ノーマルモードに戻る

• Esc 

• 下の-- INSERT --が消える

Page 106: NPCA夏合宿 2014 講義資料

エディタを使ってみよう

• 文字の削除

• ノーマルモードでxと打つと文字が削除される

• 悪いことは言わないのでとりあえずBackspaceとDelを使っとけ

• 挿入モード中で使えるので楽

Page 107: NPCA夏合宿 2014 講義資料

エディタを使ってみよう

• カーソル移動

• ノーマルモードでh, j, k, lと打つとカーソルが移動する

• 悪いことは言わないのでとりあえずカーソルキーを使っとけ

• 挿入モード中で使えるので楽

Page 108: NPCA夏合宿 2014 講義資料

エディタを使ってみよう

• ファイルに保存する

• ノーマルモードに戻ってから

• :w <ファイル名>

• 上書き保存の時はファイル名を省略できる

Page 109: NPCA夏合宿 2014 講義資料

エディタを使ってみよう

• ファイルを開く

• :o <ファイル名>

• シェルから起動するときにvim <ファイル名>としても一緒

Page 110: NPCA夏合宿 2014 講義資料

エディタを使ってみよう

• 上書き保存して終了

• :wq 

• 保存せず終了

• :q!

Page 111: NPCA夏合宿 2014 講義資料

エディタを使ってみよう

• まとめ

• ビジュアルモードとかもある

• ある程度のコマンドを覚えるまでがんばるのみ

Page 112: NPCA夏合宿 2014 講義資料

コンパイルしてみよう• これでコードを書く環境が整った!!

• vim main.cで以下のコードを書いてみよう#include <stdio.h>

int main(void){printf(“Hello, world!\n”);return 0;

}

Page 113: NPCA夏合宿 2014 講義資料

コンパイルしてみよう

• コンパイルしてみよう

• どうやって?

Page 114: NPCA夏合宿 2014 講義資料

コンパイルしてみよう

• gcc - GNU project C and C++ compiler 

• gcc <ファイル名>

• C言語のソースコードをコンパイルする

Page 115: NPCA夏合宿 2014 講義資料

コンパイルしてみよう• gcc - GNU project C and C++ compiler 

• オプション

• -o <ファイル名> 出力するファイル名 (指定しないとa.out)

• -O1, -O2, -O3 最適化レベル (つけると自動的に高速化)

• その他にもいっぱい重要なものがある

Page 116: NPCA夏合宿 2014 講義資料

コンパイルしてみよう

• gcc main.c -o main 

• エラーが出たら修正しましょう

Page 117: NPCA夏合宿 2014 講義資料

コンパイルしてみよう

• ./main 

• ファイルを実行するときは./などを付けないといけない

• 付けていないとコマンドだと思って探しに行く

• コマンドじゃないことを知らせればいいので/home/ubuntu/mainとかでも実行できる

Page 118: NPCA夏合宿 2014 講義資料

休憩

Page 119: NPCA夏合宿 2014 講義資料

Webサーバーを構築してみよう

Page 120: NPCA夏合宿 2014 講義資料

そもそもサーバーって?

• サービスを提供するもの

• ビールサーバー→ビールを提供する

• Webサーバー→Webを提供する(?

Page 121: NPCA夏合宿 2014 講義資料

Webサーバーって?

• Webコンテンツを提供するソフトウェア

• ユーザーからのあるファイルを見たいというリクエストを受けそのファイルがあれば返す

• HTTPというプロトコルを用いている

Page 122: NPCA夏合宿 2014 講義資料

Webサーバーって?

• すべてのWebコンテンツはWebサーバーで提供されている

• GoogleにもNPCAにもWebサーバーがあるからWebサイトが提供できている

• 一般的には80番ポートを使うことが多い

Page 123: NPCA夏合宿 2014 講義資料

Webサーバーと話してみよう• NPCAのWebサーバーに接続してHTTPで話してみよう

• nc www.npca.jp 80 

• 繋がったら以下のとおり入力 (最後に改行2回)

GET / HTTP/1.1

Host: www.npca.jp

Page 124: NPCA夏合宿 2014 講義資料

Webサーバーと話してみよう

• たくさんの文字が流れてきたはず

• 大部分はhttp://www.npca.jp/の中身

• 最初の方にServer: Apacheという文字列があるはず

• NPCAのWebサーバーはApacheというソフトウェア

Page 125: NPCA夏合宿 2014 講義資料

Webサーバーを構築してみよう

• このApacheを構築してみよう

• とりあえずApacheをインストールしてみよう

Page 126: NPCA夏合宿 2014 講義資料

aptを使ってみよう

• どうやってインストールする?

• 公式サイトからインストーラーを落としてくる?

Page 127: NPCA夏合宿 2014 講義資料

aptを使ってみよう

• パッケージマネージャを使ってみよう

• コマンドラインから簡単にインストールできるシステムが用意されている

• ソフトウェアをパッケージにまとめて提供している

Page 128: NPCA夏合宿 2014 講義資料

aptを使ってみよう

• パッケージマネージャを使ってみよう

• Ubuntuの場合は apt を使うのがメジャー

• ディストリビューションによって異なる

Page 129: NPCA夏合宿 2014 講義資料

aptを使ってみよう

• apt-get - APT package handling utility 

• apt-get <コマンド> <オプション>

Page 130: NPCA夏合宿 2014 講義資料

aptを使ってみよう

• apt-get - APT package handling utility 

• apt-get install <パッケージ名>

• パッケージをインストールする

Page 131: NPCA夏合宿 2014 講義資料

aptを使ってみよう

• apt-get - APT package handling utility 

• apt-get remove <パッケージ名>

• パッケージをアンインストールする

Page 132: NPCA夏合宿 2014 講義資料

aptを使ってみよう

• apt-get - APT package handling utility 

• apt-get purge <パッケージ名>

• 設定ファイルを含めてアンインストールする

Page 133: NPCA夏合宿 2014 講義資料

aptを使ってみよう

• apt-get - APT package handling utility 

• apt-get update 

• 最新のパッケージ情報をインターネットから取得する

• どのバージョンのパッケージが入手可能なのかなど

Page 134: NPCA夏合宿 2014 講義資料

aptを使ってみよう

• apt-get - APT package handling utility 

• apt-get upgrade 

• インストール済みのパッケージを最新のバージョンに更新

Page 135: NPCA夏合宿 2014 講義資料

aptを使ってみよう

• apt-get - APT package handling utility 

• apt-get autoremove 

• 不要なパッケージを自動的に削除

Page 136: NPCA夏合宿 2014 講義資料

aptを使ってみよう

• Apacheをインストールしてみよう

• Apacheのパッケージ名はapache2

• apt-get install apache2

Page 137: NPCA夏合宿 2014 講義資料

aptを使ってみよう

• こんなエラーが出るはずE: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?

• 管理者権限が必要

Page 138: NPCA夏合宿 2014 講義資料

rootとは

• 管理者アカウントの名前はroot

• WindowsでいうAdministrator

• システムに変更を加えるときにはrootの権限が必要

Page 139: NPCA夏合宿 2014 講義資料

rootとは

• sudo - execute a command as another user 

• sudo <コマンド>

• コマンドをrootとして実行できる

Page 140: NPCA夏合宿 2014 講義資料

rootとは

• sudo - execute a command as another user 

• sudo id 

uid=0(root) gid=0(root) groups=0(root)

Page 141: NPCA夏合宿 2014 講義資料

aptを使ってみよう

• sudo apt-get install apache2 

• 確認のメッセージが出るので y を押す

• これでインストールができるはず

Page 142: NPCA夏合宿 2014 講義資料

Webサーバーを構築してみよう

• ブラウザでアクセスしてみよう

• IPアドレスはSSHと一緒

• これで繋がるはず

Page 143: NPCA夏合宿 2014 講義資料

Webサーバーを構築してみよう

• サーバー構築で一番重要なこと

• 問題解決能力

• 問題の原因を切り分けて修正すること

Page 144: NPCA夏合宿 2014 講義資料

つながらない問題

• とりあえずサーバーにつながってない状況

• 原因として考えられることは?

• 思いつく限り挙げてみよう

Page 145: NPCA夏合宿 2014 講義資料

繋がらない問題

• そもそもこの部屋がインターネットにつながってない

• サーバーの電源が落ちた

• サーバーがインターネットにつながってない

Page 146: NPCA夏合宿 2014 講義資料

繋がらない問題

• Apacheが起動していない

• service apache2 statusで確認してみよう

• ネットワーク設定に何か問題がある

Page 147: NPCA夏合宿 2014 講義資料

繋がらない問題

• とりあえずサーバー内部から接続してみる

• nc localhost 80 

GET / HTTP/1.1

Host: localhost

Page 148: NPCA夏合宿 2014 講義資料

繋がらない問題

• なんかいろいろ返ってきた

• サーバー内部からは繋がる

• 外部からは繋がらない

Page 149: NPCA夏合宿 2014 講義資料

繋がらない問題

• ファイアーウォール

• 外部との接続を遮断するソフトウェア

• 侵入や情報漏洩を防ぐのに重要

Page 150: NPCA夏合宿 2014 講義資料

繋がらない問題

• ファイアーウォールに対してWebサーバーは自分が構築したものだから遮断しなくてよいと設定してやらなければならない

• 現在 Ubuntu で使われているソフトウェアは ufw

Page 151: NPCA夏合宿 2014 講義資料

繋がらない問題

• sudo ufw allow http 

• これでhttpの接続(tcp 80)を許可する

• もう一回ブラウザからアクセスしてみよう

Page 152: NPCA夏合宿 2014 講義資料
Page 153: NPCA夏合宿 2014 講義資料

Apacheの設定を変更してみよう

• とりあえずApacheの設定をいじってみよう

• 公開するディレクトリを変更しよう

Page 154: NPCA夏合宿 2014 講義資料

Apacheの設定を変更してみよう• Apacheの設定は/etc/apache2/以下にある

• 基本的な設定は/etc/apache2/apache2.conf

• 細かな機能(モジュール)についての設定は/etc/apache2/mods-available/にある

• mods-enabled/にシンボリックリンク(ショートカット)を作ると有効化される

Page 155: NPCA夏合宿 2014 講義資料

Apacheの設定を変更してみよう

• Apacheの設定は/etc/apache2/以下にある

• それぞれのWebサイトに関する設定は/etc/apache2/sites-available/にある

• sites-enabled/にシンボリックリンクを作ると有効化される

• 今回変更するのは/etc/apache2/sites-available/000-default.conf

Page 156: NPCA夏合宿 2014 講義資料

Apacheの設定を変更してみよう

• まずホームディレクトリでmkdir www

• そして~/wwwを公開するディレクトリに設定する

Page 157: NPCA夏合宿 2014 講義資料

Apacheの設定を変更してみよう

• root権限で/etc/apache2/sites-available/000-default.confを開く

• DocumentRoot /var/www/htmlを

• DocumentRoot /home/ubuntu/wwwに変更する

Page 158: NPCA夏合宿 2014 講義資料

Apacheの設定を変更してみよう

• root権限で/etc/apache2/sites-available/000-default.confを開く

• DocumentRootの下に以下の項目を追加

<Directory /home/ubuntu/www>Require all granted

</Directory>

Page 159: NPCA夏合宿 2014 講義資料

Apacheの設定を変更してみよう

• Apacheに設定を適用する

• root権限でservice apache2 reload

Page 160: NPCA夏合宿 2014 講義資料

HTMLを書いてみよう

• とりあえずWebサーバーは建てた

• じゃあWebコンテンツを置いてみよう

Page 161: NPCA夏合宿 2014 講義資料

HTMLを書いてみよう

• HTML - Hyper Text Markup Language 

• Web上のコンテンツは基本的にHTMLで書かれている

Page 162: NPCA夏合宿 2014 講義資料

HTMLを書いてみよう• vim /home/ubuntu/www/index.html 

<!DOCTYPE html><html><head><title>Hello, world!</title></head><body><p>Hello, world!</p></body></html>

Page 163: NPCA夏合宿 2014 講義資料

HTMLを書いてみよう

• 細かな説明は省略

• 基本的に「<タグ>中身</タグ>」が入れ子構造になっている

• ブラウザでアクセスして表示されているか見てみよう

Page 164: NPCA夏合宿 2014 講義資料

HTMLを書いてみよう

• <p>となっている部分を<h1>や<h6>にすると大きさが変わる

• <marquee>がアツい

• これ以上の装飾にはCSSを勉強する必要がある

Page 165: NPCA夏合宿 2014 講義資料

休憩

Page 166: NPCA夏合宿 2014 講義資料

Webサーバーを作ってみよう

Page 167: NPCA夏合宿 2014 講義資料

はじめに

• GitHubアカウントは持っていますか

• 持っていない人は1分以内に作ってください

• 持ってる人は2段階認証を有効にすることをおすすめします

Page 168: NPCA夏合宿 2014 講義資料

今回使う材料がこちらです

• https://github.com/hiromu/simple-web-server 

• とりあえずforkする

• 人のリポジトリに改変を加えて公開したいときはforkを使うと便利

Page 169: NPCA夏合宿 2014 講義資料

SSH Public Keyの登録

• サーバーからGitHubにアクセスできるようにSSHキーを登録する

• ssh-keygen 

• cat ~/.ssh/id_rsa.pub → コピー

Page 170: NPCA夏合宿 2014 講義資料

SSH Public Keyの登録• SettingsのSSH KeysでAdd SSH Key

• https://help.github.com/articles/generating-ssh-keys

Page 171: NPCA夏合宿 2014 講義資料

Gitの設定

• git config --global user.name <名前>

• git config --global user.email <メールアドレス>

Page 172: NPCA夏合宿 2014 講義資料

Git cloneしてみよう

• ソースコードをcloneする

• ホームディレクトリでgit clone [email protected]:<ユーザー名>/simple-web-server.git

Page 173: NPCA夏合宿 2014 講義資料

Web Serverを起動してみよう

• とりあえずWeb Serverを起動するときにめんどくさいのでファイアーウォールを無効化する

• sudo ufw disable 

• ※よい子は真似しないでね

Page 174: NPCA夏合宿 2014 講義資料

Web Serverを起動してみよう

• cd simple-web-server 

• make 

• ./server <適当なポート>

• ブラウザで http://<IPアドレス>:<ポート>/ にアクセスしてみる

Page 175: NPCA夏合宿 2014 講義資料

makeとは

• makeと打つと自動的にビルドしてくれた

• makeはコンパイルを自動化するソフトウェア

• Makefileに基づいてビルドしてくれる

Page 176: NPCA夏合宿 2014 講義資料

makeとは• cat Makefile

CC = gcc

CFLAGS = -WallLDFLAGS =

TARGET = serverOBJS = main.o server.o util.o

all: $(TARGET)

server: $(OBJS) $(CC) $(LDFLAGS) -o $@ $(OBJS)

.c.o: $(CC) $(CFLAGS) -c $< -o $@

clean: rm $(TARGET) $(OBJS)

設定などを変数に代入CC: ビルドにはgccを使うCFLAGS: コンパイル時にはCFLAGSをオプションとするLDFLAGS: リンク時にはLDFLAGSをオプションとする

デフォルトで$TARGETをビルド

serverをビルドするには$OBJSが必要

.cファイルを.oに変換するには以下の通り

オプションでcleanが指定されたら$TARGETと$OBJを削除

Page 177: NPCA夏合宿 2014 講義資料

makeとは

• makeの前に./configureを実行することで環境に合わせたMakefileを自動生成するものも

• make, automake, autoconfなどは便利だけれども闇でもある

Page 178: NPCA夏合宿 2014 講義資料

Web Serverを作ってみよう

• まずHTTPのプロトコルについて知ろう

• Web ServerはHTTPに則って通信を行う

• プロトコルを知らないとそもそも実装できない

Page 179: NPCA夏合宿 2014 講義資料

HTTPについて学ぼう

• 基本的にリクエストとレスポンスがある

• ブラウザがリクエストを送りサーバーがそれに対してレスポンスを送る

Webブラウザ Webサーバーリクエスト

レスポンス

Page 180: NPCA夏合宿 2014 講義資料

HTTPについて学ぼう

• リクエストは以下の形式に則っている

• <HTTPメソッド> <URI> <バージョン>

<ヘッダー名>: <ヘッダー値>

<本文>

Page 181: NPCA夏合宿 2014 講義資料

HTTPについて学ぼう

• HTTPメソッドとは

• GET / POST / HEAD / PUT / DELETE 

• リクエストがどんな内容かということを示している

• 一般的に使うのはGETとPOST

Page 182: NPCA夏合宿 2014 講義資料

HTTPについて学ぼう

• HTTPメソッドとは

• GET: Web上のリソースを取得(GET)するときに使う

• POST: Webサーバーに情報を送信(POST)するときに使う

• ログインフォームとかファイルアップロードとか

Page 183: NPCA夏合宿 2014 講義資料

HTTPについて学ぼう

• URIとは

• Uniform Resource Identifier 

• どんなリソースが欲しいかを指定する

Page 184: NPCA夏合宿 2014 講義資料

HTTPについて学ぼう

• URIとは

• 例えば http://www.npca.jp/about/ にアクセスするとURIには /about/ が入る

Page 185: NPCA夏合宿 2014 講義資料

HTTPについて学ぼう

• HTTPバージョンとは

• HTTP/<メジャーバージョン>.<マイナーバージョン>の形式

• 現在は殆どがHTTP/1.1

• HTTP/2.0が策定中

Page 186: NPCA夏合宿 2014 講義資料

HTTPについて学ぼう

• HTTPヘッダーとは

• 付随する様々な情報を送る

• ここに入る情報はユーザーが偽装できる!!

• 代表的なもののみ紹介

Page 187: NPCA夏合宿 2014 講義資料

HTTPについて学ぶ

• Hostヘッダー

• Host: <ホスト名>という形式

• http://npca.jp/about/ にアクセスするとHost: npca.jpとなる

Page 188: NPCA夏合宿 2014 講義資料

HTTPについて学ぶ

• Cookieヘッダー

• Cookie: <名前>=<値>; <名前>=<値>;という形式

• ログイン情報などユーザーに保存させている情報が送られる

Page 189: NPCA夏合宿 2014 講義資料

HTTPについて学ぶ

• User-Agentヘッダー

• ユーザーがどのようなブラウザを使っているか送る

• Firefox 15 / WindowsだとMozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20120427 Firefox/15.0a1

• ユーザーが偽装できるということをお忘れなく

Page 190: NPCA夏合宿 2014 講義資料

HTTPについて学ぶ

• HTTPの本文とは

• POSTリクエストのときに送信する内容が含まれる

• ファイルアップロードだとmultipartというものが使われたり

• ヘッダーとは空行で区切られている

Page 191: NPCA夏合宿 2014 講義資料

HTTPについて学ぶ• リクエストまとめ

• http://www.npca.jp/about/ にアクセスすると以下のようになる

GET /about/ HTTP/1.1Host: www.npca.jpUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 Chrome/36.0.1985.125

Page 192: NPCA夏合宿 2014 講義資料

HTTPについて学ぶ

• クイズ

• http://www.google.com/#q=test にアクセスするとどうなる?

• CookieにSSID: AVK9Q7TrKu7WUyGcNと入っていたら?

Page 193: NPCA夏合宿 2014 講義資料

HTTPについて学ぶ• 答え

GET /#q=test HTTP/1.1Host: www.google.comUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36Cookie: SSID=AVK9Q7TrKu7WUyGcN

Page 194: NPCA夏合宿 2014 講義資料

HTTPについて学ぶ

• レスポンス

• <HTTPバージョン> <ステータスコード> <メッセージ>

<ヘッダー名>: <ヘッダー値>

<本文>

Page 195: NPCA夏合宿 2014 講義資料

HTTPについて学ぶ

• HTTPバージョン

• さっきと同じ

• HTTP/1.1

Page 196: NPCA夏合宿 2014 講義資料

HTTPについて学ぶ

• ステータスコードとメッセージ

• 404 Not Foundという文字列に見覚えが...?

Page 197: NPCA夏合宿 2014 講義資料

HTTPについて学ぶ

• アクセスについての状況を3桁の数字とメッセージで示す

• 100番台 ~ 500番台まで

Page 198: NPCA夏合宿 2014 講義資料

HTTPについて学ぶ

• 200 OK 

• 問題なくアクセスが完了した

Page 199: NPCA夏合宿 2014 講義資料

HTTPについて学ぶ

• 301 Moved Permanently 

• 恒久的に移動した

• 302 Found 

• リダイレクト

Page 200: NPCA夏合宿 2014 講義資料

HTTPについて学ぶ• 400 Bad Request 

• 不正なリクエスト

• 401 Unauthorized 

• 認証が必要である

• Basic認証などの際に表示される

Page 201: NPCA夏合宿 2014 講義資料

HTTPについて学ぶ• 403 Forbidden 

• 禁止されている

• パーミッションの問題などの時

• 404 Not Found 

• 見つからない

Page 202: NPCA夏合宿 2014 講義資料

HTTPについて学ぶ

• 500 Internal Server Error 

• サーバー内部のエラー

• 503 Service Unavailable 

• サーバーが落ちている

Page 203: NPCA夏合宿 2014 講義資料

HTTPについて学ぶ

• HTTPヘッダー

• 基本的にリクエストと同じ

• 代表的なもののみ紹介

Page 204: NPCA夏合宿 2014 講義資料

HTTPについて学ぶ

• Dateヘッダー

• 時刻を返す

• 複数形式での時刻の表現が許容されている

Page 205: NPCA夏合宿 2014 講義資料

HTTPについて学ぶ

• Serverヘッダー

• Serverのソフトウェア情報などが入っている

• Apache, nginxなど

• ここにバージョンが含まれているとセキュリティ上のリスクがあると言われている

Page 206: NPCA夏合宿 2014 講義資料

HTTPについて学ぶ

• Locationヘッダー

• 301, 302, 307などでリダイレクトするときにリダイレクト先を示す

Page 207: NPCA夏合宿 2014 講義資料

HTTPについて学ぶ

• HTTP 本文

• HTMLの中身など

• ヘッダーとは空行で区切られている

Page 208: NPCA夏合宿 2014 講義資料

HTTPについて学ぶ• レスポンスまとめ

• http://www.npca.jp/about/ にアクセスすると以下のようになるHTTP/1.1 200 OKHost: www.npca.jpDate: Thu, 14 Aug 2014 22:20:09 GMTServer: Apache

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE html><html lang="ja" xmlns="http://www.w3.org/1999/xhtml"> <!-- id: RS-02~a --> <head> <meta charset="utf-8" />.....

Page 209: NPCA夏合宿 2014 講義資料

HTTPについて学ぶ• レスポンスまとめ

• http://www.npca.jp/about_/ にアクセスすると以下のようになるHTTP/1.1 404 Not FoundHost: www.npca.jpDate: Thu, 14 Aug 2014 22:20:09 GMTServer: Apache

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE html><html lang="ja" xmlns="http://www.w3.org/1999/xhtml"> <!-- id: RS-02~a --> <head> <meta charset="utf-8" />.....

Page 210: NPCA夏合宿 2014 講義資料

HTTPについて学ぶ• レスポンスまとめ

• http://npca.jp/ にアクセスすると以下のようになる

HTTP/1.1 301 Moved PermanentlyDate: Thu, 14 Aug 2014 22:23:50 GMTServer: ApacheLocation: http://www.npca.jp/

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"><html><head><title>301 Moved Permanently</title>.....

Page 211: NPCA夏合宿 2014 講義資料

HTTPについて学ぶ

• これで君もバイリンガルだ!!

• HTTPでサーバーと会話してみよう

• ncでGoogleにアクセスしてみよう

• ncでwww.npca.jpにアクセスしてみよう

Page 212: NPCA夏合宿 2014 講義資料

Web Serverを作ってみよう

• まず挙動を理解しよう

• ソースコードリーディング

Page 213: NPCA夏合宿 2014 講義資料

ソースコードを読んでみよう

• 3つのファイルからなる

• main.c: Webサーバーとしての基本的な部分

• server.c: アクセスがあるとここが呼ばれる

• util.c: 便利な関数など

Page 214: NPCA夏合宿 2014 講義資料

ソースコードを読んでみよう

• main.c 

• ちょっと難しいかも

• 基本的には指定されたポートでアクセスを待ちアクセスがあればhttp_server()を呼ぶ

Page 215: NPCA夏合宿 2014 講義資料

ソースコードを読んでみる

• server.c 

• まずhttp_server()を見る

• 始めからutil.cのread_until()を読んでいる

Page 216: NPCA夏合宿 2014 講義資料

ソースコードを読んでみる

• util.c 

• read_until()とはなにか

• 細かい実装は置いておいて

• 指定された文字が来るまで入力を読み込む

Page 217: NPCA夏合宿 2014 講義資料

ソースコードを読んでみる

• server.c 

• まずスペースに達するまでmethodに文字を読み込む

• 読み込まれた文字がGETかPOSTでなければutil.cのresponse_header(“Not Implemented”)を呼ぶ

Page 218: NPCA夏合宿 2014 講義資料

ソースコードを読んでみる

• util.c 

• response_header() 

• まず現在時刻を取得してasctimeで文字列に変換する

Page 219: NPCA夏合宿 2014 講義資料

ソースコードを読んでみる

• util.c 

• response_header() 

• 引数に応じてHTTP/1.1 <ステータスコード> <メッセージ>を出力する

Page 220: NPCA夏合宿 2014 講義資料

ソースコードを読んでみる

• util.c 

• response_header() 

• Date: <現在時刻>を出力する

• Server: <DEFINEされたSERVER_STRING>を出力する

Page 221: NPCA夏合宿 2014 講義資料

ソースコードを読んでみる

• server.c 

• 次のスペースに達するまでURIに読み込み

• 256文字を超えるか正しく読み込めなければresponse_header(“Request-URI Too Long”)を呼ぶ

Page 222: NPCA夏合宿 2014 講義資料

ソースコードを読んでみる

• server.c 

• 次のスペースに達するまでHTTP Versionに読み込み

• HTTP/1.1でなければ

response_header(“Version Not Supported”)を呼ぶ

Page 223: NPCA夏合宿 2014 講義資料

ソースコードを読んでみる

• server.c 

• 空行に達するまでheaderを読み込む

• headerの行に:が含まれていなければresponse_header(“Bad Request”)を呼ぶ

Page 224: NPCA夏合宿 2014 講義資料

ソースコードを読んでみる

• server.c 

• headerが終わればHTTP Methodに合わせてget()かpost()を呼ぶ

Page 225: NPCA夏合宿 2014 講義資料

Webサーバーを作ってみよう

• とりあえず現在の出力の最後にHello, world!と出力されるようにしてみよう

• get()を変更してみよう

• 変更した後はmakeしてserverを起動

Page 226: NPCA夏合宿 2014 講義資料

Webサーバーを作ってみよう

• 150行目にprintf(“Hello, world!\n”);を入れればOK

Page 227: NPCA夏合宿 2014 講義資料

commitしてみよう

• 完成したらgit commitしてみよう

• git commit -a -m <コミットメッセージ>

• コミットメッセージは適当でいい

• でもそのメッセージを見ればどんな変更かわかるように!!!

Page 228: NPCA夏合宿 2014 講義資料

GitHubにpushしてみよう

• git push origin master 

• これでGitHubに変更が適用されたはず

• ブラウザでリポジトリを見てみよう

Page 229: NPCA夏合宿 2014 講義資料

Webサーバーを作ってみよう

• アクセスカウンタを実装してみよう

• アクセスがある度にカウンタを+1して表示する

Page 230: NPCA夏合宿 2014 講義資料

Webサーバーを作ってみよう

• アクセスカウンタを実装してみよう

• アクセスごとにfork()しているので変数だと共有されない

• ファイルを使って記録するなどしないといけない

Page 231: NPCA夏合宿 2014 講義資料

Webサーバーを作ってみよう

• アクセスカウンタを実装してみよう

• paramsにreset=trueと入っていたらカウンタをリセットするように変えてみよう

• strstr()などが使えるかも

• 完成したらcommit

Page 232: NPCA夏合宿 2014 講義資料

Webサーバーを作ってみよう

• アクセスカウンタを実装してみよう

• paramsにreset=%dと入っていたらカウンタを与えられた数値にリセットするように変えてみよう

• util.cのparse_params()を使ってみよう

• 完成したらcommit

Page 233: NPCA夏合宿 2014 講義資料

Webサーバーを作ってみよう

• ログインシステムを実装してみよう

• Cookieにadmin: trueと入っていたら別の文字列を表示するように実装してみよう

• util.cのparse_cookies()を使ってみよう

• 完成したらcommit

Page 234: NPCA夏合宿 2014 講義資料

Webサーバーを作ってみよう

• ログインシステムを実装してみよう

• POSTアクセスでユーザー名とパスワードを送るように実装してみよう

• まずformタグをGETリクエストで表示する

Page 235: NPCA夏合宿 2014 講義資料

Webサーバーを作ってみよう

<form method=‘POST’><input type=‘text’ name=‘user’ /><input type=‘password’ name=‘pass’ /><input type=‘submit’ value=’login’ />

</form>

Page 236: NPCA夏合宿 2014 講義資料

Webサーバーを作ってみよう

• ログインシステムを実装してみよう

• 次にpost()の中で送られたデータを受け取ってみよう

• postの中でscanfなどで1行読み取ってparse_params()に投げればよい

Page 237: NPCA夏合宿 2014 講義資料

Webサーバーを作ってみよう

• ログインシステムを実装してみよう

• 送られてきたユーザー名とパスワードが一致すればSet-Cookieヘッダーでadmin: trueを設定する

• その後に302でGETメソッドに転送する

• 完成したらcommit

Page 238: NPCA夏合宿 2014 講義資料

Webサーバーを作ってみよう

• ログイン認証は難しかったかも

• とりあえずHTTPの仕組みやプロトコルの概念をわかってもらえればよい

• ”””C言語の文字列処理は闇”””

Page 239: NPCA夏合宿 2014 講義資料

さいごに

• サーバーを壊してみよう

• sudo rm -rf --no-preserve-root / 

• 貴重な体験!!!

• どういう状況になるのか体感

Page 240: NPCA夏合宿 2014 講義資料

さいごに

• サーバーを壊してみよう

• -bash: /bin/ls: No such file or directory 

• SSH接続を切ったが最後二度とつながることはない