セプキャン1日目

会場まで


暑さのせい?でスマホの動作が遅すぎて使えないとか、新大阪駅で軽く迷って、
事前に予定してた他の参加者の方々との待ち合わせにギリギリとか…。
いくつか問題があったもののなんとか到着。


今回セプキャンでGentooがよく話題になってるのを知ってる人も多いと思いますが…。
会場へ移動中、地下鉄で、無線拾うとGentooAPなるものがあった!始まる前からGentooネタが仕込まれてたとか…。
あとは‥大荷物で、タブレット OR スマホ 持ってる人が全員セプキャン参加者に見える電車内。あの人も参加者?あれ、こっちも?向こうも!?みたいな。

昼食会

受付が済んだら、チュータさんか講師+参加者3名ずつ1テーブルで昼食。
一緒になったのが、ネットワーククラスのチュータさんで、事前準備だとか、チュータ応募のことについて聞けたのがよかった。
とりあえず…ネットワーククラスのチュータは大変だそうです…。(地獄組と天国組があるそうで…)

コース共通基礎

開講式終了後に、セキュリティ・プログラミング両コース共通の講義。

バカ発見器

Twittermixiで不用意に犯罪行為などの悪事を自慢する人がいるのか。
それにより発覚することに気づかないのかという内容。
特定される材料になるものを発信しないように注意しようね的な話も。

参加者それぞれのグループ毎に意見をまとめて、発表も。

オープンソースソフトウェア

オープンソースソフトウェアの開発についての紹介。
みんなも、OSSの開発に関わってねという感じ…?
あと、OSSの開発に関わりたい人?の質問に対しての挙手が多くてさすがセプキャン…!。

特別講義

竹内さん

竹内さんによるエジプトで情報教育に関わったときのお話。
主に、環境の悪さ(?w)がメイン。ソフトオープンということで、校舎もなく、交通手段もまともにないながら、学校運営が始まる…。
あとは、地元の建築業者の仕上げのクオリティ。ケーブル通すための穴がただ単に壁ぶち抜いただけとかw


日本と違うことは、その環境の悪さもあるけど、視点を変えると、着眼点をかえると、荒削りながら、熱意がある。
日本の若者にも、同じような熱さをもっていて欲しいというお話。


ソフトウェアとプログラムの違い。
ソフトウェアは人に使ってもらうもので、プログラムは自分だけが使う物。


