<   2008年 08月 ( 8 )   > この月の画像一覧
Hyper-V上のCentOSでカーネルアップデートをすると。。。
CentOSの更新情報が結構溜まっていたので、一気にupdateしました。
その中にカーネルのアップデートも入っていました。

そしてリブートすると、、、Hyper-Vで追加してるネットワークカード(NIC)が認識しません。

もしや、と思って、Hyper-Vのドライバを再セットアップしました。

# /opt/linux_ic/setup.pl drivers

詳しい手順はMS Hyper-V RC1にLinux(CentOS)とLinux統合コンポーネントRC0を入れてみたを参考に。

これで、認識しなおしました。
どうやらカーネルを入れ替えると、ドライバも再度登録しないといけないようです。
やれやれ。
[PR]
by jehoshaphat | 2008-08-29 21:31 | Linux | Trackback | Comments(0)
(ネットワーク)無線LANのMACアドレスフィルタリングは意味がない?
家の無線LANクライアントの一部がWEPしか対応していないので、仕方なくWEPにしてました。
(ちなみに、WEPは脆弱性があり、ツールを使えば数分でクラックできてしまうことが広く知られています。)
WEP単体ではまったく意味がないと思い、MACアドレス制限をかけていました。(あと、SSIDをステルスモードにしてますが、まあこれは気休め程度で玄人の前には意味がほとんどないのは理解してます。)
これなら、接続できる機器が制限されるわけだから、大丈夫だろうと思っていましたが、無線LANのMACアドレス制限の無意味さがあまり理解されていないという記事を見つけて己の無知を思い知りました。

まず、無線LANですが、これは昔のダムハブのように無線LANクライアントを持ってるだけで、自分の周辺を飛んでる無線パケットはすべて傍受できます。
その傍受したパケットのヘッダにはMACアドレスが記述されているのですが、ヘッダは暗号化されていません。
そして、MACアドレスは偽装が簡単にできてしまいます。
後は、WEPキーをツールで解読し、攻撃用マシンのMACアドレスを偽装してしまえば簡単にその無線LANに侵入できることになってしまうのです。

ということは、MACアドレスが傍受できてしまう以上、MACアドレスの制限は悪意のある人間の前には意味がないということになります。

上記のサイトにも下記のように書かれています。
----------------------------------------------------------
WEPを使用せざるを得ないときに、MACアドレス接続制限を加えることに意味があるかというと、全く意味がない。なぜなら、WEPの暗号をクラックする際には、同時にMACアドレスも見えているからだ。
----------------------------------------------------------
対策としては、WEPは使わず、WPA,WPA2で適切な鍵設定をすればいいだけですね。

ただし、WEPをどうしても使いたいという場合はやはりあると思います。
その点についても上記サイトに触れられていました。
----------------------------------------------------------
最近は、家庭向けの無線LANルータでも、「マルチSSID」「マルチAP」あるいは「マルチセキュリティ」などと呼ばれる、複数の無線ネットワークを提供して別々の暗号化設定を選べる機種が売られている。
----------------------------------------------------------
便利なものがあるんですね。これは知りませんでした。これで、無線のネットワークを別々にしてしまえばいいのです。

ITpro 利用率7割のWEPは「1分」で破られるにも、「MACアドレスでのアクセス制限やSSIDを秘匿する機能があったとしても、攻撃者はパケット・キャプチャなどによって容易に情報を入手できるため、本質的な対策にはならない。」と書かれてました。


最近しばらくネットワーク系触ってなかったので、こんな基本的なことに気付きませんでした。
(一応これでも国試の情報セキュリティと、情報セキュリティアドミニストレータ、ネットワークは持ってるんですが。。。)
[PR]
by jehoshaphat | 2008-08-26 14:37 | 豆知識 | Trackback | Comments(0)
(VB.Net)パラメタ使ったSQLで、NULL値を入れる。
ついつい忘れてしまうのでメモ。

SqlParameterを使って、値を入れるときにNullを入れる方法です。

Imports System.Data.SqlClient
 
Public Class TestClass
 
Private Sub DBTest()

 
 
Dim conn As New SqlConnection("DB接続文字列")
 
