2008年8月30日土曜日

SELinux

/etc/selinux/config

6行目をSELINUX=disabled

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - SELinux is fully disabled.
SELINUX=disabled
# SELINUXTYPE= type of policy in use. Possible values are:
# targeted - Only targeted network daemons are protected.
# strict - Full SELinux protection.
SELINUXTYPE=targeted

ESCシーケンス

ESC [y; xH カーソルを(y、x)位置に移動。
BASICのLocate の働き。Turbo-Cの gotoxy と同じ働き
ESC [nA カーソルをn行アップ
ESC [nB カーソルをn行ダウン
ESC [0J カーソル位置から最終行の右端までをクリア
ESC [1J 先頭行の左端からカーソル位置までをクリア
ESC [2J 画面消去 BASICの Cls と同じ働き
ESC [2K カーソルのある行をクリア
ESC [>5h カーソル非表示
ESC [>5l カーソル表示
ESC [s カーソル位置と表示文字の属性をセーブ
ESC [u ESC [sでセーブした内容にカーソルを戻す
ESC [ps;..........;ps m 表示文字の属性を指定。psの値の意味は下
0 既定値       1 高輝度    2 縦線
4 下線        5 点滅      7 反転
30 黒        18、34 青    17、31 赤
19、35 紫     20、32 緑    22、36 水色
21、33 黄色    23、37 白   40 黒反転
44 青反転      41 赤反転    45 紫反転
42 緑反転      46 水色反転  43 黄色反転
47 白反転 

2008年8月8日金曜日

SolarisでBasic Security Module (BSM)

# vi audit_control
以下の行を変更する
flags:
minfree:20

flags:ex, lo
minfree:20


# shutdown -i1 -g0 -y


Type control-d to proceed with normal startup,
(or give root password for system maintenance):
single-user privilege assigned to /dev/console.
Entering System Maintenance Mode

Jul 11 19:27:48 su: 'su root' succeeded for root on /dev/console
Sun Microsystems Inc. SunOS 5.9 Generic May 2002

# who -r
. run-level 1 7月 11日 19:25 1 0 3
# /etc/security/bsmconv
このスクリプトを使って Basic Security Module (BSM) を有効にします。
変換を続けますか? [y/n] y
bsmconv: 情報: 起動ファイルを検査しています。
bsmconv: 情報: /etc/rc3.d/S81volmgt に移動します。
bsmconv: 情報: 監査モジュールをオンにしています。
bsmconv: 情報: デバイス割り当てファイルを初期化しています。

Basic Security Module は準備ができています。
エラーがあればここで修正してください。
/etc/security のファイルを編集して BSM を構成してください。
ここで、BSM を有効にして、このシステムをリブートして起動します。
# shutdown -i6 -g0 -y
#
INIT: New run level: 6
The system is coming down. Please wait.
System services are now being stopped.

# vi audit_startup
以下の行を追加する
/usr/sbin/auditconfig -setpolicy +argv
/usr/sbin/auditconfig -setpolicy +seq

# auditreduce | praudit | tail
path,/usr/sbin/praudit
attribute,100555,root,bin,85,7537,0
subject,vauser,root,other,root,other,6432,5828,868 131095 133.108.22.101
return,成功,0
header,123,2,execve(2),,2007年07月12日 (木) 11時14分29秒 JST, + 783 ミリ秒
path,/usr/bin/tail
attribute,100555,root,bin,85,6373,0
subject,vauser,root,other,root,other,6433,5828,868 131095 133.108.22.101
return,成功,0
file,2007年07月12日 (木) 11時14分29秒 JST, + 0 msec,
#

2008年8月7日木曜日

Solarisで、開いているポート

cd /proc ; pfiles * | egrep "^[0-9]|sockname"

2008年7月30日水曜日

Macのホスト名

/private/etc/hostconfigに"HOSTNAME=MacBook.tsystem.gr.jp"

2008年7月4日金曜日

Aptana

「Aptana Studio」のWebサイトのダウンロードページから自分の環境に合ったものをダウンロード
インストーラ付とZIP圧縮ファイルの2種類がありますが、ZIP圧縮ファイル版ですと、Javaの環境を別途導入しなければいけないので注意
Eclipseプラグインの「Pleiades」を使用
「pleiades_x.x.x.zip」を解凍し、「plugins」「features」のフォルダの中身をAptana Studioが格納されたフォルダにある同名のフォルダ内にコピー
Aptana Studioのインストール先のフォルダ内にある「AptanaStudio.ini」の最終行に次の1行を追加する。
-javaagent:plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar=default.splash
Aptana Studioを「-clean」起動する。
Windowsではpleiadesのフォルダにある「eclipse.exe -clean.cmd」をエディタで編集して使う。5行目を「start .\AptanaStudio.exe -clean %*」に変更

2008年7月2日水曜日

\Documents and Settings\indou\Local Settings\Temporary Interne

DATE :20080701
MACHINE :
OS :Windows XP Pro
LANGUAGE :
DATABASE :
APPLICATION:
REFERENCE :
CONTENTS :C:\Documents and Settings\indou\Local Settings\Temporary Interne
t Files以下のファイルが見えない。
DETAIL :C:\Documents and Settings\indou\Local Settings\Temporary Interne
t Files以下のファイルがエクスプローラで表示されない。
エクスプローラの表示オプション
[ツール(T)]-[フォルダオプション(O)]-表示タブ
 ファイルおよびフォルダ
  Webページとフォルダを対にして管理します。
   ●対になった部分をひとつのファイルとして表示し、管理もひとつのファイル
として行います。
   ○対になった不部分を両方とも表示し、管理は一つのファイルとして行います。
   ○対になった部分を両方とも表示しますが、管理は別々に行います。
  V アドレスバーにファイルのパス名を表示する
  V エクスプローラに簡易フォルダ表示を使用する
  V システムフォルダの内容を表示する
  V タイトルバーにファイルのパス名を表示する
  V ネットワークのフォルダとプリンタを自動的に検索する
  ファイルとフォルダの表示
   ●すべてのファイルとフォルダを表示する
   ○隠しファイルおよび隠しフォルダを表示しない
  V フォルダとデスクトップの項目の説明をポップアップで表示する
  V フォルダのヒントにファイルサイズ情報を表示する
  □マイコンピュータにコントロールパネルを表示する
  □ログオン時に以前のフォルダウィンドウを表示する
  V 暗号化や圧縮されたNTFSファイルをカラーで表示する
  V 各フォルダの表示設定を保存する
  V 簡易ファイルの共有を使用する(推奨)
  □縮小版をキャッシュしない
  □別のプロセスでフォルダウィンドウを開く
  □保護されたオペレーティングシステムファイルを表示しない(推奨)

エクスプローラ上では、C:\Documents and Settings\indou\Local Settings\Tempora
ry Internet Filesフォルダ内には何も表示されない。

Local Settings自体も見えないが、/ahオプションで見れる。

C:\Documents and Settings\indou>dir
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は D84B-A9E2 です

C:\Documents and Settings\indou のディレクトリ

2008/06/25 13:55 .
2008/06/25 13:55 ..
2008/02/05 10:29 178 .bash_history
2008/06/09 18:41 .freemind
2008/02/25 15:42 278,016 20080225.xls
2008/06/04 13:52 Favorites
2008/07/01 18:42 My Documents
2007/12/17 17:52 スタート メニュー
2008/07/01 11:31 デスクトップ
2 個のファイル 278,194 バイト
7 個のディレクトリ 2,918,924,288 バイトの空き領域

C:\Documents and Settings\indou>dir /ah
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は D84B-A9E2 です

C:\Documents and Settings\indou のディレクトリ

2008/07/01 11:22 Application Data
2008/05/27 19:56 Local Settings
2008/06/30 17:38 NetHood
2008/07/01 18:21 4,194,304 NTUSER.DAT
2008/07/01 19:29 1,024 ntuser.dat.LOG
2008/07/01 18:21 278 ntuser.ini
2007/12/17 17:52 PrintHood
2008/07/01 19:18 Recent
2008/01/21 16:14 SendTo
2007/12/17 18:02 Templates
3 個のファイル 4,195,606 バイト
7 個のディレクトリ 2,918,924,288 バイトの空き領域

C:\Documents and Settings\indou>cd local*

C:\Documents and Settings\indou\Local Settings>dir
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は D84B-A9E2 です

C:\Documents and Settings\indou\Local Settings のディレクトリ

2008/05/27 19:56 Apps
2008/07/01 19:32 Temp
0 個のファイル 0 バイト
2 個のディレクトリ 2,918,879,232 バイトの空き領域

C:\Documents and Settings\indou\Local Settings>dir /ah
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は D84B-A9E2 です

C:\Documents and Settings\indou\Local Settings のディレクトリ

2008/05/27 19:56 .
2008/05/27 19:56 ..
2008/06/18 13:07 Application Data
2008/07/01 18:22 62 desktop.ini
1 個のファイル 62 バイト
3 個のディレクトリ 2,918,879,232 バイトの空き領域

C:\Documents and Settings\indou\Local Settings>
C:\Documents and Settings\indou\Local Settings>dir /as
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は D84B-A9E2 です

C:\Documents and Settings\indou\Local Settings のディレクトリ

2008/07/01 18:22 62 desktop.ini
2008/01/21 16:14 History
2008/01/21 16:14 Temporary Internet Files
1 個のファイル 62 バイト
2 個のディレクトリ 2,918,879,232 バイトの空き領域

C:\Documents and Settings\indou\Local Settings>cd temp*

C:\Documents and Settings\indou\Local Settings\Temp>cd ..

C:\Documents and Settings\indou\Local Settings>cd Tempo*

C:\Documents and Settings\indou\Local Settings\Temporary Internet Files>dir
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は D84B-A9E2 です

C:\Documents and Settings\indou\Local Settings\Temporary Internet Files の
ディレクトリ

ファイルが見つかりません

C:\Documents and Settings\indou\Local Settings\Temporary Internet Files>

C:\Documents and Settings\indou\Local Settings\Temporary Internet
Files>dir /ah
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は D84B-A9E2 です

C:\Documents and Settings\indou\Local Settings\Temporary Internet Files の
ディレクトリ

2008/07/01 15:59 Content.MSO
2008/01/21 16:14 67 desktop.ini
1 個のファイル 67 バイト
1 個のディレクトリ 2,918,879,232 バイトの空き領域

C:\Documents and Settings\indou\Local Settings\Temporary Internet
Files>dir /as
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は D84B-A9E2 です

C:\Documents and Settings\indou\Local Settings\Temporary Internet Files の
ディレクトリ

2008/01/21 16:14 .
2008/01/21 16:14 ..
2008/07/01 19:18 Content.IE5
2008/01/21 16:14 67 desktop.ini
1 個のファイル 67 バイト
3 個のディレクトリ 2,918,879,232 バイトの空き領域

C:\Documents and Settings\indou\Local Settings\Temporary Internet Files>

dir /as (システム)だと、Content.IE5があり、dir /ah (隠しファイル)すると、Con
tent.MSOフォルダが存在する。

2008年6月29日日曜日

7.10から8.04にアップグレードすると、X起動時にxkbのエラー。

/etc/X11/xorg.confの
Option "XkbVariant" "latin,"
をコメントアウト。

xkbのエラー。

---
Error activating XKB configuration.
It can happen under various circumstances:
- a bug in libxklavier library
- a bug in X server (xkbcomp, xmodmap utilities)
- X server with incompatible libxkbfile implementation

X server version data:
The X.Org Foundation
10400090

If you report this situation as a bug, please include:
- The result of xprop -root | grep XKB
- The result of gconftool-2 -R /desktop/gnome/peripherals/keyboard/kbd


REFERENCE:https://bugs.launchpad.net/ubuntu-jp-improvement/+bug/217210

以下でもいいみたい。

[システム]->[設定]->[キーボード]の"レイアウト"の[追加]で、「レイアウト:日本」の
キーボードを追加し、既存のキーボードレイアウトを削除してください。

xorg.confを修正する必要はありません。



2008年6月23日月曜日

プロセス間通信(IPC) のシステムチューニング

DATE       :20080623
MACHINE :
OS :Sun OS 5.10
LANGUAGE :
DATABASE :
APPLICATION:
REFERENCE :http://sdc.sun.co.jp/news/private/2006/10/tech_sol0610.html
CONTENTS :
DETAIL :

セマフォなどのプロセス間通信(IPC) のシステムチューニングは、Solaris のリソース管理フレームワークで置き換えられました。 これまでのように /etc/system ファイルにシステム・チューニング・パラメタを記述してシステムの再起動を行う必要はありません。 prctl(1) コマンドを使って、リソースのコントロール値を変更することができます。
しかし、これまでチューニングを必要とした多くのアプリケーションは、デフォルト値の増大とリソースの自動割り当てによってチューニングすることなく動作する可能性があります。 以下の新しいリソースコントロールと旧パラメタの対応表を確認してください。
新リソース制御 新デフォルト値 旧パラメタ 旧デフォルト値 最大値
process.max-msg-qbytes 65536 msginfo_msgmnb 4096 ULONG_MAX
process.max-msg-qbytes 65536 msginfo_msgmnb 4096 ULONG_MAX
process.max-msg-messages 8192 msginfo_msgtql 40 UINT_MAX
process.max-sem-ops 512 seminfo_semopm 10 INT_MAX
process.max-sem-nsems 512 seminfo_semmsl 25 SHRT_MAX
project.max-shm-memory 物理メモリーの 1/4 shminfo_shmmax 0x800000 UINT64_MAX
project.max-shm-ids 128 shminfo_shmmni 100 224
project.max-msg-ids 128 msginfo_msgmni 50 224
project.max-sem-ids 128 seminfo_semmni 10 224
また、これらの変更にともない、下記の IPC チューニングパラメタは Solaris 10 では削除されており、これらが /etc/system に記述されている場合、コメントとして扱われ、システムの動作には影響しません。
    semsys:seminfo_semmns、 semsys:seminfo_semvmx、 semsys:seminfo_semmnu、 semsys:seminfo_semaem、 semsys:seminfo_semume、 semsys:seminfo_semusz、 semsys:seminfo_semmap、 shmsys:shminfo_shmseg、 shmsys:shminfo_shmmin、 msgsys:msginfo_msgmap、 msgsys:msginfo_msgseg、 msgsys:msginfo_msgssz、 msgsys:msginfo_msgmax

※ IPC のチューニングパラメタに関する変更は、SMF によるものではなくリソース管理の導入によるものです。

ブート中に ata がタイムアウトになる (6586621)

DATE       :20080623
MACHINE :x86
OS :SunOS 5.10
LANGUAGE :
DATABASE :Oracle 10.2.0
APPLICATION:
REFERENCE :
CONTENTS :ブート中に ata がタイムアウトになる (6586621)
DETAIL :
vmware server 上でもなる。

Intel マルチプロセッサシステムでのシステムのブート中に ata ドライバがタイムアウトになることがあります。
これらのタイムアウトは、HBA コントローラが従来の ata ドライバにバインドされたドライブ上に、ルートデバイスが置かれている場合に発生します。
これらのタイムアウトにより、システムのブート中に一時ハングアップ、深刻なハングアップ、またはパニック状態が発生して、次のようなコンソールメッセージが表示されます。

scsi: [ID 107833 kern.warning] WARNING: /pci@0,0/pci-ide@1f,2/ide@0 (ata0):
timeout: reset bus, target=0 lun=0
scsi: [ID 107833 kern.warning] WARNING: /pci@0,0/pci-ide@1f,2/ide@0 (ata0):
timeout: early timeout, target=0 lun=0
gda: [ID 107833 kern.warning] WARNING: /pci@0,0/pci-ide@1f,2/ide@0/cmdk@0,0 (Disk0):
Error for command 'read sector' Error Level: Informational
gda: [ID 107833 kern.notice] Sense Key: aborted command
gda: [ID 107833 kern.notice] Vendor 'Gen-ATA ' error code: 0x3
gda: [ID 107833 kern.warning] WARNING: /pci@0,0/pci-ide@1f,2/ide@0/cmdk@0,0 (Disk0):
Error for command 'read sector' Error Level: Informational
gda: [ID 107833 kern.notice] Sense Key: aborted command
gda: [ID 107833 kern.notice] Vendor 'Gen-ATA ' error code: 0x3
scsi: [ID 107833 kern.warning] WARNING: /pci@0,0/pci-ide@1f,2/ide@0 (ata0):
timeout: abort request, target=0 lun=0
scsi: [ID 107833 kern.warning] WARNING: /pci@0,0/pci-ide@1f,2/ide@0 (ata0):
timeout: abort device, target=0 lun=0
scsi: [ID 107833 kern.warning] WARNING: /pci@0,0/pci-ide@1f,2/ide@0 (ata0):
timeout: reset target, target=0 lun=0
scsi: [ID 107833 kern.warning] WARNING: /pci@0,0/pci-ide@1f,2/ide@0 (ata0):
timeout: reset bus, target=0 lun=0
scsi: [ID 107833 kern.warning] WARNING: /pci@0,0/pci-ide@1f,2/ide@0 (ata0):
timeout: early timeout, target=0 lun=0
gda: [ID 107833 kern.warning] WARNING: /pci@0,0/pci-ide@1f,2/ide@0/cmdk@0,0 (Disk0):
Error for command 'read sector' Error Level: Informational
gda: [ID 107833 kern.notice] Sense Key: aborted command
gda: [ID 107833 kern.notice] Vendor 'Gen-ATA ' error code: 0x3


gda: [ID 107833 kern.warning] WARNING: /pci@0,0/pci-ide@1f,2/ide@0/cmdk@0,0 (Disk0):

  • 回避方法 1: BIOS の AHCI を有効にします (システムで使用できる場合)。この設定を有効にするには、Solaris OS を再インストールする必要があります。

  • 回避方法 2: ata ドライバを使用しないコントローラ上のディスクに Solaris をインストールします。

  • 回避方法 3: シングルプロセッサが有効になるように、BIOS 設定の MP を無効にします。

  • 回避方法 4: シングルプロセッサが有効になるように、Solaris の MP を無効にします。GRUB (Grand Unified Bootloader) メニューから次の手順を実行します。

    1. e と入力して、選択した Solaris エントリを編集します。

    2. カーネルで始まる行に移動します。

    3. e と入力して、GRUB 編集モードに切り替えます。

    4. -kd をその行に追加します。

    5. Enter キーを押して変更を受け入れます。

    6. b と入力して、選択した Solaris エントリをブートします。

    7. kbmd プロンプトで、次のコマンドを入力します。


      use_mp/W 0 :c
    8. システムのブートを実行する場合は、手順 10 に進みます。そうでない場合は、Solaris 10 5/08 ソフトウェアをインストールします。

    9. インストールの終わりに、システムをリブートします。手順 1 〜 7 を繰り返します。

    10. この変更を永続的なものにして、以降のブートで上記の手順を繰り返す必要がないようにするには、次の手順を実行します。

      システムのブートが完了したら、スーパーユーザーになります。

    11. /etc/system ファイルを開きます。

    12. 次の行を追加します。


      set use_mp = 0
  • 回避方法 5: マイクロコードの更新を無効にします。次のコマンドを入力します。


    # mv /platform/i86pc/ucode /platform/i86pc/ucode.disabled

    マイクロコードの更新は、システムが起動したあとに手動で呼び出すことができます。


    # ucodeadm -u /platform/i86pc/ucode.disabled/intel-ucode.txt

Sun Microsystems Documentationより

2008年6月2日月曜日

dtlogin

dtlogin を有効/無効にする方法
/usr/dt/bin/dtconfig コマンドを使用して設定できます。

/usr/dt/bin/dtconfig -d (オートスタートを無効にする)
/usr/dt/bin/dtconfig -e (オートスタートを有効にする)
/usr/dt/bin/dtconfig -kill (dtlogin を終了させる)
/usr/dt/bin/dtconfig -reset (dtlogin をリスタートさせる)
/usr/dt/bin/dtconfig -p (printer action update)
/usr/dt/bin/dtconfig -inetd (inetd.conf /usr/dt daemons)
/usr/dt/bin/dtconfig -inetd.ow (inetd.conf /usr/openwin daemons)
TCP 関連のチューニングを行なうSolaris を、Web アプリケーションサーバーとして使用する場合、幾つかチューニングを行なうことでパフォーマンスを向上させることが出来ます。
ストリームドライバのキューサイズと TCP に対するハッシュサイズを制御します。0 に設定すると無限になるので、パフォーマンスはバッファの容量不足による影響を受けなくなります。(安全値の目安は、64MのRAMなら25、128Mなら50ぐらい)/etc/system ファイルに記述します。
set sq_max_size = 0 (デフォルトは 2) set tcp:tcp_conn_hash_size = 262144 (デフォルトは 256)TCPスタックに関するパラメータを ndd コマンドで設定します。/etc/init.d/inetinit に記述しておくことでシステム起動時に設定されます。(Solaris のバージョンによってはパッチが必要です)
ndd -set /dev/tcp tcp_close_wait_interval 60000 (240000) ndd -set /dev/tcp tcp_time_wait_interval 60000 (240000) ndd -set /dev/tcp tcp_mss_max 6000 ndd -set /dev/tcp tcp_fin_wait_2_flush_interval 16000 ndd -set /dev/ip ip_path_mtu_discovery 0 ndd -set /dev/tcp tcp_conn_req_max_q 1024 (128) ndd -set /dev/tcp tcp_conn_req_max_q0 4096 (1024) ndd -set /dev/tcp tcp_conn_req_min 1 ndd -set /dev/tcp tcp_xmit_hiwat 65535 (送信バッファ:8129) ndd -set /dev/tcp tcp_recv_hiwat 65535 (受信バッファ:8129) ndd -set /dev/tcp tcp_cwnd_max 65534 ndd -set /dev/tcp tcp_keepalive_interval 90000 (負荷が大きい場合小さく:720000) ndd -set /dev/tcp tcp_ip_abort_interval 60000 (480000) ndd -set /dev/tcp tcp_ip_abort_cinterval 60000 (480000) ndd -set /dev/tcp tcp_rexmit_interval_initial 3000 (再転送率が 30-40% を超える場合大きく:3000) ndd -set /dev/tcp tcp_rexmit_interval_min 3000 (200) ndd -set /dev/tcp tcp_rexmit_interval_max 10000 (240000) ndd -set /dev/tcp tcp_smallest_anon_port 1024 (32768) ndd -set /dev/tcp tcp_conn_grace_period 500 ndd -set /dev/ip ip_ignore_redirect 1 ndd -set /dev/tcp tcp_slow_start_initial 2 (Solaris 2.5, 2.6の場合)
 

Solarisでフロッピーのフォーマット

フロッピーディスクをフォーマットする方法
1.フロッピーディスクをフロッピードライブに挿入する。まず、フロッピーディスクをフロッピードライブに挿入してください。
2.ボリュームマネージャにフロッピーの挿入を通知する。ボリュームマネージャの管理するボリューム情報を更新するには、volcheckコマンドを使います。
$ volcheck -v
volcheckコマンドを実行した際、下記のどちらかのメッセージが表示されます。
◆media was foundボリュームマネージャがフロッピーディスクを検出して、それを/floppyディレクトリにマウントしようとします。フロッピーディスクがくフォーマットされていると、エラーメッセージは表示されません。フロッピーディスクがフォーマットされていない場合、以下のメッセージが出力されます。
fd0: unformatted diskette or no diskette in the drivefd0: read failed (40 1 0)fd0: bad format
◆no media was foundボリュームマネージャがフロッピーディスクを検出できない場合に表示されます。フロッピーディスクがフロッピーディスクに正しく挿入されているか確認し、volcheckコマンドを再度試みます。それでも、うまくいかない場合は、フロッピーディスクもしくはドライブに損傷の可能性があります。
3.フロッピーディスクがマウントされていることを確認する。
$ ls /floppyfloppy0 noname
これ以降、ファイルシステムの一部として通常のコマンドでフロッピディスクにアクセスすることが可能になります。フロッピーディスクをフロッピードライブから取り出すには、ejectコマンドを使います。
$ eject floppy
フロッピードライブが自動排出の場合、ejectコマンドを実行してから手動で取り出してください。デバイスが使用中かどうかを調べるには、fuserコマンドを使用することもできます。
また、ボリュームマネージャが動作していない場合、mountコマンドを実行すればフロッピーディスクを手動でマウントすることができます。
4.フロッピーディスクのフォーマットまず、DOSフォーマットでフロッピーディスクをフォーマットします。フォーマットには、fdformatコマンドを使います。
$ fdformat -v -U -b floppyFormatting 1.44 MB in /vol/dev/rdiskette0/nonamePress return to start formatting floppy. ← Returnキーを押してください。
次に、UFSでフロッピーディスクをフォーマットします。UFSでディスクをフォーマットするときには、DOSフォーマットのフロッピーディスクにUFSファイルシステムを作成します。フォーマットには、newfsコマンドを使います。
$ /usr/sbin/newfs -v /vol/dev/aliases/floppy0newfs: construct a new file system /vol/dev/aliases/floppy0:(y/n)? y ← yを入力mkfs -F ufs /vol/dev/aliases/floppy0 2880 18 2 8192 1024 16 10 5 2048 t 0 -1 8 16/vol/dev/aliases/floppy0:     2880 sectors in 80 cylinders of 2 tracks, 18 sectors     1.4MB in 5 cyl groups (16 c/g, 0.28MB/g, 128 i/g)super-block backups (for fsck -F ufs -o b=#) at:32, 640, 1184, 1792, 2336,
フロッピーディスクのフォーマットが完了したら、volrmmountコマンドでディスクの挿入をボリュームマネージャに通知し直します。-iオプションは、ディスクの挿入を通知するオプションです。
$ volrmmount -i floppy0
volrmmountコマンドを実行すると、rmmountコマンドを起動してリムーバブルデバイスのマウントやアンマウントをすることができます。アンマウントする場合は、-eオプションを指定してください。

2008年3月20日木曜日

SL-C760で、pdaXrom

REFERENCE:http://journal.mycom.co.jp/special/2005/pdaxrom/001.html

(1). ACアダプターの接続

(2). 本体裏側の電池交換スイッチを「解除(交換時)」側に切り替え
(3). 5秒待ってから、[Fn] 及び [Home] の二つのキーを同時に押しながら、電池交換スイッチを元の位置「ロック(使用時)」に切り替え
(4). 背面もしくはキーボードの [OK]ボタンを押しながら、本体背面の電源ボタンを押す
(5). メンテナンスメニューが表示される
・ 4. アップデートを押す
・ アップデート経路が表示される
・ 3.SDを押す
・アップデート警告の表示
・はい(Y)を押す
(6). pdaXrom Installer (SD-C760 54277/69632)
・3 NAND Flash Utilsを押す
・NAND Flash utilsメニューが表示される
・Resize root partitionを押す
・Enter new root partition size
・121M
・Repartition finished.
・OK
・リブートされる
・1. Install new ROM
を押す

9. pdaXrom Installer
Congratulation!!!
10. 6 Reboot

2008年3月7日金曜日

MBRのバックアップ

root@R60e:~# dd if=/dev/sda of=mbr bs=512 count=1
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.0396889 seconds, 12.9 kB/s
root@R60e:~# ls -ltr
合計 4
-rw-r--r-- 1 root root 512 2008-03-07 09:46 mbr
root@R60e:~#

★リストアする場合は、ddコマンドでMBRを書き戻せばいい。

# dd if=~/mbr of=/dev/hda bs=446 count=1
読み込んだブロック数は 1+0
書き込んだブロック数は 1+0

#

2008年3月6日木曜日

ネットワークドライブへのDOSでの接続

ネットワークドライブへの接続

net use t: /delete
net use t: \\xxx.xxx.xxx.xxx\indou

ファイルタイプの調査

#コマンドプロンプトで、.jsを実行すると、WZ Editorが立ち上がってしまう。

C:\cygwin\home\indou\src\wsh>tst0380.js

#拡張子のファイルタイプを調べる
C:\cygwin\home\indou\src\wsh>assoc .js
.js=JSFile

#ファイルタイプJSFileには、何が関連付けられているか

C:\cygwin\home\indou\src\wsh>ftype JSFile
JSFile=%SystemRoot%\System32\CScript.exe "%1" %*

C:\cygwin\home\indou\src\wsh>tst0380.js


#これでは解決しなかった。そこで、エクスプローラのツールのフォルダオプションを開く
#ファイルタイプタブの拡張子がJSを選択し、元に戻すボタンで戻った

2008年3月5日水曜日

Solarisでのリムーバブルメディアの管理方法

バージョン2.2以降のSolarisでは、フロッピーディスクやCD-ROMなどの着脱可 能な、いわゆるリムーバブルメディアの管理方法が大きく変わりました。vold と呼ばれる特別なデーモンが存在して、これらのメディアをドライブにセット すると必要に応じてシステムで決められたディレクトリにマウントしてくれる というものです。この機能により、スーパーユーザ特権を持たない一般のユー ザでも自由にファイルシステムのマウント、アンマウントが行なえるのです。 この部分はSolarisにおいてもっとも頻繁な変更の行なわれている部分であり、 デバイス名などの扱いもSolaris 2.2と2.3の間でも変わっているのですが、と りあえずここでは、Solaris 2.2におけるvoldの概略について述べることにし ます。


フロッピーディスクの使用

Solarisでは、フロッピーディスクを何通りかの方法で使用することが可能になっ ています。

ファイルシステムの一部として使用 ufs、pcfs
バックアップメディアとして使用 tar、cpio
ufsやpcfsのようにフロッピーディスクをUNIXファイルシステムの一部として扱 う場合は、当然マウント、アンマウントの必要があります。しかし、フロッピー ディスクは本来頻繁に抜き差しするものです。これを毎回マウント、アンマウン トしていては大変面倒です。しかも、マウント、アンマウントの操作はスーパー ユーザ以外は行なうことができません。

そこで、Solarisではボリュームマネージャvoldがこのようなリムーバブルメディ アの管理を引き受けるようになっています。すでにフォーマット済みでファイル システムが構築されたメディアについては、ドライブに挿入すれば所定のマウン トポイントに自動的にマウントされ、エジェクトすれば自動的にマウントが解除 されるようになっています。

ここで、フロッピーディスクドライブの使用法について注意をしておきます。ま ず、ディスケットを挿入する方向ですが、基本的にはPCと同じく、ディスケット のラベルを上にして、スリットに差し込みます。ただし本体が縦置きになってい る場合は、よく本体の向きを確かめて下さい。また、PCのドライブと違って、 挿入口にエジェクト用ボタンがついていません。ディスケットの取り出しには、 ejectコマンドを使います。


eject
とすれば、ドライブからディスケットが出てきます。


メディアのチェック

常にフロッピーディスクドライブが動作している状態では、ディスケットはす ぐに摩耗してしまいます。そのため、ただドライブにディスケットを入れただけ ではまだドライブは回転しないようになっています。

ディスケットを挿入したら、 volcheckというコマンドを実行して下さい。 ディスケットのシャッタが開いて、ドライブが動作し始めます。これで、ボリュー ムマネージャがディスケットを認識したことになります。

もし、このディスケットがこの後述べるフォーマットとファイルシステム作成の 済んだものであれば、 volcheckを実行するだけで一気にマウントまででき てしまいます。そして、取り出したいときは ejectコマンドを実行するだ けでボリュームマネージャがアンマウントまで行なってくれます。

しかし、いまはまだフォーマットされていないディスケットを使いますから、利 用者が自分でフォーマット、ファイルシステムの作成を行なわなければなりませ ん。


ufs形式でのフォーマット

Solarisでは、 fdformatというコマンドで、フロッピーディスクのufsフォー マットを行います。


fdformat
このとき、 fdformat: can't read verify data, I/O error とか No such volume (or no media in specified device): floppy といった エラーメッセージが表示される場合がありますが、その場合は volcheck fdformatを2、3回繰り返せばうまくいきます。

ipca6:[209]fdformat
Press return to start formatting floppy in /vol/dev/rfd0/unformatted.
................................................................................
このとき表示されるデバイス名 /vol/dev/rfd0/unformattedに注意して下 さい。これは、ボリュームマネージャがドライブに挿入されたディスケットをチェッ クして自動的に作成したデバイスファイルです。なお、Solaris 2.3以降では /vol/dev/rfd0が /vol/dev/rdiskette0になります。
フォーマットが完了したら、 newfsコマンドでフロッピーディスク上にファ イルシステムを構成します。 ls -l /vol/dev/rfd0を実行し、newfsの対象と なるデバイスファイル名を確認しておきましょう。


ipca6:[210]:newfs /vol/dev/rfd0/unnamed_floppy
newfs: construct a new file system /vol/dev/rfd0/unnamed_floppy: (y/n)? y
/vol/dev/rfd0/unnamed_floppy: 2880 sectors in 80 cylinders of 2 tracks, 18 sectors
1.5MB in 5 cyl groups (16 c/g, 0.29MB/g, 128 i/g)
(fsck -F ufs -o b=# のための) スーパーブロックバックアップ:
32, 640, 1184, 1792, 2336,

ufsマウント

ボリュームマネージャが動作していれば、実は今フォーマットしたディスクをマ ウントするのにスーパーユーザになる必要はありません。一度 ejectして から、もう一度ドライブに挿入し、 volcheckを行なうだけです。これだけ でディレクトリ /floppyの下にフロッピーディスクがマウントされます。


DOSフォーマットでの利用

Solarisでは、PCとのデータの互換性を考慮して、DOSフォーマット、すなわち pcfsでフロッピーディスクを利用することができます。

DOSフォーマットは、さらにIBM-PC互換機で使われている1.44Mbフォーマット、 720Kbフォーマット、NECのPCで使われている1.2Mbフォーマットに分かれます。 Solarisのファイルシステムはこの3種類とも使用可能なのですが、残念ながら 皆さんの実習で使用するマシンのドライブでは1.2Mbフォーマットに対応してい ません。NECのパソコンでデータを読みたければ、2DDのディスクで720Kbフォー マットにしておけば読むことは可能になるはずです。

いずれのフォーマットでも、 volcheckをかけるところまではufsの場合と 変わりません。その後は、


高密度:1.44Mb
fdformat -d
中密度:1.2Mb
fdformat -m -t nec
低密度:720Kb
fdformat -l

とします。pcfsの場合、newfsコマンドを実行する必要はありません。 そして eject挿入 volcheckとすれば、 自動的に /floppyディレクトリの下にマウントされます。
あとは通常のコマンドを用いてファイルを操作できますが、ファイル名などに DOSフォーマット特有の制限があるのを忘れないで下さい。


tar、cpio

これらの伝統的なUNIXコマンドは、デバイスファイルを指定して使用します。 voldが動作している場合、これらのコマンドで使用するデバイス名は /vol/dev/fd0/ media-name(ブロックデバイス)、 /vol/dev/ rfd0/ media-name(キャラクタデバイス)となります。 media-nameは volcheckをかけたときのディスケットの状態により unformatted、 unnamedなどになります。volcheckの後に ls -l /vol/dev/fd0を実行し て調べてみると良いでしょう。また、Solaris 2.3以降では、''fd0''、''rfd0'' がそれぞれ ''diskette''、''rdiskette''に

Solarisで、TCP 関連のチューニングを行なう

TCP 関連のチューニングを行なう
Solaris を、Web アプリケーションサーバーとして使用する場合、幾つかチューニングを行なうことでパフォーマンスを向上させることが出来ます。

ストリームドライバのキューサイズと TCP に対するハッシュサイズを制御します。0 に設定すると無限になるので、パフォーマンスはバッファの容量不足による影響を受けなくなります。(安全値の目安は、64MのRAMなら25、128Mなら50ぐらい)/etc/system ファイルに記述します。

set sq_max_size = 0 (デフォルトは 2)
set tcp:tcp_conn_hash_size = 262144 (デフォルトは 256)
TCPスタックに関するパラメータを ndd コマンドで設定します。/etc/init.d/inetinit に記述しておくことでシステム起動時に設定されます。(Solaris のバージョンによってはパッチが必要です)

ndd -set /dev/tcp tcp_close_wait_interval 60000 (240000)
ndd -set /dev/tcp tcp_time_wait_interval 60000 (240000)
ndd -set /dev/tcp tcp_mss_max 6000
ndd -set /dev/tcp tcp_fin_wait_2_flush_interval 16000
ndd -set /dev/ip ip_path_mtu_discovery 0
ndd -set /dev/tcp tcp_conn_req_max_q 1024 (128)
ndd -set /dev/tcp tcp_conn_req_max_q0 4096 (1024)
ndd -set /dev/tcp tcp_conn_req_min 1
ndd -set /dev/tcp tcp_xmit_hiwat 65535 (送信バッファ:8129)
ndd -set /dev/tcp tcp_recv_hiwat 65535 (受信バッファ:8129)
ndd -set /dev/tcp tcp_cwnd_max 65534
ndd -set /dev/tcp tcp_keepalive_interval 90000 (負荷が大きい場合小さく:720000)
ndd -set /dev/tcp tcp_ip_abort_interval 60000 (480000)
ndd -set /dev/tcp tcp_ip_abort_cinterval 60000 (480000)
ndd -set /dev/tcp tcp_rexmit_interval_initial 3000 (再転送率が 30-40% を超える場合大きく:3000)
ndd -set /dev/tcp tcp_rexmit_interval_min 3000 (200)
ndd -set /dev/tcp tcp_rexmit_interval_max 10000 (240000)
ndd -set /dev/tcp tcp_smallest_anon_port 1024 (32768)
ndd -set /dev/tcp tcp_conn_grace_period 500
ndd -set /dev/ip ip_ignore_redirect 1
ndd -set /dev/tcp tcp_slow_start_initial 2 (Solaris 2.5, 2.6の場合)

 

Solarisで、フロッピーディスクをフォーマットする方法

Solarisで、フロッピーディスクをフォーマットする方法

1.フロッピーディスクをフロッピードライブに挿入する。
まず、フロッピーディスクをフロッピードライブに挿入してください。

2.ボリュームマネージャにフロッピーの挿入を通知する。
ボリュームマネージャの管理するボリューム情報を更新するには、volcheckコマンドを使います。

$ volcheck -v

volcheckコマンドを実行した際、下記のどちらかのメッセージが表示されます。

◆media was found
ボリュームマネージャがフロッピーディスクを検出して、それを/floppyディレクトリにマウントしようとします。フロッピーディスクがくフォーマットされていると、エラーメッセージは表示されません。フロッピーディスクがフォーマットされていない場合、以下のメッセージが出力されます。

fd0: unformatted diskette or no diskette in the drive
fd0: read failed (40 1 0)
fd0: bad format

◆no media was found
ボリュームマネージャがフロッピーディスクを検出できない場合に表示されます。フロッピーディスクがフロッピーディスクに正しく挿入されているか確認し、volcheckコマンドを再度試みます。それでも、うまくいかない場合は、フロッピーディスクもしくはドライブに損傷の可能性があります。

3.フロッピーディスクがマウントされていることを確認する。

$ ls /floppy
floppy0 noname

これ以降、ファイルシステムの一部として通常のコマンドでフロッピディスクにアクセスすることが可能になります。フロッピーディスクをフロッピードライブから取り出すには、ejectコマンドを使います。

$ eject floppy

フロッピードライブが自動排出の場合、ejectコマンドを実行してから手動で取り出してください。デバイスが使用中かどうかを調べるには、fuserコマンドを使用することもできます。

また、ボリュームマネージャが動作していない場合、mountコマンドを実行すればフロッピーディスクを手動でマウントすることができます。

4.フロッピーディスクのフォーマット
まず、DOSフォーマットでフロッピーディスクをフォーマットします。フォーマットには、fdformatコマンドを使います。

$ fdformat -v -U -b floppy
Formatting 1.44 MB in /vol/dev/rdiskette0/noname
Press return to start formatting floppy. ← Returnキーを押してください。

次に、UFSでフロッピーディスクをフォーマットします。UFSでディスクをフォーマットするときには、DOSフォーマットのフロッピーディスクにUFSファイルシステムを作成します。フォーマットには、newfsコマンドを使います。

$ /usr/sbin/newfs -v /vol/dev/aliases/floppy0
newfs: construct a new file system /vol/dev/aliases/floppy0:(y/n)? y ← yを入力
mkfs -F ufs /vol/dev/aliases/floppy0 2880 18 2 8192 1024 16 10 5 2048 t 0 -1 8 16
/vol/dev/aliases/floppy0:     2880 sectors in 80 cylinders of 2 tracks, 18 sectors
     1.4MB in 5 cyl groups (16 c/g, 0.28MB/g, 128 i/g)
super-block backups (for fsck -F ufs -o b=#) at:
32, 640, 1184, 1792, 2336,

フロッピーディスクのフォーマットが完了したら、volrmmountコマンドでディスクの挿入をボリュームマネージャに通知し直します。-iオプションは、ディスクの挿入を通知するオプションです。

$ volrmmount -i floppy0

volrmmountコマンドを実行すると、rmmountコマンドを起動してリムーバブルデバイスのマウントやアンマウントをすることができます。アンマウントする場合は、-eオプションを指定してください。

dtlogin を有効/無効にする方法

dtlogin を有効/無効にする方法
/usr/dt/bin/dtconfig コマンドを使用して設定できます。
/usr/dt/bin/dtconfig -d (オートスタートを無効にする)
/usr/dt/bin/dtconfig -e (オートスタートを有効にする)
/usr/dt/bin/dtconfig -kill (dtlogin を終了させる)
/usr/dt/bin/dtconfig -reset (dtlogin をリスタートさせる)
/usr/dt/bin/dtconfig -p (printer action update)
/usr/dt/bin/dtconfig -inetd (inetd.conf /usr/dt daemons)
/usr/dt/bin/dtconfig -inetd.ow (inetd.conf /usr/openwin daemons)

2008年2月26日火曜日

gdb

1. ulimit -c unlimited # <- coreをはかせるように設定する。
2. ./hello
[indou@std tstPrg027]$ ./hello
セグメンテーション違反です
[indou@std tstPrg027]$
3. gdb hello core.10123

[indou@std tstPrg027]$ gdb hello core.10123
GNU gdb Red Hat Linux (6.3.0.0-1.153.el4_6.2rh)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux-gnu"...Using host libthread_db
library "/lib/tls/libthread_db.so.1".

Core was generated by `./hello'.
Program terminated with signal 11, Segmentation fault.
Reading symbols from /lib/tls/libc.so.6...done.
Loaded symbols for /lib/tls/libc.so.6
Reading symbols from /lib/ld-linux.so.2...done.
Loaded symbols for /lib/ld-linux.so.2
#0 0x00ae34a6 in strcpy () from /lib/tls/libc.so.6 # <- strcpyで止まっている。
(gdb) where # <- 関数呼び出しの状態を確認
#0 0x00ae34a6 in strcpy () from /lib/tls/libc.so.6
#1 0x080483d3 in main (argc=1, argv=0xbfe992b4) at hello.c:6
(gdb) up # <- strcpyの中で止まっているので、-gオプション付きでコンパイルされてないため、一つ上へ
#1 0x080483d3 in main (argc=1, argv=0xbfe992b4) at hello.c:6
6 strcpy(ptr, "hello, world\n");
(gdb) l 6
1 #include
2 #include
3 #include
4 int main(int argc, char *argv[]) {
5 char *ptr = NULL;
6 strcpy(ptr, "hello, world\n");
7 printf("%s", ptr);
8 return EXIT_SUCCESS;
9 }
(gdb) p ptr # <- NULLポインタへの書き込み
$1 = 0x0
(gdb) quit
[indou@std tstPrg027]$

Electric Fence

Electric Fence
[indou@std tstPrg029]$ cat mem.c
#include
#include
#include
int main(int argc, char *argv[]) {
char *buf;
int i;
buf = (char *)malloc(10);
for (i = 0; i < 20; i++) {
fprintf(stderr, "%d\n", i);
buf[i] = i;
}
return 0;
}
[indou@std tstPrg029]$ ./mem
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[indou@std tstPrg029]$ LD_PRELOAD=/usr/lib/libefence.so ./mem # <- プリロード

Electric Fence 2.2.0 Copyright (C) 1987-1999 Bruce Perens <bruce@perens.com>
0
1
2
3
4
5
6
7
8
9
10
11
12
セグメンテーション違反です
[indou@std tstPrg029]$ export EF_ALIGNMENT=1 # <-- 4byte単位の境界合わせをしない
[indou@std tstPrg029]$ LD_PRELOAD=/usr/lib/libefence.so ./mem

Electric Fence 2.2.0 Copyright (C) 1987-1999 Bruce Perens <bruce@perens.com>
0
1
2
3
4
5
6
7
8
9
10
セグメンテーション違反です
[indou@std tstPrg029]$
[indou@std tstPrg029]$ export EF_PROTECT_BELOW=1
[indou@std tstPrg029]$ ./mem2
2
1
0
-1
-2
[indou@std tstPrg029]$ LD_PRELOAD=/usr/lib/libefence.so ./mem2

Electric Fence 2.2.0 Copyright (C) 1987-1999 Bruce Perens <bruce@perens.com>
2
1
0
-1
セグメンテーション違反です
[indou@std tstPrg029]$ unset EF_PROTECT_BELOW
[indou@std tstPrg029]$ LD_PRELOAD=/usr/lib/libefence.so ./mem2

Electric Fence 2.2.0 Copyright (C) 1987-1999 Bruce Perens <bruce@perens.com>
2
1
0
-1
-2
[indou@std tstPrg029]$

mtrace

[indou@std tstPrg030]$ cat free.c
#include
#include
#include
#include
int main() {
char *buf1, *buf2;
mtrace();
buf1=(char *)malloc(10);
buf2=(char *)malloc(10);
free(buf1);
muntrace();
return EXIT_SUCCESS;
}
[indou@std tstPrg030]$
[indou@std tstPrg030]$ ./free
[indou@std tstPrg030]$ ls -l
合計 20
-rw-r--r-- 1 indou users 507 2月 26 01:03 Makefile
-rwxr-xr-x 1 indou users 6212 2月 26 01:03 free
-rw-r--r-- 1 indou users 225 2月 26 01:02 free.c
-rw-r--r-- 1 indou users 2480 2月 26 01:03 free.o
[indou@std tstPrg030]$ export MALLOC_TRACE=./free.dat
[indou@std tstPrg030]$ ./free
[indou@std tstPrg030]$ ls -l
合計 24
-rw-r--r-- 1 indou users 507 2月 26 01:03 Makefile
-rwxr-xr-x 1 indou users 6212 2月 26 01:03 free
-rw-r--r-- 1 indou users 225 2月 26 01:02 free.c
-rw-r--r-- 1 indou users 121 2月 26 01:03 free.dat
-rw-r--r-- 1 indou users 2480 2月 26 01:03 free.o
[indou@std tstPrg030]$ mtrace free free.dat

Memory not freed:
-----------------
Address Size Caller
0x0989c388 0xa at /home/indou/src/c/tstPrg030/free.c:9
[indou@std tstPrg030]$ sed -n "9p" free.c
buf2=(char *)malloc(10);
[indou@std tstPrg030]$

2008年1月31日木曜日

ローレベルフォーマット

ローレベルフォーマットには hp-ux では mediainit(1)
   
   残留磁気のことまで考えると、これ1回では心配かもしれませんが、これを行ったディスクからデータを復旧させるのは相当な技術力と設備が必要です。cube さんがどの程度までを求められるかにもよりますけれど、一番簡単でそこそこ安心な方法かと思います。
   
   例)
   # mediainit /dev/rdsk/cXtYdZ
   
   あとは、dd(1) コマンドで適当なパターンで上書きすることですね。
   
   例)bs は default の 1024 だと時間がかかります。
   # dd if=/dev/zero of=/dev/rdsk/cXtYdZ bs=1024k
 
Windowsでは。

C:\>cipher /w:d:
できるだけ多くのデータを削除するために、CIPHER /W の実行中
はほかのアプリケーションをすべて終了してください。
0x00 に書き込み中 ……※1
........................... (中略) .............……※2
0xFF に書き込み中
........................... (中略) .............
乱数 に書き込み中
........................... (中略) .............
C:\>

※1 英語モードではこれらのメッセージは「Writing 0x00」となっているので、正しくは「0x00 を書き込み中」と訳されるべきだろう。単純なミスであるので、特に気にしなくてもよい。
※2 作業の進行中は、このように「.(ピリオド)」が少しずつ表示されるので、動作していることが確認できる。


Linuxだと。。
  • shredで消去する

shredはファイルを上書きするためのプログラムです。GNU fileutilsに含まれ
ているため、多くのLinuxにも含まれています。デフォルトでは乱数で25回
の上書きを行います。shredの詳細についてはオンラインマニュアルを参照し
てください。なおshredやLinuxが古いと消去サイズを指定する必要があったり
2GBの制限に引っかかったりする場合がありますので、shredが入っていれば何
でもいいというわけではありません。

KNOPPIX 日本語版のCD-ROMでbootして /dev/hda を消去する例を以下に示しま
す。機能限定のレスキュー用Linuxではないのでシェルなども使いやすいです。
DMAにも対応していますし日本語106キーボードにも対応しています。
もちろんHDDの消去程度でしたら英語版KNOPPIXでも不自由しないと思います。

(1) KNOPPIXのCD-ROMからbootします。(Runlevel 2, Textmode only)
HDD消去にGUIは不要なのでbootプロンプトでは knoppix dma 2 とします。
# dmaというブートオプションがないKNOPPIXでは knoppix 2 で構いません。
なおPCの構成によっては素直にTextmodeで起動できない場合もあります。
重要なのは消したいHDDをswapとして使わない事とrootである事の二点です。

(2) shred -n 2 -v -z /dev/hda
この例では 乱数 → 乱数 → 0x00 という3回の上書きが行われます。-v を
指定すると処理の進み具合がわかり便利です。なお私は乱数の品質については
調査していません。
  • badblocksで消去する

badblocksはデバイス上に不良ブロックがあるかを検査するプログラムです。
多くのlinuxのレスキューディスク(またはインストールディスクのレスキュー
モード)で使用できます。デフォルトではread-onlyで検査しますが、-w を指
定すると 0xaa → 0x55 → 0xff → 0x00 と4回の書き込みを行います。
badblocksの詳細についてはオンラインマニュアルを参照してください。なお
元々検査用のコマンドであるため4回の書き込みに対して毎回読み出しを行っ
てしまいます。このためshredにくらべ無駄に時間がかかります。また物によっ
てはコマンドラインオプションで block count を指定しなければならないタ
イプのbadblocksもあります。

Red Hat Linux 7.2のDisc1でbootして /dev/hda を消去する例を以下に示しま
す。恐らく7.3以降でも簡単だと思います。

(1) Disc1というCD-ROMからbootします。
ブートの種類を選ぶ所では linux rescue を選択します。
言語は英語を選択します。
キーボードの種類を選択します。
ContinueとSkipでContinueを選択します。
以上でレスキューモードのシェルが起動します。


(2) badblocks -vw -c 1024 /dev/hda

  • ddで消去する

広く知られている通り、ddでもHDDを消去できます。

dd if=/dev/zero of=/dev/hda

を実行すると /dev/hda 全域を 0x00 で1回上書きします。大きなブロックサ
イズを指定する事により時間短縮できる場合があります。厳密には 0x00 の全
面書き込み1回だけでは不十分と言われる事もあるので、必要に応じて色々と
工夫してみた方がよいかも知れません。

Solarisです。

Solaris 上でディスクのデータを完全に消去する方法

最近「セキュリティー」というキーワードが、以前よりかなり熱くなっている気がしますが、 セキュリティーを確保するために「ディスクのデータを完全に消去する」というのは 重要かと思います。

私も 5 年前は「/dev/zero で上書きしておけば問題ない」と思いこんでいたのですが、 調べてみれば、ディスク内の磁気情報を利用した解析修復ツールであれば、書き込む直前の 状態、例えば 0 の上に書かれた 0 なのか、1 の上に書かれた 0 なのかを区別できて しまいます。なので /dev/zero での上書きだと完全では無いですね。。。 そこで RANDOM にいろいろ書き込んで以前のデータが修復出来ない状態にしないと いけないのですが、どうすれば良いでしょう?

一度に大量のデータ消去作業を伴う場合は、何らかの有償サービスを受けるのが手間が掛からなくて良いと思いますが、 自分の Workstation のみディスクを捨てたいような場合は、自分で行った方が簡単ですね。 そこで Solaris の format コマンドを使用することにより、ディスクのデータを 完全に消去することも可能です。

以下の手順です。

 1. format -> defect -> primary -> quit
 2. analyze -> purge -> quit
 3. defect -> both -> quit -> analyze -> purge -> quit -> quit

結構?かなり?時間がかかりますが、これで完全に消去できます。

以下の URL に技術的な詳細が書かれていますので勉強になります。 "The format command overwrites the available disk sectors with patterns that comply with the Department of Defense declassification regulations for data remanence. " とのこと。ざっくり訳すと「format コマンドは米国国防総省機密解除規則に従うパターンで 利用可能なディスクセクターを上書きします。」となります。 Trusted Solaris の資料ですが、一番下の部分に Solaris でも同じとの記述があるので Solaris でも同様の手順です。


Trusted Solaris Operating System - Technical FAQs
>> How do I remove sensitive information from a disk?
>> http://www.sun.com/software/solaris/trustedsolaris/ts_tech_faq/faqs/purge.xml



特定のポートをオープンしているプロセスを調査する。

特定のポートをオープンしているプロセスを調査する。
(日 1月 06 11:38:29) root@R60e:~: lsof -i:22
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
sshd 6514 root 3u IPv6 25503 TCP *:ssh (LISTEN)
(日 1月 06 11:39:15) root@R60e:~:
(日 1月 06 11:39:15) root@R60e:~: lsof -i:8899
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
tst020 6311 indou 3u IPv4 22535 TCP *:8899 (LISTEN)
(日 1月 06 11:40:34) root@R60e:~:

2008年1月17日木曜日

lsnrctl

■[リスナーのログ出力を動的に停止する方法]
% lsnrctl
LSNRCTL> set current_listener <リスナー名> <= オプション(リスナー名が
LISTENER ではない場合)
LSNRCTL> set log_status OFF <= 出力停止
LSNRCTL> set log_status ON <= 出力開始

 ※上記手順の場合は、出力停止中の間にリスナーログをmv,rm,compress 等を
  実施します。
  set log_status ON を実行してログ出力を再開する際に、該当リスナーが指定
  する名称のログファイルが存在しない場合は、set log_status ON のタイミング
  で新規ファイルが自動生成されます。
  (新規ファイル自動生成時は、「DD-MON-YY HH24:MI:SS * log_status * 0」
   というような出力が1行目に出力されて作成されます。)
■リスナーを停止せず listener.log を連続性を保ったまま新しく出力させる方法


[対処]
lsnrctl ユーティリティの set log_file コマンドを使用することで可能です。
以下の手順例をご参考下さい。

例)
現在のファイル名を listener.log とします。

1. 以下のコマンドを使用し、新たに listener1.log を出力させるようにします。

% lsnrctl
LSNRCTL> set log_file listener1.log

# この時点で、listener.log があるディレクトリに
# 新たに listener1.log というファイルが作成され、
# 今後はこのファイル上にロギングが行なわれます。

2. 現在の listener.log をリネームします。

% mv listener.log listener.log.20030507

3. 再度、現在のファイル名 listener1.log を
以下のコマンドを使用し、listener.log と元の名前で
出力させるようにします。

% lsnrctl
LSNRCTL> set log_file listener.log

これにより、listener.log の再作成が行なわれたことになります。
また、listener.log.20030507, listener1.log そして現在の listener.log と、
その間の連続性は失われてはいません。

2008年1月11日金曜日

ディスクの消去

hp-ux、mediainit(1)
   
   例)
   # mediainit /dev/rdsk/cXtYdZ
   
   例)bs は default の 1024 だと時間がかかります。
   # dd if=/dev/zero of=/dev/rdsk/cXtYdZ bs=1024k
 

2008年1月7日月曜日

lsof

特定のポートをオープンしているプロセスを調査する。
(日 1月 06 11:38:29) root@R60e:~: lsof -i:22
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
sshd 6514 root 3u IPv6 25503 TCP *:ssh (LISTEN)
(日 1月 06 11:39:15) root@R60e:~:
(日 1月 06 11:39:15) root@R60e:~: lsof -i:8899
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
tst020 6311 indou 3u IPv4 22535 TCP *:8899 (LISTEN)
(日 1月 06 11:40:34) root@R60e:~:

デーモンプログラムの作成方法


デーモンプログラム

  1. fork()、その後親プロセス終了。
  2. プログラムを起動したシェルに制御が戻る。
  3. このfork()は新しいプロセスが プロセスグループリーダーにならないようにするため。 setsid()はプロセスグループリーダーだと失敗する。
  4. setsid()によりプロセスグループとセッショングループのリーダーとなる。制御端末はセッションに関連づけらている。この新しいセッショ ンは制御端末を持たない。そのためこのプロセスは制御端末を持たない。
  5. fork()して、親プロセス(セッショングループリーダー)は終了。デーモンが、セッショングループリーダーでないので、以後制御端末 を持つことがない。
  6. chdir("/")。ファイルシステムを アンマウント出来ないことを避ける。
  7. umask(0)として、書き出すあらゆるファイルのパーミッションを制御。 やらなくてもいいけど。
  8. ファイルディスクリプタ0、1、2をclose()。親プロセ スから引き継いだ標準入力、出力、エラー出力を解放する。これらのファ イルディスクリプタがどこかにリダイレクトされているかどうか分からな いため。制限値_SC_OPEN_MAXを知るために多くのデーモンが sysconf()を用いていることに注意してください。_SC_OPEN_MAXはプロセス 当たりの最大ファイルオープン数です。次にループに入り、全ての有り得 るファイルディスクリプタをクローズ。同時に使えるファイルディスクリプタの数 には限りがあるため、オープンされているファイルディスクリプタがあり 得るとなら、それらをクローズする。
  9. stdin、stdout、stderr用に新しいディスクリプタをオープン。例えば、stdoutか stderrとしてそれをオープンし、stdinには`/dev/null'オープン。または、`/dev/console'をstderrと/またはstdoutとし てオープンし、`/dev/null'をstdinとする。

デーモンがinetdから起動されるものの場合は、 これらの手順は不要。その場合、 stdin、stdout、stderrは既にどれもネットワーク接続を対象として 設定されていますし、 fork()やセッション操作はするべきではない (inetdを混乱させることを防ぐ)。 chdir()umask()のステップだけは必要。

親プロセスは forkし、そ こで wait し、子プロセスが死ぬのを待つ。子プロセスはさらに fork し、孫プロセスを作る。そこで子プロセスは直ちに終了し(すると親 は、その死の知らせを待っていたので、実行を続ける)、もともと子がやるは ずだった仕事を孫が行なう。親が死んでいるので、孫は init に継承され、 必要な wait などを行なってくれる。この方法は余分な fork を行なうので 非効率だが、移植性は完璧。

WebSiteから要約。

デーモンの作り方

上記サイトに詳しい解説がありますが、デーモンは、制御端末を持たず、独立したセッションで動くバックグラウンドプロセスです。

  1. fork() し、親プロセス(Webサーバに起動されたプロセス)はすぐに終了します。次のsetsid() の呼び出しを成功させるために必要です。
  2. 子プロセスで setsid() を呼び出します。新しいセッションが作られ、そこのセッションリーダ兼プロセスグループリーダになります。
  3. セッションリーダは後から制御端末を得ることができるため、もう一度 fork() し、親プロセスはすぐに終了します。
  4. chdir("/") します。プロセスが握っているディレクトリはunmountできないので、邪魔にならないようにします。
  5. umask(0) するか、しないか。
  6. stdin, stdout, stderr を close() します。