組み込みにもSELinuxを

SFなどで,ロボットなどの組み込みのコンピュータシステムが通信などを使って敵に乗っ取られて,味方だったのが敵に変わってしまい,逆に襲われるというのがよくある。

パニック映画とかで,世の中のありとあらゆるコンピュータシステムが乗っ取られて・・・。というのも。

そういった対策のために 組み込みにもSELinuxを。

SELinuxで組み込み機器のセキュリティを高める:
(前編)
http://www.kumikomi.net/article/explanation/2008/18selin1/01.html
(後編)
http://www.kumikomi.net/article/explanation/2008/19selin2/01.html

組み込み機器がインターネットに接続されるようになり,さまざまな攻撃にさらされることになった.SELinuxは,Linuxのアクセス権限機能を拡張し,ファイルやポート番号ごとに細かくアクセス制御を行うことができる.前編の今回は,SELinuxの概要と組み込み機器への摘要の取り組みについて解説する.

組み込みシステム:
携帯電話やデジカメや自動車の中の小さいコンピュータ。

組み込みシステムにもLinuxが使われる。

ネットワークにつながる組み込み機器が増えている。

当然,組み込み機器への攻撃やクラッキングが増えるでしょう。

これからは,組み込みシステムがネットワークにつながっているので,のっとられ,いうことを聞かなくなる(操作出来なくなる。クラッカーによって遠隔から勝手に使われる)。そういったことが,SFじゃなくても起こる。

そういった対策にSELinuxを使うというお話。

SELinuxとは,簡単に言うとLinuxの根本的なセキュリティ的な弱点を強化して弱点を少なくするもの。もちろん組み込み専用の技術ではない。インターネットのサーバにも使われている。

組み込み機器のセキュリティを強化しないとSF(サイエンス フィクション)がフィクションじゃなくなります・・・。恐ろしい。

comments

USBメモリのもう一つの寿命

USBメモリで,Ubuntu。そろそろ2ヶ月になる。
あまりにトラブルが無いので,ネタがない。
本当に毎日,普通に使える。(使い勝手が悪いか快適でなければ,使うのをやめている。しんどいし。)

しかし,そんなUSBメモリに,もう一つ弱点があることが判明。
USBメモリの抜き差し回数に上限があるのだ。

え?と言う感じだが,考えてみれば当然である。

理由:
USBのコネクタは,金属と金属が接して通電させている。
抜いたりさしたりすると,その金属同士で接する面がこすれる。
当然,削れる。

1回の削れる量はわずかかもしれないが,毎日抜き差しすれば
金属は当然薄くなる。薄くなると接触が悪くなる・・・。

これが 回数に制限がある理由だ。

この耐久性は,フラッシュメモリの書き換え耐久性より低いらしい。(と,勝手に思っている。だれか調べてください・・・。)

また,USBメモリの方だけが削れるのじゃなくて,コンピュータ側のUSBコネクタも削れる。
コンピュータ側の交換は簡単には出来ないことが多いので,USBメモリを良く抜き差しする人は,同じ場所ばかり抜き差ししないで,別の場所のUSBコネクタを使うか,USBハブやUSBの延長コードなども使う方がいいかも。

こればっかりは,USBというものを使う以上避けられない。

こうなったらワイヤレス化か!?
(てか,ワイヤレスでブートできるのか!?)

参考:
ワイヤレスUSB
http://itpro.nikkeibp.co.jp/article/NEWS/20061117/254168/

comments

C言語でいかに「わかりにくい」プログラムを書けるか の コンテスト

C言語の「まったく」役に立たない知識を教えます!! の解答と解説です。

((3-2)[a]-2)[b] = 5; の 5 は b[0] に入ります!。

で,解説ですが,C言語で a[1] は 1[a] と書けます。
配列 は 変数名と添字を入れ替えて書けるという,構文ルールがあります。
それを使うと
((3-2)[a]-2)[b] = 5;
の (3-2) は 1なので,
(1[a]-2)[b] = 5;
となり, 1[a] は a[1] となります。
(a[1]-2)[b] = 5;
で,a[1] は int a[2] = {1,2}; となっているので, a[0]は1で a[1]は2 です。だから
(2-2)[b] = 5;
となります。 2-2 を計算すれば 0 となり
(0)[b] = 5;
となります。 ( ) を取り除くと
0[b] = 5;
となり, 0[b] は b[0] と書けます。結果
b[0] = 5;
となり, 5は,b[0] に代入されます。