'StringBuilder使ったほうがStringでつなぐより速いらしい。
Dim strCmd As New System.Text.StringBuilder
strCmd.AppendLine("INSERT INTO tbl")

strCmd.AppendLine(" ( No ,")
strCmd.AppendLine(" Name ) ")
strCmd.AppendLine("VALUES ")

strCmd.AppendLine(" ( @No , ")
strCmd.AppendLine(" @Name ) ")
 
Dim cmd As New SqlCommand(strCmd.ToString(), conn)

 
'パラメータを作成
Dim param As New SqlParameter("@No", SqlDbType.Int, 0)

'ここでNull値をパラメタにセット。
param.Value = "DBNull.Value"
cmd.Parameters.Add(param)

Dim param2 As New SqlParameter("@Name", SqlDbType.NText, 0)
param2.Value = "DBNull.Value"

cmd.Parameters.Add(param2)
'上記で作成しているパラメータは下記のようにインスタンス作成省略も可能。
'cmd.Parameters.Add("@No",SqlDbType.Int)
'cmd.Parameters.Add("@Name",SqlDbType.NText)

 
'DB接続、実行、切断
conn.Open()
cmd.ExecuteNonQuery()
conn.Close()
 

 
End Sub
End Class

上記はパラメタを使ったサンプルですが、みてわかるようにSystem.DBNullクラスの Value プロパティを入れるだけです。

ちなみに、DBNullクラスはシングルトン クラスであり、インスタンスは1つしか存在しないようです。(つまり開発者はこのインスタンスを作成できない。)
シングルトン クラスとなるので、デザインパターンのSingletonパターンの実装のようですね。
デザインパターンはまだまださっぱしなので、勉強しないといけないですな。。。
[PR]
by jehoshaphat | 2008-08-26 09:50 | .Net開発 | Trackback | Comments(2)
32bitアーキテクチャでのメモリ環境
前からもかる~く知っていた話ですが、同僚からWinXP(32bit)にメモリ4GB置いても4GBは認識されないとか聞いたので、詳しいことについていろいろ調べてみました。

実はこれにはいろいろ深い話がついて回るみたいです。
OSの制限、アーキテクチャ自体の制限、etc..

アーキテクチャの制限
まずアーキテクチャ自体の制限からです。

前提として32bitアーキテクチャでは物理メモリは最大4GB、つまり物理メモリアドレスも4GBまでしかサポートされていません。

ところで、データの入出力、保存(ビデオカードetc)などを行う装置はおおむねIOメモリと呼ばれるデータ置き場を持っており、CPUはその装置に何かして欲しい(とソフトに書いてあった)時は装置への命令やデータを書き込みます。

このIOメモリは普通のメモリを完全に別系統にしてしまう Port Mapped IO(PMIO) と、普通のメモリアドレス空間を用いIOメモリをまるで普通のメモリの一部であるかのようにCPUに思い込ませる Memory Mapped IO(MMIO) とがあります。
(このMMIOが主流になったのはi386の時代からみたいです)

MMIOはIOを行うデバイスごとにメモリ空間を消費します。
そしてMMIOは3-4GB付近のアドレス空間を予約して使用しています。(デバイスの数や種類等でどれくらい使われているかは変わってくるらしいですが...)

つまりOS側から見ると3-4GB付近は既にデバイスへのIO用として使用されている領域になっているのです。

確かにデバイスマネージャで各でデバイスのプロパティ->リソースからリソースの種類が"メモリの範囲"という部分の予約メモリアドレス見ると4GB付近を利用していることがわかります。

Intelのサイトにはこう書いています。
http://www.intel.co.jp/jp/support/motherboards/desktop/4gb_memory_issue.htm"
---------------------------
I/O インターフェイス用に確保されたアドレスと物理メモリーのアドレスが重複して使用されるとシステムに不具合が生じるため、I/O インターフェイス用に確保されたアドレス部分のメモリー領域は、物理メモリー側では使用されません。
---------------------------
この制限があるために3GB以上のメモリがあっても3GB以上(環境によってしきい値は異なりますが)の領域は使用されない無駄な領域となってしまいます。
悲しきかな32bitとIO周りの限界。。