もちろんLispについても触れられてました。とりあえず…1つ挙げるならこれかな。Lispの説明。
(http://jp.franz.com/base/seminar/2005-11-18/SeminarNov2005-Takeuchi.files/frame.htm の14番目のスライド:Lispとは)
↑のURL試しに見てみてください。一番印象に残ったスライドがこれw ぱっと見でなにがなにかわからなかった…。


「結果が同じなら、仕事でも何でも楽しく!」というお話もあった。
自分は、どうせなら、周りも巻き込んでと付け加えたいかなぁ…。

超交流会メンバーによるセッション

参加生からの質問形式で進められた。オフレコな話が多かったため、省略。

まつもとさん

Ruby創設者…?rubyを作った人である、まつもとさんによる特別講義。
プログラミング言語に興味を持ったきっかけなどについてのお話。
若いうちから、変人(?)が集まる環境があることが羨ましいというのも。


あと、「業」のお話。
セプキャンに来るような(技術的なことに関心のある人?)には、業がある。
その、自分の業について、自身でよく知るべきで、プラス面とマイナス面を理解し、その上で、障害となる壁についても知っておく必要があるんだよというお話。

交流企画

班内のひとりひとりが、配られた用紙の質問項目を埋める。班内で用紙を回収して、質問への回答を見て、それが、誰かを当てるゲーム。
質問項目は……
エディタ、OS、ブラウザ、文字コードシステムコールバイナリエディタ、コマンド…
といった感じ。エディタからブラウザまではわからないでもないけど、それ以降がさすがというかw


宗教戦争を誘発させるイベント…ではない…はずw
ちらほらと宗教戦争ってフレーズが聞こえてた気がするw


また、班単位で、最終日に、3分間の発表をするという。
キャンプのスケジュールの合間に準備して、発表…。
3つのテーマがあって、

  • バカ発見器
  • 我が子の悪事を防止するにはどうする?
  • 新しいクラスを新設するならどんなクラス?


そして、ここでもGentooが…w
3つ目のテーマで、Gentoo組をテーマとした班があり、会場から拍手が湧き上がるw
他にも会場から拍手があがってたテーマがあったけど覚えてない…。

最後に

まつもとさんの特別講義で、セプキャンは「変人」の集まる場所みたいなことを言われていたが、終わってから考えると、最初に思っていた以上に変人の集まりだったんだなぁと思うw
あと今から思うと初日からGentooネタが結構でてること…w

さて、最初のセプキャンの記事から時間が空いてしまってますが、2日目以降も多分こんな感じでゆっくり書いていきます…。

セキュリティ&プログラミングキャンプ2011に参加してきました

参加したのはセキュリティコース、ネットワーククラス。
個別に思い出しながら、記事を書きたいので、詳細は今回書かずに、ほとんど勢いだけで書いてしまいます。


セプキャンについての説明を簡単にだけ。
参加者視点だと、ただですごい講師の講義を受けられ、教材までもらえ、レベルの高い他の参加者と交流できる4泊5日の宿泊勉強会という感じ?
まぁ、詳細は http://www.ipa.go.jp/jinzai/renkei/spcamp2011/index.html
今回は震災の影響で、開催地が例年の東京・千葉でなく、大阪。
おかげで移動距離が少なくて済みました!w


とりあえず、記憶に新しい4日目のCTF!!すっごい楽しかった!。解いたのはネットワークとトリビアの問題だけだけど。
セキュリティコース+言語組の選抜メンバーを6グループに分けて行われた。
さらに、チューターグループと、まさかのsutegoma2グループ!(全員ではないけど)
簡単に自チームの順位だけ…4位でした。(sutegoma2とチュータグループが上位にいるので、参加者のグループでは2位なはず…)

CTFで他の人が解いてない問題を解いたらしく、CTF結果発表の際に賞をいただいて、
おまけ?で最終日に発表する義務…でなく権利をいただき、解いた問題の解法について発表しました。


率直に思った感想を書くと、すごかった!たのしかった!
講師の方々はもちろんすごい人たちだし、他の参加者の方々も、セプキャン通るだけあって、
できる人たちだらけ。同じことを感じた参加者の人も多かったと思うけど、普段なら通じない話が通じる人がいっぱいいる場所だった。そのせいか、終わってからも離れたくなかった。帰路もなんか寂しかったり…。


講義内容は後の記事で書くことにして割愛しますが、今書いていて思った事を一つ。
個別の知識を得るのは簡単。本読んだり、ネットで調べれば済むことだから。
それぞれの知識を組み合わせ方や、関係とか繋がりって自分で気づくか、人に教えてもらうしか無いんだと思う。ただ調べて、覚えて、ではわからない。だから、聞ける人がいる、聞ける環境があるのは大事。
その意味でも、講師の方、チュータの方、他の参加者の方と知り合えたセプキャン凄く良かったです。


さて、書いててぐちゃぐちゃになった気がしないでもないけど、とりあえずこれくらいにしておいて、細かいことは日別にして、後で書きます。


最後に、講師、チュータ、事務局の方々、あと忘れちゃいけないセプキャンを教えてくれた先輩にも、本当にこんな貴重な、素晴らしい機会をくださってありがとうございました!!

追記

勉強会のことを書き忘れてたので追記します。
セプキャンの前から、ネットワーククラスの一部連絡がとれた人と、Skype、Ustをつかって、事前課題などに関する勉強会をしていました。
折角だから、セプキャン終了した後も、継続しよう!という話になっていました。
さらに、参加していなかった人、別のクラス・コースの人にも来てもらえたらいいね、という思いもあり、
最終日の修了証授与の時に、勉強会継続するので興味ある人声かけてね!とか言ってみました。
今現在、数人から反応もらっています。近いうちに第1回をやる予定です。
とりあえず、Skypeにルームつくってあるので、興味ある人はTwitter(@clc_igu)なり、skypeなり、メールなりで連絡ください!!

セプキャン参加決定

セキュリティ&プログラミングキャンプ2011 公式

ネットワーク・セキュリティクラスに応募していたのが、合格ました。(・ω´・,,)vイェイ!!

とりあえず…いろいろ怖いけど、興味関心、人とのつながりなどなどいろいろ広げるのには素晴らしいくらいのチャンスだと思うので、楽しみつつ頑張ろうと思います。


# と…いう記事を昨日用意しかけてたのに完成させてなかった+投稿してなかったので今更投稿…

絶対パスでヒストリ追加するcd

C-rで履歴検索を使うと、ヒストリから以前使ったコマンド(引数付き)を呼び出して使うことができる。
ディレクトリ移動もよく行う動作なので、ヒストリから検索したいと思った。
しかし、カレントディレクトリからの相対パスでcdすることが多い。
さらに、lsで行き先を確認しながらcdするため、ヒストリに登録されるcdの履歴は、
そのままではヒストリ検索から使いづらいものになっている。
そこで、相対パス絶対パスに変換し、ヒストリ登録できるcdがあれば、
ヒストリ検索からディレクトリ移動しやすくなるのではないかと思い、つくってみた。

機能

相対パス指定でディレクトリ移動を行ったときに、絶対パスでヒストリへ登録する
zsh特有?の引数を2つ取るcdの使い方もそのまま使える

コード


#! /usr/bin/zsh

histf=$HOME/.zsh_history

if [ $# -eq 1 ]; then
builtin cd $1
if [ $? -ne 0 ] ; then
return 1
fi
echo "cd" $PWD >> $histf
fc -R
else
builtin cd $*
fi

さて、コードを載せたので、本編はここまで、これ以降はおまけ、蛇足(だと言い張っておく)

コードの説明

わざわざ説明を入れるほどのモノはつくっていないと思うが、順に説明をいれてみる。


#! /usr/bin/zsh
zshで実行しているのは、zshの引数を2つ取るcdを使いたいから。


histf=$HOME/.zsh_history
シェルで設定している履歴ファイルを指定する。


if [ $# -eq 1 ]; then

else

fi

先にif文だけを取りあえげる。それぞれ中身はあとで取り上げる。
$#は実行時引数の数を持っている特殊変数
C言語とは異なり、この数に自身のファイル名は数えられていないので、
実行時引数が1つなら$#も1,実行時引数が2つなら$#も2となる。
(Cと違って分かりやすくて助かる…)


builtin cd $1
if [ $? -ne 0 ] ; then
return 1
fi
echo "cd" $PWD >> $histf
fc -R
先ほどのif文ががtrueのときの中身。実行時引数が1つの時の処理。
とりあえず引数の場所へcdしてみる。
cd出来なかったら、cdは1を返却するので、それを見て、cd出来ないならそのまま何もせず終了する。
cdできた場合は、"cd カレントディレクトリ" という文字列を履歴ファイルへ追記する。
追記したものを今のシェルでもすぐに参照できるように、履歴ファイルからヒストリを読み込み、
ヒストリを更新する。
# 最初ヒストリの更新をしていなかったために、履歴ファイルに追記したのに、ヒストリに出てこなくて困っていた


builtin cd $*
if文のがfalseの時。つまり、実行時引数が1つでないとき。
普通に考えれば引数が0個か、2個の時にこれが呼び出される。
引数が0個なら、ホームディレクトリへ、2こなら、引数を2つとるcdとして動作する。



とりあえず、思ったものができて満足した。
次は、locateを使って、ヒストリにないディレクトリでも検索から移動できるようにしてみようかなぁと考え中

lsの色表示で256色を使ってみた

端末の256色表示を調べて試してみると、普通に表示できた。
emacsのバックアップファイルに灰色だったり、よく操作するファイルの色を変えてみたかったので変えてみた。

256色表示ができるか確認

https://github.com/dzfl/dotfiles/blob/master/.zshrc

ここからpcolor関数をもらってきてシェルの設定ファイルをコピペし、シェル上でpcolorを打ち込むと
今の環境で256色表示できるかの確認ができる。
自分の場合だと、何の変更も加えずに、256色表示が出来たため、確認方法だけの紹介になる。
表示ができない場合だと256色表示できないツールなりを使っていないか調べ、場合によっては仮想ターミナルなどを
インストールしなおしになるかもしれない。

echo で256色表示してみる

とりあえず256色表示できるようになった(はず)なので、echoを使って欲しい色を表示してみる。


echo "\e[38:05:203mTEST\e[m"
203の部分をpcolorで表示した色の番号に変更していくと欲しい色が表示されるはずである。
38:05の前に以下のの数字をつけると強調表示を追加できる
01:ボールド
04:下線
07:反転
08:非表示
09:打ち消し
複数の強調表示を使う場合は、強調表示の数字が先頭に集まるようにする。
下線、打ち消しを例にすると、以下のようになる

echo "\e[04;09;38;05:203mTEST\e[m"

lsのカラー表示

lsのカラー表示をいじる前に、普段からlsをカラー表示してない人もいると思うので、そこから。
ls --color を実行するとデフォルトの色表示設定で表示されるはず。
自分の環境だと、ディレクトリは青、実行ファイルは緑(黄緑?)、圧縮ファイルやアーカイブなどは赤…
などといった色分けになっている。

ユーザごとのカラー設定ファイル作成

lsのカラー表示は、環境変数のLS_COLORSを参照する。
ユーザごとのlsの色表示設定ファイルは~/.dir_colors
デフォルトではなかったので、


dircolors -p > ~/.dir_colors
を実行して、現在の設定をファイルに保存する

作成したカラー設定ファイルの編集

.dir_colors では # 以降がコメントとして扱われる
カラー表示部分を変更すればいいので、.dir_colorsの前半部分 TREMから始まる行は編集しない。
後半の


.(拡張子) ??;??
の様になっている部分を変更する。
新しく設定を追加する場合は、行頭に設定を反映したいファイルのパターンと表示する色を空白区切りで入力する
表示する色の部分は、上でだした echo の例だと、\e[ から m まで間の部分を入力することになる。

変更の反映

シェルを起動し直せば、~/.dir_colorsが自動で読み込まれて設定が反映される…らしいが、
自分のところでは自動でできなかったので、シェルの設定ファイルに以下を追記した。


eval `dircolors -b ~/.dir_colors`

これでシェルを起動しなおすと、色の設定が反映される

参考…になるのかわからないけど、とりあえず、自分が変更した~/.dir_colorsを貼りつけておく。


# Configuration file for dircolors, a utility to help you set the
# LS_COLORS environment variable used by GNU ls with the --color option.
# Copyright (C) 1996, 1999-2008
# Free Software Foundation, Inc.
# Copying and distribution of this file, with or without modification,
# are permitted provided the copyright notice and this notice are preserved.
# The keywords COLOR, OPTIONS, and EIGHTBIT (honored by the
# slackware version of dircolors) are recognized but ignored.
# Below, there should be one TERM entry for each termtype that is colorizable
TERM Eterm
TERM ansi
TERM color-xterm
TERM con132x25
TERM con132x30
TERM con132x43
TERM con132x60
TERM con80x25
TERM con80x28
TERM con80x30
TERM con80x43
TERM con80x50
TERM con80x60
TERM cons25
TERM console
TERM cygwin
TERM dtterm
TERM eterm-color
TERM gnome
TERM gnome-256color
TERM jfbterm
TERM konsole
TERM kterm
TERM linux
TERM linux-c
TERM mach-color
TERM mlterm
TERM putty
TERM rxvt
TERM rxvt-cygwin
TERM rxvt-cygwin-native
TERM rxvt-unicode
TERM screen
TERM screen-256color
TERM screen-bce
TERM screen-w
TERM screen.linux
TERM vt100
TERM xterm
TERM xterm-16color
TERM xterm-256color
TERM xterm-88color
TERM xterm-color
TERM xterm-debian
# Below are the color init strings for the basic file types. A color init
# string consists of one or more of the following numeric codes:
# Attribute codes:
# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
# Text color codes:
# 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
# Background color codes:
# 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white
#NORMAL 00 # no color code at all
#FILE 00 # regular file: use no color at all
RESET 0 # reset to "normal" color
DIR 01;34 # directory
LINK 01;36 # symbolic link. (If you set this to 'target' instead of a
# numerical value, the color is as for the file pointed to.)
HARDLINK 44;37 # regular file with more than one link
FIFO 40;33 # pipe
SOCK 01;35 # socket
DOOR 01;35 # door
BLK 40;33;01 # block device driver
CHR 40;33;01 # character device driver
ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file
SETUID 37;41 # file that is setuid (u+s)
SETGID 30;43 # file that is setgid (g+s)
CAPABILITY 30;41 # file with capability
STICKY_OTHER_WRITABLE 30;42 # dir that is sticky and other-writable (+t,o+w)
OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky
STICKY 37;44 # dir with the sticky bit set (+t) and not other-writable
# This is for files with execute permission:
EXEC 01;32
# List any file extensions like '.gz' or '.tar' that you would like ls
# to colorize below. Put the extension, a space, and the color init string.
# (and any comments you want to add after a '#')
# If you use DOS-style suffixes, you may want to uncomment the following:
#.cmd 01;32 # executables (bright green)
#.exe 01;32
#.com 01;32
#.btm 01;32
#.bat 01;32
# Or if you want to colorize scripts even if they do not have the
# executable bit actually set.
#.sh 01;32
#.csh 01;32
# archives or compressed (bright red)
.tar 01;31
.tgz 01;31
.arj 01;31
.taz 01;31
.lzh 01;31
.lzma 01;31
.zip 01;31
.z 01;31
.Z 01;31
.dz 01;31
.gz 01;31
.bz2 01;31
.bz 01;31
.tbz2 01;31
.tz 01;31
.deb 01;31
.rpm 01;31
.jar 01;31
.rar 01;31
.ace 01;31
.zoo 01;31
.cpio 01;31
.7z 01;31
.rz 01;31
# image formats
.jpg 01;35
.jpeg 01;35
.gif 01;35
.bmp 01;35
.pbm 01;35
.pgm 01;35
.ppm 01;35
.tga 01;35
.xbm 01;35
.xpm 01;35
.tif 01;35
.tiff 01;35
.png 01;35
.svg 01;35
.svgz 01;35
.mng 01;35
.pcx 01;35
.mov 01;35
.mpg 01;35
.mpeg 01;35
.m2v 01;35
.mkv 01;35
.ogm 01;35
.mp4 01;35
.m4v 01;35
.mp4v 01;35
.vob 01;35
.qt 01;35
.nuv 01;35
.wmv 01;35
.asf 01;35
.rm 01;35
.rmvb 01;35
.flc 01;35
.avi 01;35
.fli 01;35
.flv 01;35
.gl 01;35
.dl 01;35
.xcf 01;35
.xwd 01;35
.yuv 01;35
# http://wiki.xiph.org/index.php/MIME_Types_and_File_Extensions
.axv 01;35
.anx 01;35
.ogv 01;35
.ogx 01;35
# audio formats
.aac 00;36
.au 00;36
.flac 00;36
.mid 00;36
.midi 00;36
.mka 00;36
.mp3 00;36
.mpc 00;36
.ogg 00;36
.ra 00;36
.wav 00;36
# http://wiki.xiph.org/index.php/MIME_Types_and_File_Extensions
.axa 00;36
.oga 00;36
.spx 00;36
.xspf 00;36
# 256colors
# after this line, added by user
*~ 38;05;240
.rb 01;38;05;202

ssh_configで多段sshの設定

以前の記事ssh接続をちょこっと楽にする - Ruby_logで~/.ssh/configをいじって、ユーザ名、ホスト名を省略できるようにしました。
どうせなら面倒なこともっと減らそうってことで、多段sshについての設定を書いて、自動で踏み台ホストを超えて、目的のホストへ接続できるようにします。

多段ssh

目的のサーバへ接続するために、別のサーバへ一旦接続しないといけない状況を考えます。
例えば、

ホスト1,2,3はそれぞれ、フルパスで書くとhost1.example.com, host2.example.com, host3.example.com であるとしておきます。
赤ので囲まれたホスト2,3は同じLAN上にあり、ホスト3は外部へ公開されていない。
ホスト2は外部へ公開されている。
ホスト1からホスト3へ接続したいとします。

通常だと、ホスト1からホスト2へ接続 → ホスト2からホスト3へ接続


host1$ ssh user2@host2.example.com
user2@host2.example.com's password:
host2$ ssh user3@host3.example.com
user3@host3.example.com's password:
host3$

で、この操作ってめんどいよね!!ってことで、省略していきます。

~/.ssh/configを編集

以前の記事で編集した内容は出来てるものとして、説明はしません。
今回はホスト1からホスト2を経由して、ホスト3へ接続するので、ホスト1の~/.ssh/configを編集します。


Host h2
User user2
Host host2.example.com

Host h3
User user3
Host host3.example.com
ProxyCommand ssh h2 nc %h %p
はい、これでOK
試しに

host1$ ssh h3
としてみると、見かけ上直通でホスト1からホスト3へ接続できます。
# パスワード認証だと2回パスワード入力が必要なのでそれほど…な感じかもしれませんが…
# 秘密鍵認証で、ホスト2,3両方への鍵を用意しておいて、パスフレーズ無しかssh-agent起動済みなら完全に見かけ上直通!!

ちょこっと説明

さて、前回のと大して~/.ssh/configの内容変わらないわけですけど、赤文字になってる最後の行が変わってますね。
ProxyCommandはこのホストに接続する前に実行するコマンドを指定します。
今回のでは、事前にホスト2へ接続しないといけないので、ProxyCommandでホスト3へ接続する前に、ホスト2へ接続しておいてねとお願いしていることになりますね。

そのProxyCommandの中身についての説明もいりますね…


ssh h2 nc %h %p
がその中身なわけですが、ssh h3 の部分はいいですよね? フツーにsshでh3に接続してねってお願いしてるとこです。
今回は~/.ssh/configのこの箇所より上の部分でh2について設定を書いてあるので、h2って書いておけば、ユーザ名、ホスト名などは書かなくてもいいみたいです。
残りの…

nc %h %p
ってのがさっぱりかと思います。
実は自分もよくわかってまs…ゲフンゲフン
nc っていうのは普通にコマンドラインで使えるネットワーク関係のコマンドですね。
フルネーム(?)だとnetcat。ポートスキャンだとか、ファイルの送受信なんかにも使えるコマンドらしいです。
今回はncのいくつかある役割の中からネットワーク上で入出力をなにかうまくやってくれる機能(?)を使っているということ
# このあたりよくわかってません(´;ω;`)ブワッ
で、ncの件はこれくらいで許してもらうとして、%h %pってなに?って聞かれそうなんですが…
%hはホスト名、%pはポート番号に展開されるということです。
ちなみに、%pがポート番号なら、sshのデフォルトポート22番を使用していれば%pいらないよね?
…というわけにはいかなくて、実際にやってみると接続できませんでした。
あくまで推測でちゃんと確かめたり、調べたわけではないけど、ポート番号を受け取っているコマンドはsshじゃなくてncなんでncからするとsshのデフォルトポートなんてわかるか!!ってなるんでしょうかね(・ω・`)

sftp,scp

ちょっと話が変わって
ホスト1にホスト3のファイルが欲しい場合、~/.ssh/configの設定をしてなくて、普通にやろうとした場合、

ホスト1からホスト2へssh接続して、sftp/scpでホスト3のファイルをホスト2へ一旦置いて、
ホスト1からホスト2へsftp/scpで一旦置いたファイルを回収…
という手順を踏むことになると思います。

sshで見かけ上直接ホスト1からホスト3へ接続できるので、sftp/scpでももちろん見かけ上直接接続できます!!
なので先ほどのような面倒な手順を踏まずに
ホスト1からホスト3へsftp/scpでファイルを取ってくる
ことができるわけです。これでホスト2へ無駄なファイルを一旦置く必要がなくなります!
# あとで消しに行くのが面倒なんですよね…(・ω・`)


以上、エイプリルフールネタが一切無くてごめんなさい!!!!!