もちろん,プログラムはわかりやすく,読みやすく書くものです。
しかし,あえて,わかりにくく,読みにくくするコンテストがあります。

それがこちら:
 C言語でいかに「わかりにくい」プログラムを書けるか の コンテスト:
IOCCC(The International Obfuscated C Code Contest)

みんな分かりにくいプログラムばかりです。
読みにくくするために,技術力を使いすぎです(笑)。

たとえば,過去の作品(1984年から2004年まで)
http://www.ioccc.org/years.html

これらの中の
なんとか.c
をいろいろ開いてみてください。

C言語でアスキーアートになっているものも結構あります。
たとえば

http://www.ioccc.org/1998/banks.orig.c
http://www.ioccc.org/2004/newbern.c
http://www.ioccc.org/2004/omoikane.c
http://www.ioccc.org/2000/bmeyer.c

などなど。
歴史あるコンテストですが,ほとんど遊びですね・・・。

参考:
http://www.geekpage.jp/blog/?id=2007/1/12
http://www.nwhite.info/nw5/2008/11/-ioccc.html

comments

C言語における役に立たない知識を教えます!!

C言語はシステム開発言語として役に立つ。
そんなC言語の「まったく」役に立たない知識を教えます!!(いらんか・・・。)

いきなり問題:
以下のプログラムはC言語の構文として正しい。(正しく実行できる。)
さて,値5を代入している行があるが,これは,一体どこに入っているのか?

#include <stdio.h>

int main(int ac, char **av)
{
int a[2] = {1,2};
int b[3] = {0,1,2};

((3-2)[a]-2)[b] = 5; /* ←この5は,どこに代入されるのか? */

return 0;
}

答えと解説は後日・・・。

comments

Ubuntu 8.04で画面の解像度を簡単に変更できるソフト・・・がほしい。 ので作った。

Ubuntu 8.04で画面の解像度を簡単に変更できるソフト・・・がほしい。 ので作った。

Ubuntu 8.04 のディスプレイ設定変更がおかしいことがある。
8.10で少しは改善されているらしいが,私は使わない・・・。

8.04での設定方法は色々あるみたいだけど,どれも動きが変・・・使い方がよくわからない。。。(複数のディスプレイ設定でおかしい時が結構ある。どうも設定方法にコツがいるらしい。)
(たとえば sudo displayconfig-gtk は,使うのに管理者権限がいるし,サブディスプレイの設定がうまく出来ない。具体的には,ディスプレイが有効にして1024×768で設定しているのに,そのディスプレイが無効になっていて800×600までの解像度しか出ない等で変)

色々調べると
xrandr というコマンドを使って動的に変更出来るというのが分かったが,GUIで変更出来ない。
とりあえずメニューの項目に登録してやればできるが,
環境によってディスプレイの識別名が違うことがわかり,対応出来ない場合があることが判明。
リフレッシュレートの周波数の指定もいっしょに簡単に出来たほうが実用的っぽいので,それもできるように。

xrandr の使い方:
xrandrを単に端末から実行すれば,設定出来るディスプレイとモードの一覧が出る。

VGA出力を 1024×768で 60Mhz で出力するならこれ。(ちなみに, –rate 60.0 はなくてもいい。)
xrandr –output "VGA" –mode 1024×768 –rate 60.0

ノートパソコンの場合,VGAは外部出力となる。
で,内臓ディスプレイ出力を 1024×768で で出力するなら
xrandr –output "LVDS" –mode 1024×768

画面の解像度と周波数の設定細かく設定出来て,GUIで簡単に使えるツールがほしい・・・。

うーん。作るか。(コンピュータ技術者ばんざい)
ということで,プレゼンテーションとかで便利な様に解像度変更や同時表示などをGUIで出来るツールを作ってみた。

言語はPerl。以前からCGIとか作るので使っていたの。たぶん手軽に作れるはず。
・・・再利用とか考えていないし,そもそも,これ自体の作成に時間をかけれない。うーむ。バグがあるかも・・・。
でも,GUIはやったこと無いぞ。サンプルを探してみる。うーむ。