この制限をクリアするには32bit、64bitとも(64bitでもMMIOは4GB付近のことがある) BIOS で Memory Remap を使えれば、重複したメモリアドレスを4GB以降に押しやり (Memory Remap)、4GB以降のアドレス(/PAE)が可能となるようです。(64bitなら/PAE不要)

この場合 boot.ini への /PAE オプションが必要なのですが、それをサポートしてるのは Windows Server2003 の EnterPrise と DetaCenter だけだった気がします。
(正確には 32bit XP(SP2以降) , Vista でも PAE オプションはサポートしてるけど、OS内部のメモリアドレス空間4Gしかないため、PAE 有効にしても結局無駄ということです。32bit Windows Server 2008 については調査してないので不明ですが、おそらく32bit Vistaと同じでしょう。)

この点についてはやはりVista SP1でも3GBの壁問題は解決されないの記事を参照。
実際にVistaでPAEをONで試したことが、Windows Vista(32bit)+ 4GB RAM + PAE有効で実験の記事で書かれていますが、やはり無理だったようです。
またCPU,チップセット等の対応が必要です。
よって32bitのXPやVistaには手がありません。。

OSの制限
次にOSの制限です。。

Windows XP とかだと(Vistaは不明)、仮想アドレス空間は2Gまではユーザモード、2Gから4Gまではカーネルが使用します。
これには回避策があるらしく、boot.ini で /3GB というオプションを入れると3GBまでの空間がユーザモードで使えるようです。
ちっと調査不足な面もあると思うんで、暇があったらじっくり調べてみたい論題ですね。
特にWindowsのメモリ管理はなかなか扱っているところが少ないのが残念です。

参考URL:
Core2duo and decrease memory price
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1311721048 MMIOの説明が簡単にのってます。
メモリ サポートと Windows オペレーティング システム PAEやOSの内部メモリアドレス空間、/3GBスイッチについての公式な情報です。
[PR]
by jehoshaphat | 2008-08-22 13:27 | 豆知識 | Trackback | Comments(1)
(Linux)vsftpdでWinのファイル共有使うとき
CentOSからWindows共有をマウントする方法
でLinux側からWindows共有フォルダをマウントする方法を書きました。

これを当初の要件どおり、FTP(vsftp)を経由してみるときの注意点です。

普通のFTPで見れるとこにマウントすればいいだけなのですが、vsftpの場合、vsftpd.conf に下記の設定を追加する必要あるみたいです。

use_sendfile=NO

sendfile()システムコールを使用しない設定らしいですが、詳しいことは良くわかりません。

この設定をしないと "426 Failure writing network stream" とか言うエラーが出てきます。

この設定を探すのにかなり手間取りました。
Shine-up(そんな日常)。に載ってます。
この方もなかなか苦労されたようで。。助かります。
[PR]
by jehoshaphat | 2008-08-18 23:19 | Linux | Trackback(1) | Comments(0)
(Linux)ntpdateを使った時刻同期方法
Hyper-V上のCentOSの時刻がかなりとち狂っていたので(1日で10分弱ほど)、定期的にNTPサーバに時刻補正することにしました。
(おそらくβ版のSeLinux用統合コンポーネントをいれてるから、時刻が狂うのではないかと思います。RedHat用の正式版統合コンポーネントがでれば、そちらを入れたほうが、ホストOSと時刻同期取れるはず(?))

まず、Linuxの時刻同期には ntpd を使う方法と、ntpdate を使う方法があります。
前者はntpのクライアントの機能に加えサーバとしての機能もあります。時刻が狂っていれば、正しい時刻に徐々に近づけていく方式みたいです。(Windowsのドメイン環境のクライアントの時刻同期方法とほぼ同じ)
後者は瞬時に指定したntpサーバの時刻に修正します。

本来はサーバと役割を考えると ntpd を使ったほうがいいのですが、FWの設定にミスがあるらしく、時刻同期ができませんでした。
ということで、ntpdateをつかった補正の方法です。
(ntpdを使った方法については、(Linux)ntpdを使った時刻同期方法を参照。)

ます、ntpdate は ntpd サービスが稼働中だと

18 Aug 11:01:14 ntpdate[25758]: the NTP socket is in use, exiting