あ,簡単そうなのを発見。
GUIの見た目の作成は,glade というのを使ったものがなかなか簡単らしい。
(今回これも,はじめて使った。Visual Studioとか MonoDevelopみたいにボタンとかをマウスとかで貼り付けながら 作れる。)

GUIを用意して,設定出来るの一覧とそれを使った設定を 内部でxrandrをパイプという通信をする方法で実行してディスプレイの設定をする。

glade

これのインストール方法:
sudo aptitude install glade-gnome-3
で,出来る。アプリケーション – プログラミング – Glade 3 インターフェイス・デザイナ を選ぶと起動できる。

しかし,Ubuntuは,ありとあらゆるものがちゃんと 多言語で用意されているのですね。最近のLinuxの多言語対応レベルはすばらしい。

ここを見ながら作る:
Gtk2 API : http://live.gnome.org/GTK2-Perl/

で,出来た。作成時間 約2時間ぐらい?プログラミングばんざい。
そういえば,配布条件とか考えていないや・・・。まぁ,そんなに内容もないし。テストとかあまりしていないので,動かない環境もあるかもしれません。Ubuntuは,USBメモリブートなのでいろんな環境でテストする予定。

ソースのダウンロード
Perl : disp-setting.pl
GUI : disp-setting.glade

別途必要なソフトのインストール:
端末から
sudo aptitude install libgtk2-gladexml-perl
と実行すれば,全部入るはず。

使い方:
disp-setting.pl と disp-setting.glade を同じディレクトリにおいて
端末でそのディレクトリに移動後
perl disp-setting.pl
と入力し実行すると

disp-setting

が出る。

これで設定できる。とりあえず完成。しばらくこれで使って不具合がないか見よう。

リストから変更したいディスプレイを選んで,下のリスとから使いたいリフレッシュレートの周波数を選ぶ。
ディスプレイ名が何なのかを推測するためのヒント付きです。(英語ですが・・・)

複数のディスプレイに同じ画面を出したり,解像度や周波数を設定できる。

——————————–

現在は,拡張デスクトップ(マルチディスプレイで広いデスクトップ)の設定は出来ない。
それをするには, /etc/X11/xorg.conf を編集しないといけないため。

そのやりかた:

sudo gedit /etc/X11/xorg.conf
で開くことが出きるので,以下様な部分を探す。

Section "Screen"
Identifier "Default Screen"
Monitor "Configured Monitor"
Device "Configured Video Device"
EndSection

これを

Section "Screen"
Identifier "Default Screen"
Monitor "Configured Monitor"
Device "Configured Video Device"
SubSection "Display"
Virtual 2048 768
EndSubSection
EndSection

という風に,追加する。

とすれば, 1024×768 を横に2個並べたディスプレイ設定が出来る。
これで,ログインしなおして,

ノートパソコンでLCDディスプレイと外部VGA出力なら
xrandr –output "VGA" –mode 1024×768 –rate 60.0 –output "LVDS" –mode 1024×768 –left-of "VGA"
コマンドでできる。
–rate 60.0 はなくてもいいが,プロジェクターに出力するときは,これがあると,表示横にずれたり切れたりしないのでいい感じ。

参考:
http://manual.sidux.com/ja/hw-dev-mon-ja.htm
この Sidux とは,Debianの不安定版を安定化させて使うディストリビュージョン。UbuntuもDebianの不安定版がベースに作れているが,UbuntuよりDebianに近いディストリビュージョン。ベースが同じなので,SiduxとUbuntuは内部構造が似ている。

comments

脳でパソコンを操作する

脳でパソコンを操作する

SFみたいですが,もう ある程度出来るそうです。

脳でパソコンを操作する、全身麻痺の研究者
2008年11月14日
http://wiredvision.jp/news/200811/2008111419.html

モニター画面上で点滅する文字列を見ながら、入力したい文字が表示された瞬間に「これ!」と思うだけで、Mackler氏は文章を入力していく。「ブレイン=コンピューター・インターフェース」(BCI)のおかげで、Mackler氏は仕事を続け、科学論文を執筆し、子どもたちにメールを送ることさえできるようになった。

コンピュータ技術は素晴らしい。

comments

今日のMyデスクトップ

今日のMyデスクトップ。こんな風に設定してみた・・・。
デスクトップが地球です。以上。ちなみに, WindowsではなくてLinux (Ubuntu)です。