という風に、時刻同期できないようなので、サービスを落としておきます。
ついでに

# chkconfig ntpd off

で、次回起動時に上がらないようにします。

ntpdate のコマンドはいたって簡単で、引数に時刻同期したいntpサーバを指定するだけです。

あとは定期的に ntpdate で時刻同期するように、シェルスクリプトを作り、cronに登録するだけです。
まず、シェルスクリプトです。

#!/bin/sh
ntpsv="ntpサーバ名"
/usr/sbin/ntpdate $ntpsv

いたってシンプルなスクリプトです。
が、詰まってしまいました。
原因はコマンドを /usr/sbin/ntpdate とフルパスに書かないといけないのを ntpdate とだけ書いていたからです。

あと、cronに10分お気に実行するに登録します。
cronの使い方はhttp://jehupc.exblog.jp/3063146/

ハードウェアクロックのほうは仮想マシンということであんまり関係なさそうなので、今回は設定なしです。

参考:
時刻合わせに、過程や…!方法なぞ…!どうでもよいのだァーッ
Vine Linux - 時刻合わせ
[PR]
by jehoshaphat | 2008-08-18 22:54 | Linux | Trackback | Comments(0)
(ニュース)ポストWindows「Midori」
Windowsの後継とされているOS「Midori」についての情報が出てました。
ITmedia:MSのポストWindows「Midori」の構想が明らかに

これ読むと、OS自体のほぼマネージコードで構成されているということですかね。
「また、Midoriではコンカレンシーに重点が置かれる。」とあるように、開発者にとっても並列プログラミングがしやすい環境を提供してくれそうです。

新しいものがでると必ず互換性という問題が発生しますが、それについてあまり触れられてないようです。

まあ、これが実際にものとなるかどうかは今後の成り行きを見守っていくしかないようです。
[PR]
by jehoshaphat | 2008-08-12 10:22 | 思ったこととかニュースとか。。 | Trackback | Comments(0)
(Linux)ユーザ情報の確認とホームディレクトリの変更。
FTP専用に作っていたユーザがあるのですが、そのユーザから「FTPにログインできない。パスワードが違うとかいわれる」というクレームが出たので調査してみました。

ここはちとプロっぽっくLinuxマシンからコマンドでログインしてみます。こうすることで、出回っているGUIソフトより詳しい情報がゲットできる場合があります。

[root@localhost etc]# ftp xxx.xxx.xxx.xxx
Connected to xxx.xxx.xxx.xxx
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (192.168.0.101:root): eji
331 Please specify the password.
Password:
500 OOPS: cannot change directory:/home/eji
Login failed.


これを見ると、パスワード入力後にそのユーザのホームディレクトリ(/home/eji)に移動しようとして失敗しているみたいです。
ちなみにこのユーザはFTP専用なのでホームディレクトリは別の場所に指定しています。というより、指定してつもりでした。

どうやらユーザ作成時のホームディレクトリ設定ミスのようです。
(一応シェルスクリプトでユーザ登録は簡素化してるんですが、おそらく存在しないディレクトリを指定してしまったのでしょう。ftp用ユーザ生成スクリプトはいずれ公開する予定です)

ということで、ここから今日の本題です。

まずユーザ情報を確認します。
fingerコマンドを利用します。

[root@localhost etc]# finger eji
Login: eji Name: (null)
Directory: /home/eji Shell: /sbin/nologin
Never logged in.
No mail.
No Plan.


やはり、ホームディレクトリが想定していたのと違う場所になっていたので、修正ます。

ホームディレクトリの修正はusermodを使います。

[root@localhost etc]# usermod -d /var/ftp/ eji
/sbin/restorecon: error while labeling files under /home/eji
usermod: warning: unable to relabel the homedir /home/eji for eji.

変更後なにやらエラーやら警告やら出ましたが、fingerで確認すると変更されていたのでよしとします。
FTPクライアントからのログインも可能となりました。

参考:
@ITユーザー情報を調べるには
【 usermod 】 ユーザーのアカウント情報を変更する
[PR]
by jehoshaphat | 2008-08-12 09:34 | Linux | Trackback | Comments(0)