mydesktop

USBメモリ起動のUbuntuでこれがグリグリ回転出来る・・・結構軽い。
実用性? 分かりません(笑) ちゃんとした天球を背景に表示できれば,天体シミュレーション系の何か出来そうですが。
・・・Compiz-fusion ばんざい。

ちなみに,この状態で入力などは出来ません。普段は平面のデスクトップです。複数の画面切り替え時にこうできます。以下の動画を参照してください・・・。(ちなみに私の動画ではありません。)

参考 動画:
Compiz Earth

元画像とやり方とか:
http://forum.compiz-fusion.org/showthread.php?t=8271

comments

FireFox3の比較(WinXPとUbuntu)

WindowsとUbuntuのどちらにもFireFox 3 がある。

しかし,Windowsと同じページでも何か表示が違う。
レイアウトとか色とかはほとんど同じ。
最初は気がつかなかったが,どちらもかなり使い込むと,違いが分かってきた。

同じページを並べてみるとこんな感じ。(画像をクリックするとオリジナルのサイズで表示します)
もちろん,上がWindows XP で 下が Ubuntu。バージョンはどちらもFireFox 3.0.3 (最近3.0.4にバージョンアップしましたね。)

FF3-S

GUIも若干違う。ボタンの形が全然違う。シンプルだ。
まぁVista版だと,WindowsXP版と同じボタンの形をしているが,ボタンの色がすべて青色単色系になる。

で,一見,同じ様だが,違う部分だけ拡大すると・・・

zoomEX

左がWindowsXPで,中央がUbuntu。ついでに右にWindows Vistaの場合。
何が違うかというと,Windowsだとフォントのスムージングが小さい文字なので効いていないのに対して,Ubuntuだと,小さい文字でもスムージングされている。
ん?・・・「最近は」が2回ある・・・。そんなに主張したいわけではない・・・。

元々の画像サイズよりも画像より拡大して表示されている画像は,スムージングが逆でWindowsの方がUbuntuより綺麗にスムージングされている。Ubuntuの方は,スムージングされていないのか四角いドットが見える。

Ubuntuは,細かい文字でも綺麗にスムージングしてくれる。この辺はありがたい。画面上の細かい文字もすべてが綺麗に見えるので,読みやすい。

ちなみに,Windowsでも,設定などを色々してやれば,小さい文字もスムージングできるが,漢字等は ぼやけて読みにくくなる。

以前はLinuxだと日本語フォントが汚いものしかなく,スムージングなども一切なかったので,読むのが辛かったが,今ではIPAゴシックやIPA明朝などの高精細フォントが無料で入手できる上に,細かい文字も綺麗にスムージングしてくれるのでWindowsXPよりも綺麗に表示出来る様になった。
VLゴシックとかでも,結構綺麗。VLはVine Linuxのこと。日本語に強い。

comments

10年後じゃなくて10ヶ月後

アットマーク・アイティ
Analysis
今後10年でコンピュータの総シリコン化が完成する
2008/01/21
http://www.atmarkit.co.jp/news/analysis/200801/21/flash.htmlより

OSまるごとUSBメモリに

クライアントサイドに視点を移せば、マニア層によるSSDの購入ブーム以上に重要なのは、大容量USBメモリの普及だ。現状、個人ユーザーでデータのバックアップを定期的に取っている人は多くない。その理由は、従来型のリムーバブルメディアでは時間と手間が大きい割に、事故が起きたときの復旧にはさらに大変な手間がかかるからだ。

面倒で分かりにくいバックアップが直感的に実行でき、復旧も簡単。大容量USBメモリを使ったバックアップ、データ同期にはそうした可能性がある。さらに、USBメモリからのOS起動が可能になれば(注2)自宅作業のために業務用PCを持ち歩く必要すらなくなるかもしれない(注3)。

この記事は,2008年1月21日のもの。今後10年のお話だそうな。

・・・そう。既に やってます
Ubuntuを使えば,10年じゃなくて, 10ヶ月でUSBメモリでOS起動し,デスクトップ環境として十分使えます。ドキュメントの保存はGoogle Docsが多いです。(私は,そういう環境を使っています)

同様に注3も引用。

注3

個人的には大容量USBメモリとネットワークブート機能をハイブリッド化した仮想シンクライアントが実現すればおもしろいと思っている。つまり、USBからOSをブートアップするが、必要なデータは同期によってネットワークサーバにも残すようなアーキテクチャである。認証はUSBによる生体認証とサーバからの認証を組み合わせればよい。ネットトラヒックを圧迫せず、修正データはサーバに保持し、起動も瞬時に行える。キーを紛失したらサーバ上のデータから再構成する

USBメモリで起動するUbuntuがフル機能で動くので,FireFoxでGoogleDocsとか使えば,サーバ上にファイルを置くシンクライアントはほぼ完璧。

サーバとローカルのファイルと同期なら, rsync コマンドで,完璧なのが出来ます。rsyncは標準で入っているコマンドです。

Windowsへのリモートデスクトップ接続が出来るし,やLinuxやX-WinodwなどUNIX系へのリモート接続はもちろん可能。

生体認証もできてます。
USB接続のユニットを買えばどのパソコンでもいけます。
指紋認証の実現はこれ:http://forum.ubuntulinux.jp/viewtopic.php?id=1401

あとは,サーバ認証と,そのキーの復旧はできていない。。。今は,そんぐらいです。

comments

正規表現のすすめ

正規表現という便利な文字列判定システムがある。

これが使えると文字列の検索・解析・置換が高度な条件を比較的簡単に記述できるので,文字列処理をしたいときはおすすめ。

複雑な条件をプログラムの繰り返し文で書くとわけがわからなくなり,バグもたくさん入って収集がつかなくなる。そうならない様にするのに最適。

例えば,HTMLのソースの解析とかURLのアドレスを解析に大変便利。
HTMLは,構文がかなりルーズなので,正規表現を使わないと大変で,バグや検索漏れが起こりやすい。(表現できるパターンに対応するのが大変)
Perlは,正規表現のための専用構文やPerl独自の拡張がされている。
もちろん,RubyやPHPやJavaScriptでも正規表現は使える。

たとえば

http://www.kcg.ac.jp
http://www.kcg.edu
https://support.kcg.ac.jp
https://support.kcg.edu
http://kcg.edu
これらのいずれかではじまるURLが 「kcg.eduグループのアドレス」であると判別するとしたら,正規表現でするなら,

^https?:\\/\\/(www\\.|support\\.|)kcg\\.(ac\\.jp|edu)

と言う感じ。

これで,上記のいずれかのアドレスか,それ以外かを認識出来る。

たとえば,PHPで書いたら以下の様な感じ。正規表現を使わない場合は,もっとたくさんのif文か,繰り返し文が必要で,さらに長いプログラムを書かなくてはならないし,応用がきかない。

<?php
$url = ‘http://www.kcg.ac.jp/opencampus/‘;

if(preg_match(‘/^https?:\\/\\/(www\\.|support\\.|)kcg\\.(ac\\.jp|edu)/’, $url) ) {
echo ‘kcg.eduグループのURLです。’;
} else {
echo ‘kcg.eduグループ以外のURLです。’;
}
?>

$url = ‘http://www.kcg.ac.jp/opencampus/‘; を変えれば,確認できます。
たとえば
$url = ‘https://support.kcg.ac.jp/kcg/apply.cgi‘;
とかにしても,OK。

$url = ‘http://blog.kcg.ne.jp/s2node‘;
だと,この正規表現では,マッチしない。

もっと効率の良い書き方や,もっと厳密な書き方もあるが,わかりやすくするために,単純にしてある。ちなみに,あまり作り込むとほとんど読めなくなるのでコメントが必要になる。

ソフト開発はWindowsだから関係ないや。という人もにもおすすめ。
Visual Studioのテキストエディタにも検索・置換機能のオプションとして「正規表現」が使えるので,プログラムのソースの特定パターンの検索や置換がこれで出来ると,複雑な構文の置換にも便利。

あ,もちろん構文は勉強してね。
独特だけど,慣れです。

おまけ:
KCGブログ( http://blog.kcg.ne.jp/ )も,これに含めるなら
^https?:\\/\\/(blog\\.|www\\.|support\\.|)kcg\\.(ne\\.jp|ac\\.jp|edu)
となる。このレベルなら,知識がなくても何となく分かるのでは?

comments