目次
主にコンソールからシステムを設定や管理する基本的なティップを次に記します。
screen
(1)は、ネットワーク接続中断をサポートするので信頼性が低く断続的な接続経由でリモートサイトをアクセスする人にとっては非常に有用なツールです。
表9.1 ネットワーク切断の中断をサポートするプログラムのリスト
パッケージ | ポプコン | サイズ | 説明 |
---|---|---|---|
screen *
|
V:11, I:33 | 952 | VT100/ANSIターミナルエミュレーションを使ってのターミナルマルチプレクサ |
screen
(1)は複数のプロセスを1つのターミナルウィンドウでうまく動作させるのみならず、接続が中断してもリモートシェルプロセスを生き延びさせる事もできます。screen
(1)の使われ方の典型的シナリオは次です。
screen
を起動します。
^A c
("Control-A"に続いて"c")によって作られたscreen
のウィンドウ中で複数のプログラムを実行します。
^A n
("Control-A"に続いて"n")によって、複数のscreen
のウィンドウ間を切り替えます。
次のようないかなる方法ででも、screen
のセッションをデタッチできます。
^A d
("Control-A"に続いて"d")とタイプしてリモート接続から手動でログアウト
^A DD
("Control-A"に続いて"DD")とタイプしてscreen
をデタッチしてログアウト
screen
を"screen -r
"として起動します。
screen
は全アクティブなプログラムが実行されている過去の全screen
ウィンドウを魔法のようにリアタッチします。
![]() |
ティップ |
---|---|
|
screen
セッションではコマンドキーストローク以外の全てのキーボード入力は現在のウィンドウに送られます。全てのscreen
コマンドキーストロークは^A
("Control-A")と単一キー[プラス何らかのパラメーター]をタイプすることによって入力されます。次に覚えておくべき重要なコマンドキーストロークを記します。
表9.2 screenキーバインディングのリスト
キーバインディング | 意味 |
---|---|
^A ?
|
ヘルプスクリーンを表示(キーバインディングを表示) |
^A c
|
新規ウィンドウを作成しそれに切り替える |
^A n
|
次のウィンドウに切り替える |
^A p
|
前のウィンドウに切り替える |
^A 0
|
0番のウィンドウに切り替える |
^A 1
|
1番のウィンドウに切り替える |
^A w
|
ウィンドウのリストを表示 |
^A a
|
Ctrl-Aを現在のウィンドウにキーボード入力として送る |
^A h
|
現在のウィンドウのハードコピーをファイルに書く |
^A H
|
現在のウィンドウのファイルへのロギングを開始/終了する |
^A ^X
|
ターミナルをロック(パスワードで保護) |
^A d
|
ターミナルからscreenのセッションをデタッチ |
^A DD
|
screenのセッションをデタッチしてログアウト |
詳細はscreen
(1)を参照下さい。
多くのプログラムは"/var/log/
"ディレクトリーの下にそれぞれの活動を記録します。
klogd
(8)
syslogd
(8)
「システムメッセージ」と「カーネルメッセージ」を参照下さい。
注目すべきログアナライザー(aptitude
(8)で"~Gsecurity::log-analyzer
")を次に記します。
表9.3 システムログアナライザーのリスト
パッケージ | ポプコン | サイズ | 説明 |
---|---|---|---|
logwatch *
|
V:2, I:3 | 2592 | 綺麗な出力のPerlで書かれたログアナライザー |
fail2ban *
|
V:3, I:4 | 660 | 複数回の認証エラーを発生させるIPを使用禁止にします |
analog *
|
V:1.2, I:16 | 4612 | ウェッブサーバーのログアナライザー |
awstats *
|
V:1.7, I:3 | 5100 | 強力で機能の多いウェッブサーバーのログアナライザー |
sarg
*
|
V:1.8, I:1.9 | 1448 | squidの分析レポートジェネレター |
pflogsumm *
|
V:0.3, I:0.7 | 156 | Postfixログ項目サマライザー |
syslog-summary *
|
V:0.2, I:1.0 | 84 | syslogログファイルの内容をまとめる |
lire
*
|
V:0.16, I:0.18 | 5056 | 機能豊富なログアナライザーとレポートジェネレター |
fwlogwatch *
|
V:0.11, I:0.2 | 420 | ファイアウォールログアナライザー |
squidview *
|
V:0.11, I:0.7 | 200 | squidのaccess.logファイルのモニターと分析 |
visitors *
|
V:0.08, I:0.3 | 228 | ウェッブサーバーの高速ログアナライザー |
swatch *
|
V:0.07, I:0.2 | 112 | 正規表現マッチ、ハイライト、フック機能付きログファイルビューワー |
crm114 *
|
V:0.07, I:0.2 | 1300 | 制御可能な正規表現切断機とスパムフィルター(CRM114) |
icmpinfo *
|
V:0.05, I:0.3 | 84 | ICMPメッセージの解釈 |
![]() |
注記 |
---|---|
CRM114はTRE正規表現ライブラリーを使うファジーなフィルターを書く言語インフラを提供します。そのよくある応用はスパムメールのフィルターですが、ログアナライザーとしても使えます。 |
単にscript
(1)を使ってシェル活動を記録すると(「シェル活動の記録」参照)、コントロール文字の入ったファイルが生成されます。このような事は次のようにしてcol
(1)を使うことで避けられます。
$ script Script started, file is typescript
何なりとします …
そしてscript
から脱出するためにCtrl-D
を押します。
$ col -bx <typescript >cleanedfile $ vim cleanedfile
(例えば、initramfs中のブートプロセスの途中のように)script
が無い場合には、その代わりに次のようにすれば良いです。
$ sh -i 2>&1 | tee typescript
![]() |
ティップ |
---|---|
|
![]() |
ティップ |
---|---|
|
![]() |
ティップ |
---|---|
|
more
(1)やless
(1)等のページャーツール(「ページャー」参照)や、ハイライトやフォーマット用のカスタムツール(「プレーンテキストデーターをハイライトとフォーマット」参照)はテキストデーターを綺麗に表示できますが、汎用エディター(「テキストエディター」参照)が最も汎用性がありカスタム化が可能です。
![]() |
ティップ |
---|---|
|
"ls -l
"コマンドによる時間と日付のデフォールトの表示形式はロケール(値は「タイムスタンプ」を参照)に依存します。"$LANG
"変数が最初に参照され、それを"$LC_TIME
"変数によりオーバーライドする事ができます。
実際の各ロケールでのデフォールトの表示形式は使われた標準Cライブラリー(libc6
パッケージ)のバージョンに依存します。つまりDebianの異なるリリースは異なるデフォールトです。
ロケール以上にこの時間や日付の表示フォーマットをカスタム化したいと真摯に望むなら、"--time-style
"引数か"$TIME_STYLE
"値を使って時間スタイル値を設定するべきです(ls
(1)とdate
(1)と"info
coreutils 'ls invocation'
"を参照下さい)。
表9.4 lenny
での"ls -l
"コマンドによる時間と日付の表示例
時間スタイル値 | ロケール | 時間と日付の表示 |
---|---|---|
iso
|
any |
01-19 00:15
|
long-iso
|
any |
2009-01-19 00:15
|
full-iso
|
any |
2009-01-19 00:15:16.000000000 +0900
|
locale
|
C
|
Jan 19 00:15
|
locale
|
en_US.UTF-8
|
2009-01-19 00:15
|
locale
|
es_ES.UTF-8
|
ene 19 00:15
|
+%d.%m.%y %H:%M
|
any |
19.01.09 00:15
|
+%d.%b.%y %H:%M
|
C またはen_US.UTF-8
|
19.Jan.09 00:15
|
+%d.%b.%y %H:%M
|
es_ES.UTF-8
|
19.ene.09 00:15
|
![]() |
ティップ |
---|---|
例えば" |
![]() |
ティップ |
---|---|
このような isoフォーマットはISO 8601に準拠しています。 |
殆どの現代的なターミナルへのシェル出力はANSIエスケープコードを使って着色化できます("/usr/share/doc/xterm/ctlseqs.txt.gz
"を参照)。
例えば、次を試してみて下さい:
$ RED=$(printf "\x1b[31m") $ NORMAL=$(printf "\x1b[0m") $ REVERSE=$(printf "\x1b[7m") $ echo "${RED}RED-TEXT${NORMAL} ${REVERSE}REVERSE-TEXT${NORMAL}"
着色化されたコマンドは対話環境で出力を検査するのに便利です。私は、私の"~/.bashrc
"に次を含めています。
if [ "$TERM" != "dumb" ]; then eval "`dircolors -b`" alias ls='ls --color=always' alias ll='ls --color=always -l' alias la='ls --color=always -A' alias less='less -R' alias ls='ls --color=always' alias grep='grep --color=always' alias egrep='egrep --color=always' alias fgrep='fgrep --color=always' alias zgrep='zgrep --color=always' else alias ll='ls -l' alias la='ls -A' fi
エリアスを使うことで色効果を対話コマンド使用時に限定します。こうするとless
(1)等のページャープログラムの下でも色を見られるので、環境変数"export
GREP_OPTIONS='--color=auto'
"をエキスポートするより都合が良いです。他のプログラムにパイプする際に色を使いたくないなら、先ほどの"~/.bashrc
"例中で代わりに"--color=auto
"とします。
![]() |
ティップ |
---|---|
このような着色するエリアスは、対話環境でシェルを" |
xterm
の表示を含めた、Xアプリケーションの画像イメージを記録するにはいくつか方法があります。
表9.5 画像の操作ツールのリスト
パッケージ | ポプコン | サイズ | コマンド |
---|---|---|---|
xbase-clients *
|
V:7, I:52 | 140 |
xwd (1)
|
gimp
*
|
V:12, I:47 | 13472 | GUIメニュー |
imagemagick *
|
V:14, I:34 | 316 |
import (1)
|
scrot
*
|
V:0.3, I:1.4 | 80 |
scrot (1)
|
DVCSシステムを使って設定ファイルの変更を記録する専用ツールがあります。
表9.6 VCS中に設定の履歴を記録するパッケージのリスト
パッケージ | ポプコン | サイズ | 説明 |
---|---|---|---|
etckeeper *
|
V:0.6, I:1.0 | 372 | Git (デフォールト)かMercurialかBazaarを使って設定ファイルとそのメタデーターを保存(新規) |
changetrack *
|
V:0.07, I:0.10 | 152 | RCSを使って設定ファイルを保存(旧式) |
git
(1) which put entire
"/etc
"全てをVCSのコントロール下に置くように、git
(1)とともにetckeeper
パッケージを使うことをお薦めします。そのインストール案内とチュートリアルは"/usr/share/doc/etckeeper/README.gz
"にあります。
本質的に"sudo etckeeper
init
"を実行すると、"/etc
"に関するgitレポジトリーが、徹底的な手順を踏む特別のフックスクリプト付きでちょうど「設定履歴記録のためのGit」と同様に初期化されます。
あなたが設定を変える毎に、普通にgit
(1)を使って記録できます。パッケージ管理コマンドを使うと、変更に関して上手に毎回自動記録もします。
![]() |
ティップ |
---|---|
" |
Linuxのlive CDsとかレスキューモードでdebian-installer CDsであなたのシステムをブートすることでブートデバイス上のデーターストレージの再設定が簡単にできるようになります。「バイナリーデーター」も参照下さい。
ディスクのパーティションの設定に関して、fdisk
(8)は標準と考えられてきていますが、parted
(8)も注目に値します。"ディスクパーティションデーター"や"パーティションテーブル"や"パーティションマップ"や"ディスクラベル"は全て同意語です。
殆どのPCでは、ディスクのパーティションデーターが最初のセクターつまりLBAセクター 0 (512バイト)に保持される、古典的なマスターブートレコード(MBR)方式が使われています。
![]() |
注記 |
---|---|
新規のIntelベースのMacのような拡張ファームウェアインターフェイス(EFI)付きの一部PCでは、ディスクパーティションデーターをセクターの最初以外に保持するGUID Partition Table (GPT)方式が使われています。 |
fdisk
(8)はディスクパーティションツールの標準でしたが、parted
(8)がそれを置き換えつつあります。
表9.7 ディスクパーティション管理パッケージのリスト
パッケージ | ポプコン | サイズ | GPT | 説明 |
---|---|---|---|---|
util-linux *
|
V:90, I:99 | 2292 | 非サポート |
fdisk (8)とcfdisk (8)を含む雑多なシステムユーティリティー
|
parted *
|
V:1.1, I:8 | 164 | サポート | GNU Parted ディスクパーティションとリサイズのプログラム |
gparted *
|
V:3, I:37 | 3404 | サポート |
libparted ベースのGNOMEパーティションエディター
|
qtparted *
|
V:0.18, I:1.3 | 764 | サポート |
libparted ベースのKDEパーティションエディター
|
gptsync *
|
V:0.01, I:0.15 | 72 | サポート | 古典的MBRパーティションテーブルをGPTパーティションテーブルと同期 |
kpartx *
|
V:1.2, I:2 | 132 | サポート | パーティション用のデバイスマッピングを作成するプログラム |
![]() |
注意 |
---|---|
|
![]() |
注記 |
---|---|
GPTとMBR間で切り替えるには、ディスクの最初数ブロックの内容を直接消去し(「ファイル内容の消去」参照)、" |
あなたのパーティションの再設定やリムーバブルストレージメディアの起動順序はパーティションの名前を変えることになるかもしれませんが、それに首尾一貫してアクセスできます。もしディスクが複数ありあなたのBIOSがそれに首尾一貫したデバイス名をつけない時にも、これは役に立ちます。
-U
"オプションを使ってmount
(8)を実行すると"/dev/sda3
"のようなファイル名を使うのではなくUUIDを使ってブロックデバイスをマウントできます。
/etc/fstab
"(fstab
(5)参照)はUUIDを使えます。
![]() |
ティップ |
---|---|
ブロックスペシャルデバイスのUUIDは |
![]() |
ティップ |
---|---|
リムーバブルストレージメディア等のデバイス名は、必要ならudev rulesを使って静的になります。「udevシステム」を参照下さい。 |
ext3ファイルシステム用にe2fsprogs
パッケージは次を提供します。
mkfs
(8)とfsck
(8)コマンドは各種ファイルシステム依存プログラム(mkfs.fstype
やfsck.fstype
)のフロントエンドとしてe2fsprogs
により提供されています。ext3ファイルシステム用は、mkfs.ext3
(8)とfsck.ext3
(8)で、それぞれmke2fs
(8)とe2fsck
(8)にハードリンクされています。
類似コマンドがLinuxによってサポートされる各ファイルシステム用にあります。
表9.8 ファイルシステム管理用パッケージのリスト
パッケージ | ポプコン | サイズ | 説明 |
---|---|---|---|
e2fsprogs *
|
V:59, I:99 | 2104 | ext2/ext3/ext4ファイルシステムのためのユーティリティー |
reiserfsprogs *
|
V:3, I:10 | 1200 | Reiserfsファイルシステムのためのユーティリティー |
dosfstools *
|
V:3, I:27 | 224 | FAT ファイルシステムのためのユーティリティー(Microsoft: MS-DOS, Windows) |
xfsprogs *
|
V:2, I:11 | 3036 | XFSファイルシステムのためのユーティリティー(SGI: IRIX) |
ntfsprogs *
|
V:2, I:14 | 676 | NTFSファイルシステムのためのユーティリティー(Microsoft: Windows NT, …) |
jfsutils *
|
V:0.6, I:3 | 1112 | JFSファイルシステムのためのユーティリティー(IBM: AIX, OS/2) |
reiser4progs *
|
V:0.08, I:0.7 | 1268 | Reiser4ファイルシステムのためのユーティリティー |
hfsprogs *
|
V:0.07, I:0.7 | 284 | HFSとHFS Plusファイルシステムのためのユーティリティー(Apple: Mac OS) |
btrfs-tools *
|
V:0.04, I:0.2 | 1024 | btrfsファイルシステムのためのユーティリティー |
zerofree *
|
V:0.07, I:0.6 | 56 | ext2/3ファイルシステムのフリーブロックをゼロにセットするプログラム |
![]() |
ティップ |
---|---|
Ext3ファイルシステムはLinuxシステムのデフォールトので、特段使わない理由が無い限りそれを使うことを強くお薦めします。Linuxカーネル2.6.30(Debian
|
![]() |
警告 |
---|---|
まだ新しいのでext4を使うと色々制約があるかもしれません。例えば、ext4パーティションのサイズ変更をするにはLinuxカーネルが2.6.30以降でなければいけません。 |
![]() |
ティップ |
---|---|
一部のツールはファイルシステムへのアクセスをLinuxカーネルのサポート無しでも可能にします(「ディスクをマウントせずに操作」参照)。 |
mkfs
(8)コマンドはLinuxシステム上でファイルシステムを生成します。fsck
(8)コマンドはLinuxシステム上でファイルシステムの整合性チェックと修理機能を提供します。
![]() |
注意 |
---|---|
一般的に |
![]() |
ティップ |
---|---|
ブートスクリプトから実行される |
![]() |
ティップ |
---|---|
" |
ファイルシステムのパーフォーマンスや性格はそれに使われるマウントオプションによって最適化できます(fstab
(5)とmount
(8)参照)。
defaults
"オプションはデフォールトのオプションが次の意味です:
"rw,suid,dev,exec,auto,nouser,async
"。(一般的)
noatime
"もしくは"relatime
"オプションは読出しアクセスを高速化するのに非常に効果的です。(一般的)
user
"オプションは通常ユーザーがファイルシステムをマウント出来るようにします。このオプションは"noexec,nosuid,nodev
"
オプションの組み合わせの意味です。(一般的、CDやfloppyに使用)
noexec,nodev,nosuid
"generalオプションの組み合わせはセキュリティーの強化に使われます。(一般的)
noauto
"オプションは明示的操作のみにマウントを制限します。(一般的)
data=journal
"オプションは、書込み速度を犠牲ににしますが、停電時のデーター整合性を強化します。
![]() |
ティップ |
---|---|
ルートファイルシステムに非デフォールトのジャーナルモードを設定するには、例えば" |
tune2fs
(8)コマンドを用いてファイルシステムのスーパーブロックによってファイルシステムを最適化できます。
sudo tune2fs -l
/dev/hda1
"を実行するとそのファイルシステムスーパーブロックを表示します。
sudo tune2fs -c 50
/dev/hda1
"を実行するとファイルシステムのチェック(ブートアップ時のfsck
実行)の頻度を50回のブート毎に変更します。
sudo tune2fs -j /dev/hda1
"の実行はext2からext3へとファイルシステム変換してファイルシステムにジャーナリングの機能を追加します。(アンマウントしたファイルシステムに対して実行します。)
sudo tune2fs -O extents,uninit_bg,dir_index /dev/hda1 &&
fsck -pf /dev/hda1
"の実行はファイルシステムをext3からext4に変換します。(アンマウントしたファイルシステムに対して実行します。)
![]() |
警告 |
---|---|
ext4ファイルシステムへのブートデバイスのファイルシステム変換はGRUBブートローダーがext4ファイルシステムをよくサポートしインストールされたLinuxカーネルバージョンが2.6.30以降となるまではしないでおくべきです。 |
![]() |
警告 |
---|---|
ハードディスクの設定はデーターの整合性にとって非常に危険な事なので、その設定をさわる前にお使いのハードウエアーをチェックし |
例えば"/dev/hda
"に対して"hdparm -tT
/dev/hda
"とするとハードディスクのアクセス速度をテストできます。(E)IDEを使って接続された一部のハードディスクでは、"(E)IDE
32ビットI/Oサポート"を有効にし"using_dmaフラグ"を有効にし"interrupt-unmaskフラグ"を設定し"複数16セクターI/O"を設定するように、"hdparm
-q -c3 -d1 -u1 -m16 /dev/hda
"とすると高速化できます(危険です!)。
例えば"/dev/sda"に対して"hdparm -W
/dev/sda
"とするとハードディスクの書込みキャッシュ機能をテストできます。"hdparm -W 0
/dev/sda
"とするとハードディスクの書込みキャッシュ機能を無効にできます。
不良プレスのCDROMを現代的な高速CD-ROMドライブで読むには、"setcd -x
2
"としてそれを減速して使えば読めるかもしれません。
smartd
(8)デーモンを使うとSMARTに文句を言うハードディスクの監視と記録ができます。
smartmontools
パッケージをインストールします。
df
(1)を使ってリストすることであなたのハードディスクを識別します。
/dev/hda
"と仮定します。
SMART機能が実際に有効となっているかを"smartctl -a
/dev/hda
"のアウトプットを使ってチェックします。
smartctl -s on -a /dev/hda
"として有効にします。
次のようにしてsmartd
(8)デーモンを実行します。
/etc/default/smartmontools
"ファイル中の"start_smartd=yes
"をアンコメントします。
sudo /etc/init.d/smartmontools
restart
"としてsmartd
(8)デーモンを再実行します。
![]() |
ティップ |
---|---|
|
インストール時に論理ボリュームマネージャー(LVM)(Linux機能)上に作られたパーティションは、大掛かりなシステムの再設定無しに複数のストレージデバイスにまたがるLVM上のエクステントを継ぎ足したりその上のエクステントを切り捨てることで簡単にサイズ変更が出きます。
![]() |
注意 |
---|---|
現行のLVMシステムを採用すると、ハードディスクの書込みキャッシュ機能を無効にしてパーフォーマンスを犠牲にしないと、ext3fs等のジャーナルファイルシステムによって提供されるファイルシステムの破壊に対する保証を劣化させるかもしれません。 |
空のパーティションがあれば(例えば"/dev/sdx
")、それをmkfs.ext3
(1)を使ってフォーマットし、それをあなたが空間をより必要とするディレクトリーにmount
(8)することができます。(元来あったデーター内容はコピーする必要があります。)
$ sudo mv work-dir old-dir $ sudo mkfs.ext3 /dev/sdx $ sudo mount -t ext3 /dev/sdx work-dir $ sudo cp -a old-dir/* work-dir $ sudo rm -rf old-dir
![]() |
ティップ |
---|---|
上記の代わりに、空のディスクイメージファイル(「空のディスクイメージ作成」参照)をループデバイスとしてマウントする(「ディスクイメージファイルをマウント」参照)事もできます。実際のディスク使用は実際にデーターを溜め込むとともに成長します。 |
使える空間がある他のパーティション中に空のディレクトリーがあれば(例えば"/path/to/emp-dir
")、そのディレクトリーへln
(8)を使ってシムリンクを作成することができます。
$ sudo mv work-dir old-dir $ sudo mkdir -p /path/to/emp-dir $ sudo ln -sf /path/to/emp-dir work-dir $ sudo cp -a old-dir/* work-dir $ sudo rm -rf old-dir
![]() |
注意 |
---|---|
一部のプログラムは"ディレクトリーへのシムリンク"ではうまく機能しないかもしれません。 |
他のパーティション中に使える空間があれば(例えば"/path/to/
")、その中にディレクトリーを作りaufsを使って空間を必要とするディレクトリー上に積み重ねることができます。
$ sudo mv work-dir old-dir $ sudo mkdir work-dir $ sudo mkdir -p /path/to/emp-dir $ sudo mount -t aufs -o br:/path/to/emp-dir:old-dir none work-dir
![]() |
注意 |
---|---|
aufsを長期間のデーターのストレージに使うのは、まだ開発中でそのデザイン変更が問題を引き起こすかもしれないので感心しません。 |
あなたのPCへの物理的アクセスがあると、誰でも簡単にroot特権を獲得できあなたのPCの全てのファイルにアクセスできます(「rootパスワードのセキュリティー確保」参照)。これが意味するところは、あなたのPCが盗まれた場合にログインのパスワードではあなたのプライベートでセンシティブなデーターを守れないと言うことです。それを達成するにはデーターの暗号化技術を適用しなければいけません。GNUプライバシーガード (「データーセキュリティーのインフラ」参照)はファイルを暗号化できますが、少々手間がかかります。
dm-cryptとeCryptfsは最小限のユーザー努力でできる自動的なデーターの暗号化をLinuxのカーネルモジュールその物を使って提供します。
表9.9 データー暗号化ユーティリティーのリスト
パッケージ | ポプコン | サイズ | 説明 |
---|---|---|---|
cryptsetup *
|
V:3, I:5 | 952 | 暗号化されたブロックデバイス(dm-crypt / LUKS)のためのユーティリティー |
cryptmount *
|
V:0.15, I:0.5 | 308 | ノーマルユーザーによるマウント/アンマウントに焦点を当てた暗号化されたブロックデバイス(dm-crypt / LUKS)のためのユーティリティー |
ecryptfs-utils *
|
V:0.16, I:0.2 | 464 | 暗号化されたスタックドファイルシステム(eCryptfs)のためのユーティリティー |
Dm-cryptは device-mapperを使う暗号学的ファイルシステムです。Device-mapperは1つのブロックデバイスをもう1つのブロックデバイスにマップします。
eCryptfsはスタックドファイルシステムを使うもう1つのファイルシステムです。スタックドファイルシステムはマウントされたファイルシステム上の既存のディレクトリーの上に重ね合わせます。
![]() |
注意 |
---|---|
データーの暗号化にはCPU時間等の負担がかかります。その利益と負担の両天秤をします。 |
![]() |
注記 |
---|---|
debian-installer (lenny以降)を使うと、dm-crypt/LUKSとinitramfsを使って、全Debianシステムを暗号化したディスク上にインストールできます。 |
![]() |
ティップ |
---|---|
ユーザー空間での暗号化ユーティリティーに関しては「データーセキュリティーのインフラ」を参照下さい: GNUプライバシーガード。 |
例えば"/dev/sdx
"にあるUSBメモリースティックのようなリムーバブルストレージデバイスの内容をdm-crypt/LUKSを使って暗号化できます.それを単に次のようにフォーマットします。
# badblocks -c 10240 -s -w -t random -v /dev/sdx # shred -v -n 1 /dev/sdx # fdisk /dev/sdx ... "n" "p" "1" "return" "return" "w" # cryptsetup luksFormat /dev/sdx1 ... # cryptsetup luksOpen /dev/sdx1 sdx1 ... # ls -l /dev/mapper/ total 0 crw-rw---- 1 root root 10, 60 2008-10-04 18:44 control brw-rw---- 1 root disk 254, 0 2008-10-04 23:55 sdx1 # mkfs.vfat /dev/mapper/sdx1 ... # cryptsetup luksClose sdx1
こうすると暗号化されたディスクは、現代的なGNOMEのようなデスクトップ環境ではgnome-mount
(1)を使ってパスワードを聞く以外は通常のディスクと同様に"/media/<disk_label>
"にマウントできます(「リムーバブルストレージデバイス」参照)。全て書込まれるデーターが暗号化されている点が相違点です。上記と違い、例えば"mkfs.ext3
/dev/sdx1
"を使ってext3等の異なったフォーマットで記録メディアをフォーマットしても良いです。
![]() |
注記 |
---|---|
もしデーターのセキュリティーが本当に偏執狂的に気になるなら、上記例で複数回の重ね書きをする必要があるかもしれません。でもこの操作は非常に時間がかかります。 |
オリジナルの"/etc/fstab
"が次の内容と仮定します。
/dev/sda7 swap sw 0 0
dm-cryptを使ってswapパーティションの暗号化を次のようにして有効にします
# aptitude install cryptsetup # swapoff -a # echo "cswap /dev/sda7 /dev/urandom swap" >> /etc/crypttab # perl -i -p -e "s/\/dev\/sda7/\/dev\/mapper\/cswap/" /etc/fstab # /etc/init.d/cryptdisks restart ... # swapon -a
eCryptfsとecryptfs-utils
パッケージを使うことで、"~/Private/
"の下に書かれるファイルを自動的に暗号化できます。
ecryptfs-setup-private
(1)を実行してプロンプトに従って"~/Private/
"を設定します。
ecryptfs-mount-private
(1)を実行して"~/Private/
"を有効にします。
センシティブなデーターファイルを"~/Private/
"に移動し、必要に応じてシムリンクを作成します。
~/.fetchmailrc
"、"~/.ssh/identity
"、"~/.ssh/id_rsa
"、"~/.ssh/id_dsa
"、"go-rwx
"を持つ他のファイル
センシティブなデーターディレクトリーを"~/Private/
"中のサブディレクトリーに移動し、必要に応じてシムリンクを作成します。
~/.gnupg
"、"go-rwx
"を持つ他のディレクトリー
~/Desktop/Private/
"から"~/Private/
"までのシムリンクを作成します。
ecryptfs-umount-private
(1)を実行して"~/Private/
"を無効にします。
ecryptfs-mount-private
"を実行して"~/Private/
"を有効にします。
もしあなたのログインパスワードを暗号化キーを包むのに使っている場合には、"/etc/pam.d/common-auth
"中の"pam_permit.so
"のすぐ前に次に記す行があるようにすることでPAM (プラグ可能な認証モジュール: Pluggable
Authentication Modules)を使ってeCryptfsを自動的にマウントできます。
stable
システムのための"/etc/apt/sources.list
"ファイルに次の行を追加します。
auth required pam_ecryptfs.so unwrap
"/etc/pam.d/common-session
"中の最後のに次の行を挿入します。
session optional pam_ecryptfs.so unwrap
"/etc/pam.d/common-password
"の最初の有効行を次の行を挿入します。
password required pam_ecryptfs.so
これは非常に便利です。
![]() |
注意 |
---|---|
もしあなたのログインパスワードを暗号化キーを包むのに使っている場合には、あなたの暗号化されたデーターのセキュリティーはあなたのユーザーログインパスワードと同程度です(「良好なパスワード」参照)。注意深く強力なパスワードを設定していないと、あなたのラップトップを誰かが盗んだ後にパスワード破りソフトを実行すれば、あなたのデーターは危険にさらされます(「rootパスワードのセキュリティー確保」参照)。 |
プログラム活動は専用ツールを用いて監視と制御できます。
表9.10 プログラム活動の監視と制御のツールのリスト
パッケージ | ポプコン | サイズ | 説明 |
---|---|---|---|
coreutils *
|
V:91, I:99 | 11792 |
nice (1): スケジューリングの優先順位の変更してプログラムを実行
|
bsdutils *
|
V:72, I:99 | 184 |
renice (1): 実行中プロセスのスケジューリングの優先順位を変更
|
procps *
|
V:86, I:99 | 656 |
"/proc "ファイルシステムのユーティリティー:
ps (1)とtop (1)とkill (1)とwatch (1)等
|
psmisc *
|
V:49, I:86 | 548 |
"/proc "ファイルシステムのユーティリティー:
killall (1)とfuser (1)とpstree (1)とpstree (1)
|
time
*
|
V:6, I:85 | 152 |
time (1): 時間に関するシステムリソース使用状況を報告するためにプログラムを実行
|
sysstat *
|
V:3, I:7 | 1172 |
sar (1)、iostat (1)、mpstat (1)、…:
Linux用のシステムパーフォーマンスツール
|
isag
*
|
V:0.05, I:0.4 | 152 | sysstatの対話型システムアクティビティーグラフ化ソフト |
lsof
*
|
V:17, I:91 | 444 |
lsof (8): "-p "
を使い実行中のプロセスが開いているファイルをリスト
|
strace *
|
V:6, I:51 | 376 |
strace (1): システムコールやシグナルを追跡
|
ltrace *
|
V:0.3, I:2 | 188 |
ltrace (1): ライブラリーコールを追跡
|
xtrace *
|
V:0.03, I:0.17 | 344 |
xtrace (1): X11のクライアントとサーバーの間の通信を追跡
|
powertop *
|
V:0.8, I:12 | 424 |
powertop (1): Intelを使ったラップトップのシステムの電力情報
|
cron
*
|
V:91, I:99 | 324 |
cron (8)デーモンからバックグランドでスケジュール通りプロセスを実行
|
anacron *
|
V:42, I:46 | 120 | 1日24時間動作でないシステム用のcron類似のコマンドスケジューラー |
at
*
|
V:50, I:83 | 220 |
at (1)とbatch (1)コマンド:
特定の時間や特定のロードレベル以下でジョブを実行
|
![]() |
ティップ |
---|---|
|
コマンドが起動したプロセスにより使われた時間を表示します。
# time some_command >/dev/null real 0m0.035s # 壁時計の時間(実経過時間) user 0m0.000s # ユーザーモードの時間 sys 0m0.020s # カーネルモードの時間
ナイス値はプロセスのスケジューリングのプライオリティーを制御するのに使われます。
表9.11 スケジューリングのプライオリティーのためのナイス値のリスト
ナイス値 | スケジューリングのプライオリティー |
---|---|
19 | 最低優先順位プロセス(ナイス) |
0 | ユーザーにとっての非常に高優先順位プロセス |
-20 | rootにとっての非常に高優先順位プロセス(非ナイス) |
# nice -19 top # 非常にナイス # nice --20 wodim -v -eject speed=2 dev=0,0 disk.img # 非常に高速
極端なナイス値はシステムに害を与えるかもしれません。本コマンドは注意深く使用下さい、
Debian上のps
(1)コマンドはBSDとSystemV機能の両方をサポートしプロセスの活動を静的に特定するのに有用です。
ゾンビ(動作していない)子プロセスに関して、"PPID
"フィールドで識別される親プロセスIDを使ってプロセスを停止できます。
pstree
(1)コマンドはプロセスの木(ツリー)を表示します。
Debian上のtop
(1)は機能が豊で、どのプロセスがおかしな動きをしているかを動的に識別することに役立ちます。
表9.13 topのコマンドのリスト
コマンドキー | レスポンスの説明 |
---|---|
h か?
|
ヘルプの表示 |
f
|
ディスプレーフィールドのセットとリセット |
o
|
表示フィールドの順番変更 |
F
|
ソートキーフィールドの設定 |
k
|
プロセスを停止 |
r
|
プロセスのナイス値を変更 |
q
|
top コマンドを終了
|
プロセスID (PID)、例えば1を使うプロセスによって開かれている全ファイルは次のようにしてリストできます。
$ sudo lsof -p 1
PID=1は通常init
プログラムです。
プラグラムの活動状況は、システムコールとシグナルはstrace
(1)で、ライブラリーコールはltrace
(1)で、X11のクライアントとサーバーの通信はxtrace
(1)でプラグラムの活動状況を追跡できます。
ls
コマンドのシステムコールを次のようにして追跡できます。
$ sudo strace ls
ファイルかソケットを使っているプロセスはfuser
(1)によって次のようにして識別できます。
$ sudo fuser -v /var/log/mail.log USER PID ACCESS COMMAND /var/log/mail.log: root 2946 F.... syslogd
"/var/log/mail.log
"ファイルがsyslogd
(8)コマンドによって書込みのために開かれている事が分かります。
ファイルかソケットを使っているプロセスはfuser
(1)によって次のようにして識別できます。
$ sudo fuser -v smtp/tcp USER PID ACCESS COMMAND smtp/tcp: Debian-exim 3379 F.... exim4
SMTPポート(25)へのTCP接続を処理するためにあなたのシステムではexim4
(8)が実行されている事がこれで分かります。
watch
(1)はプログラムを一定間隔で反復実行しながらフルスクリーンでその出力を表示します。
$ watch w
こうすると2秒毎更新でシステムに誰がログオンしているかを表示します。
例えばグロブパターン"*.ext
"へのマッチ等の何らかの条件にマッチするファイルに関してループしながらコマンドを実行する方法がいくつかあります。
for x in *.ext; do if [ -f "$x"]; then command "$x" ; fi; done
find
(1)とxargs
(1)の組み合わせ:
find . -type f -maxdepth 1 -name '*.ext' -print0 | xargs -0 -n 1 command
-exec
"オプションを使ってfind
(1):
find . -type f -maxdepth 1 -name '*.ext' -exec command '{}' \;
-exec
"オプションを使ってfind
(1):
find . -type f -maxdepth 1 -name '*.ext' -exec sh -c "command '{}' && echo 'successful'" \;
上記の例はスペースを含む等の変なファイル名でも適切に処理できるように書かれています。find
(1)に関する上級の使用法の詳細は「ファイル選択の慣用句」を参照下さい。
グラフィカルユーザーインターフェース(GUI)からプロセスをスタートできるように設定できます。
GNOMEデスクトップ環境下では、ローンチャアイコンを ダブルクリックしたり、ファイルアイコンをローンチャアイコンへドラッグアンドドロップしたり、ファイルアイコンを右クリックで"Open with …"メニューとしたりしてプログラムを適切な引数とともにスタートできます。KDEでも同様の事ができます。
次はgnome-terminal
(1)中でmc
(1)をスタートさせるローンチャアイコンを作るGNOME下での例です。
実行可能プログラム"mc-term
"を次のように作成。
# cat >/usr/local/bin/mc-term <<EOF #!/bin/sh gnome-terminal -e "mc \$1" EOF # chmod 755 /usr/local/bin/mc-term
ディレクトリーを次のように作成します。
Create Launcher …
"を選択
Application
"と設定します。
mc
"と設定します。
mc-term %f
"と設定します。
open-withとの関連付けを作成します。
Open with Other Application …
"を選択します。
mc-term %f
"を入力します。
![]() |
ティップ |
---|---|
ローンチャとは" |
一部のプログラムは他のプログラムを自動的にスタートします。このプロセスをカスタム化する上でのチェックポイントを次に記します。
アプリケーション設定メニュー:
mc
(1): "/etc/mc/mc.ext
"
$BROWSER
"や"$EDITOR
"や"$VISUAL
"や"$PAGER
"といった環境変数(eviron
(7)参照)
editor
"や"view
"や"x-www-browser
"や"gnome-www-browser
"や"www-browser
"等のプログラムに関するupdate-alternatives
(8)システム(「デフォールトのテキストエディターの設定」参照)
~/.mailcap
"や"/etc/mailcap
"ファイルの内容(mailcap
(5)参照)
~/.mime.types
"や"/etc/mime.types
"ファイルの内容(run-mailcap
(1)参照)
![]() |
ティップ |
---|---|
|
![]() |
ティップ |
---|---|
|
![]() |
ティップ |
---|---|
Xの下で |
# cat /usr/local/bin/mutt-term <<EOF #!/bin/sh gnome-terminal -e "mutt \$@" EOF chmod 755 /usr/local/bin/mutt-term
kill
(1)を使ってプロセスIDを使ってプロセスを停止(プロセスへシグナルを送信)します。
killall
(1)やpkill
(1)プロセスコマンド名や他の属性を使ってプロセスを停止(プロセスへシグナルを送信)します。
at
(1)コマンドを次のように実行して1回だけのジョブをスケジュールします。
$ echo 'command -args'| at 3:40 monday
cron
(8)コマンドを実行して定期的タスクをスケジュールします。crontab
(1)とcrontab
(5)を参照下さい。
もしあなたがcrontab
グループのメンバーの場合、例えばfoo
というノーマルユーザーとして"crontab
-e
"コマンドを使って"/var/spool/cron/crontabs/foo
"というcrontab
(5)ファイルを作成することでプロセスをスケジュールして実行する事ができます。
crontab
(5)ファイルの例を次に記します。
# use /bin/sh to run commands, no matter what /etc/passwd says SHELL=/bin/sh # mail any output to paul, no matter whose crontab this is MAILTO=paul # Min Hour DayOfMonth Month DayOfWeek command (Day... are OR'ed) # run at 00:05, every day 5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1 # run at 14:15 on the first of every month -- output mailed to paul 15 14 1 * * $HOME/bin/monthly # run at 22:00 on weekdays(1-5), annoy Joe. % for newline, last % for cc: 0 22 * * 1-5 mail -s "It's 10pm" joe%Joe,%%Where are your kids?%.%% 23 */2 1 2 * echo "run 23 minutes after 0am, 2am, 4am ..., on Feb 1" 5 4 * * sun echo "run at 04:05 every Sunday" # run at 03:40 on the first Monday of each month 40 3 1-7 * * [ "$(date +%a)" == "Mon" ] && command -args
![]() |
ティップ |
---|---|
連続的に稼働していないシステムでは、機器のアップタイム上可能な限り指定間隔に近く定期的にコマンドをスケジュールするために |
![]() |
ティップ |
---|---|
スケジュールされたシステムメインテナンススクリプトは、そのようなスクリプトを" |
システム異常に対する保険はカーネルコンパイルオプションの"マジックSysRqキー"(SAKキー)によって提供されま、現在のDebianカーネルではデフォールトです。Alt-SysRqに続いて次のキーの中から1つを押すことでシステムのコントロールを救済するマジックが起きます。
表9.15 SAKコマンドキーのリスト
Alt-SysRqに続くキー | アクションの説明 |
---|---|
r
|
Xクラッシュの後でキーボードをraw(生コード発生)モードから復旧 |
0
|
エラーメッセージを減らすべくコンソールログレベルを0と変更 |
k
|
全ての現仮想ターミナル上の全てのプロセスを停止(Kll) |
e
|
init (8)以外の全てのプロセスに、SIGTERMを送信
|
i
|
init (8)以外の全てのプロセスに、SIGKILL を送信
|
s
|
全てのマウントされたファイルシステムを同期(Sync) |
u
|
全てのマウントされたファイルシステムを読出し専用で再マウント(アンマウント、umount) |
b
|
同期することもアンマウントする事も無しに、システムをリブート(Reboot) |
"Alt-SysRq s"と"Alt-SysRq u"と"Alt-SysRq r"の組み合わせは、非常に悪い状況からの脱出に有効です。
"/usr/share/doc/linux-doc-2.6.*/Documentation/sysrq.txt.gz
"を参照下さい。
![]() |
注意 |
---|---|
Alt-SysRq機能があることはユーザーにroot特権機能をアクセスさせることになるのでセキュリティーリスクと考える事もできます。" |
![]() |
ティップ |
---|---|
SSHターミナルなどからは、" |
だれがシステム上にいるかは、次のようにしてチェックできます。
who
(1)は、誰がログオンしているかを表示します。
w
(1)は、誰がログオンしていて何をしているかを表示します。
lastb
(1)は、最後にログイン失敗したユーザーのリストを表示します。
lastb
(1)は、最後にログイン失敗したユーザーのリストを表示します。
![]() |
ティップ |
---|---|
" |
wall
(1)を使うと、次のようにしてシステムにログオンしている全員にメッセージを送れます。
$ echo "We are shutting down in 1 hour" | wall
PCI的デバイス(AGP、PCI-Express、CardBus、ExpressCard,等)では、
(きっと"-nn
"オプションとともに使う)lspci
(8)がハードウエアー識別の良いスタート点です。
この代わりに、"/proc/bus/pci/devices
"の内容を読むか、"/sys/bus/pci
"の下のディレクトリーツリーを閲覧することでハードウエアーの識別ができます(「procfsとsysfs」参照)。
表9.16 ハードウエアー識別ツールのリスト
パッケージ | ポプコン | サイズ | 説明 |
---|---|---|---|
pciutils *
|
V:15, I:92 | 804 |
Linux PCIユーティリティー: lspci (8)
|
usbutils *
|
V:40, I:98 | 560 |
Linux USBユーティリティー: lsusb (8)
|
pcmciautils *
|
V:0.9, I:14 | 100 |
Linux 2.6のためのPCMCIAユーティリティー: pccardctl (8)
|
scsitools *
|
V:0.19, I:1.3 | 484 |
SCSIハードウエアー管理のためのツール集: lsscsi (8)
|
pnputils *
|
V:0.02, I:0.19 | 108 |
Plug and Play BIOSのためにユーティリティー: lspnp (8)
|
procinfo *
|
V:0.4, I:3 | 164 |
下級管理業務のためのディレクトリー:
"/usr/local "、"/home "
|
lshw
*
|
V:1.1, I:6 | 604 |
ハードウエアー設定に関する情報: lshw (1)
|
discover *
|
V:3, I:12 | 928 |
ハードウエアー識別システム: discover (8)
|
GNOMEやKDEのような現代的なGUIのデスクトップ環境ではほとんどのハードウエアー設定が付随するGUI設定ツールを通じて管理できますが、それらの設定の基本的手法を知っておくのは良い事です。
表9.17 ハードウエアー設定ツールのリスト
パッケージ | ポプコン | サイズ | 説明 |
---|---|---|---|
hal
*
|
V:42, I:55 | 1680 |
ハードウエアーアブストラクションレイヤー: lshal (1)
|
console-tools *
|
V:54, I:94 | 956 | Linuxコンソールのフォントとキーテーブルユーティリティー |
x11-xserver-utils *
|
V:33, I:50 | 544 |
Xサーバーユーティリティー: xset (1)、xmodmap (1)
|
acpid
*
|
V:47, I:90 | 204 | Advanced Configuration and Power Interface (ACPI)によって起こるイベントの管理のためのデーモン |
acpi
*
|
V:4, I:33 | 92 | ACPIデバイス上の情報を表示するユーティリティー |
apmd
*
|
V:1.4, I:12 | 252 | Advanced Power Management (APM)によって起こるイベントの管理のためのデーモン |
noflushd *
|
V:0.07, I:0.12 | 244 | ハードディスクをスピンダウンできるようにするデーモン |
sleepd *
|
V:0.06, I:0.09 | 92 | 非使用状況のときにラップトップをスリープさせるデーモン |
hdparm *
|
V:13, I:36 | 284 | ハードディスクアクセスの最適化(「ハードディスクの最適化」参照) |
smartmontools *
|
V:6, I:21 | 1028 | S.M.A.R.T.を使ってストレージシステムを制御監視 |
setserial *
|
V:1.9, I:4 | 180 | シリアルポートの管理ツール集 |
memtest86+ *
|
V:0.5, I:4 | 500 | メモリーハードウエアー管理のためのツール集 |
scsitools *
|
V:0.19, I:1.3 | 484 | SCSIハードウエアー管理のためのツール集 |
tpconfig *
|
V:0.4, I:0.5 | 208 | タッチパッドデバイス設定ユーティリティー |
setcd
*
|
V:0.07, I:0.4 | 28 | コンパクトデバイスアクセス最適化 |
big-cursor *
|
I:0.2 | 68 | Xのための大きなマウスカーソール |
上記で、ACPIはAPMより新しい電力管理システムの枠組みです。
![]() |
ティップ |
---|---|
最近のシステム上のCPUフリーケンシシースケーリングは |
以下はシステムとハードウエアーの時間をMM/DD hh:mm, CCYY (月/日 時:分, 年)に設定します。
# date MMDDhhmmCCYY # hwclock --utc --systohc # hwclock --show
Debianシステムでは時間は通常地域の時間が表示されますが、ハードウエアーとシステムの時間は通常UT(GMT)を使います。
ハードウエアー(BIOS)時間がUTに設定されている場合は、"/etc/default/rcS
"の中の設定を"UTC=yes
"と変更します。
ネットワーク経由でシステムの時間を更新したい場合には、ntp
やntpdate
やchrony
等のパッケージを使ってNTPサービスを利用することを考えます。
次を参照下さい。
ntp-doc
パッケージ
![]() |
ティップ |
---|---|
|
文字コンソールとncurses
(3)システム機能を設定するのはいくつかの要素があります。
/etc/terminfo/*/*
" ファイル(terminfo
(5))
$TERM
"環境変数(term
(7))
setterm
(1)、stty
(1)、tic
(1)、toe
(1)
もしxterm
用のterminfo
エントリーが非-Debianのxterm
でうまく機能しない場合には、リモートからDebianシステムにログインする時にターミナルタイプ、"$TERM
"、を"xterm
"から"xterm-r6
"のような機能限定版に変更します。詳細は"/usr/share/doc/libncurses5/FAQ
"を参照下さい。"dumb
"は"$TERM
"の最低機能の共通項です。
現在のLinux 2.6のためのサウンドカードのためのデバイスドライバーはAdvanced Linux Sound Architecture (ALSA)で提供されています。ALSAは過去のOpen Sound System (OSS)と互換性のためのエミュレーションモードを提供します。
"dpkg-reconfigure
linux-sound-base
"を実行し、カーネルモジュールをブラックリストすることでALSAを使うように選択します。非常に新しいサウンドハードウエアーをお持ちで無ければudevインフラがあなたのサウンドシステムを設定します。
![]() |
ティップ |
---|---|
" |
![]() |
ティップ |
---|---|
音が出ない場合ですが、あなたのスピーカーが消音された出力につながっているかもしれません。現代的なサウンドシステムには多くの出力があります。 |
アプリケーションソフトはサウンドデバイスに直接アクセスするようにばかりでなく標準的なサウンドサーバーシステム経由で間接的にアクセスするように設定されているかもしれません。
表9.18 サウンドパッケージのリスト
各ポピュラーなデスクトップ環境では普通共通のサウンドエンジンがあります。アプリケーションに使われるそれぞれのサウンドエンジンはそれと異なるサウンドサーバーにつなぐようにもできます。
スクリーンセーバーを無効にするには、次のコマンドを使います。
表9.19 スクリーンセーバーを無効にするコマンドのリスト
環境 | コマンド |
---|---|
Linuxコンソール |
setterm -powersave off
|
X Window(スクリーンセーバー消去) |
xset s off
|
X Window(dpms無効) |
xset -dpms
|
X Window(スクリーンセーバーのGUI設定) |
xscreensaver-command -prefs
|
PCスピーカーのコネクタを外すとブザー音は確実に無効にできます。pcspkr
カーネルモジュールを削除すると同じ事ができます。
次のようにするとbash
(1)が使うreadline
(3)プログラムが"\a
"
(ASCII=7)に出会った際にブザー音を発生するのを防げます。
$ echo "set bell-style none">> ~/.inputrc
"/var/log/dmesg
"中にあるカーネルブートメッセージに使えるメモリーの性格な全サイズが書かれています。
free
(1)やtop
(1)は稼働中システムのメモリーリソース情報を表示します。
$ grep '\] Memory' /var/log/dmesg [ 0.004000] Memory: 990528k/1016784k available (1975k kernel code, 25868k reserved, 931k data, 296k init) $ free -k total used free shared buffers cached Mem: 997184 976928 20256 0 129592 171932 -/+ buffers/cache: 675404 321780 Swap: 4545576 4 4545572
![]() |
ティップ |
---|---|
" |
1GB=1048576kのDRAM(videoシステムがこのメモリーの一部を使用)が付いている私のMacBookでは次のようになっています。
表9.20 レポートされるメモリーサイズのリスト
報告 | サイズ |
---|---|
dmesg中の全サイズ(Total) | 1016784k = 1GB - 31792k |
dmesg中の未使用(free) | 990528k |
shell下での全(total) | 997184k |
shell下での未使用(free) | 20256k(しかし実質は321780k) |
ダメなシステム管理をするとあなたのシステムを外界からの攻撃にさらすことになるかもしれません。
システムのセキュリティーと整合性のチェックには、次の事から始めるべきです。
debsums
パッケージ、debsums
(1)と「トップレベルの"Release"ファイルと信憑性」を参照
chkrootkit
パッケージ、chkrootkit
(1)参照
clamav
パッケージ類、clamscan
(1)とfreahclam
(1)参照
表9.21 システムセキュリティーや整合性確認のためのツールリスト
パッケージ | ポプコン | サイズ | 説明 |
---|---|---|---|
logcheck *
|
V:3, I:4 | 260 | システムログの異常を管理者にメールするデーモン |
debsums *
|
V:2, I:3 | 268 | MD5チェックサムを使ってインストールされたパッケージファイルを検証するユーティリティー |
chkrootkit *
|
V:2, I:6 | 868 | ルートキット検出ソフト |
clamav *
|
V:2, I:11 | 508 | Unix用アンチウィルスユーティリティー - コマンドラインインターフェース |
tiger
*
|
V:0.8, I:1.1 | 3088 | システムセキュリティーの脆弱性を報告 |
tripwire *
|
V:0.6, I:0.7 | 4608 | ファイルやディレクトリーの整合性チェックソフト |
john
*
|
V:0.6, I:2 | 532 | アクティブなパスワードクラッキングツール |
aide
*
|
V:0.3, I:0.5 | 1112 | 先進的進入検出環境 - 静的ライブラリー |
bastille *
|
V:0.17, I:0.5 | 1960 | セキュリティー強化ツール |
integrit *
|
V:0.09, I:0.19 | 440 | ファイル整合性確認プログラム |
crack
*
|
V:0.04, I:0.3 | 204 | パスワード推定プログラム |
次のシンプルなスクリプトを使うと、典型的な間違いの全員書込み可のファイルパーミッションをチェックできます。
# find / -perm 777 -a \! -type s -a \! -type l -a \! \( -type d -a -perm 1777 \)
![]() |
注意 |
---|---|
|
Debianはモジュール化されたLinuxカーネルをサポートされるアーキテクチャに対してパッケージとしてディストリブートしています。
Linuxカーネル2.4と比較して特記すべきLinuxカーネル2.6の機能がいくつかあります。
ide-scsi
モジュールを使用しません。
iptable
カーネルモジュールを使います。
多くのLinuxの機能はカーネル変数を使い次のように設定されます。
syscrl
(8)を用い変更されたカーネル変数(see
「procfsとsysfs」参照)
modprobe
(8)の引数により設定されるモジュール変数(「ディスクイメージファイルをマウント」参照)
linux-doc-2.6.*
パッケージで供給されるLinuxカーネル文書("/usr/share/doc/linux-doc-2.6.*/Documentation/filesystems/*
")中の"kernel-parameters.txt(.gz)
"や関連する他の文書を参照下さい。
ほとんどの普通のプログラムはカーネルヘッダーを必要としませんし、コンパイルするのにそれらを直接用いるとコンパイルがうまくいかないかもしれません。普通のプログラムはDebianシステム上では(glibc
ソースパッケージから生成される)libc6-dev
パッケージが提供する"/usr/include/linux
"や"/usr/include/asm
"中のヘッダを使ってコンパイルするべきです。
![]() |
注記 |
---|---|
外部ソースからのカーネルモジュールやオートマウンターデーモン( |
Debianにはカーネルと関連モジュールをコンパイルする独自の方法があります。
表9.22 Debianシステム上でカーネルの再コンパイルためにインストールする重要パッケージのリスト
パッケージ | ポプコン | サイズ | 説明 |
---|---|---|---|
build-essential *
|
I:47 | 48 |
Debianパッケージをビルドする上で不可欠なパッケージ:
make 、gcc 、…
|
bzip2
*
|
V:55, I:79 | 132 | bz2ファイルのための圧縮と解凍ユーティリティー |
libncurses5-dev *
|
V:4, I:27 | 6836 | ncursesのためのデベロッパ用ライブラリーと文書 |
git-core *
|
V:7, I:12 | 15056 | git: Linuxカーネルによって使われている分散型リビジョンコントロールシステム |
fakeroot *
|
V:5, I:30 | 376 | パッケージを非rootとしてビルドするためのfakeroot環境を提供 |
initramfs-tools *
|
V:41, I:97 | 420 | initramfsをビルドするツール(Debian固有) |
kernel-package *
|
V:2, I:17 | 2308 | Linuxカーネルパッケージをビルドするツール(Debian固有) |
module-assistant *
|
V:3, I:21 | 540 | モジュールパッケージをビルドするツール(Debian固有) |
dkms
*
|
V:1.6, I:2 | 416 | 動的カーネルモジュールサポート(DKMS) (汎用) |
devscripts *
|
V:2, I:14 | 1712 | Debianパッケージメンテナ用ヘルパースクリプト(Debian固有) |
linux-tree-2.6.*
|
N/A | N/A | Linuxカーネルのソースツリーのメタパッケージ(Debian固有) |
「2段目: ブートローダー」中でinitrd
を使う場合、initramfs-tools
(8)とupdate-initramfs
(8)とmkinitramfs
(8)とinitramfs.conf
(5)中の関連情報をしっかり読んで下さい。
![]() |
警告 |
---|---|
Linuxカーネルソースをコンパイルする時にソースツリー中のディレクトリー(例えば" |
![]() |
注記 |
---|---|
Debianの |
![]() |
注記 |
---|---|
動的カーネルモジュールサポート(DKMS)は、カーネル全体を変えること無く個別カーネルモジュールをアップグレードできるようにする新しいディストリビューションに依存しない枠組みです。これに |
カスタムカーネルパッケージを作るためにカーネルソースをコンパイルするDebianの標準手法ははmake-kpkg
(1)を使います。正式の文書は"/usr/share/doc/kernel-package/README.gz
"(最後の部分)にあります。カスタム化はkernel-pkg.conf
(5)とkernel-img.conf
(5)を参照下さい。
amd64システムの例を次に記します。
# aptitude install linux-tree-<version> $ cd /usr/src $ tar -xjvf linux-source-<version>.tar.bz2 $ cd linux-source-<version> $ cp /boot/config-<oldversion> .config $ make menuconfig ... $ make-kpkg clean $ fakeroot make-kpkg --append_to_version -amd64 --initrd --revision=rev.01 kernel_image modules_image $ cd .. # dpkg -i linux-image*.deb
"shutdown -r now
"としてリブートし、新しいカーネルへ移行します。
![]() |
注意 |
---|---|
1台の機器のためだけにコンパイルされた非モジュール化したカーネルを作りたい際には、initrdを使わないので |
カスタムカーネルパッケージのためのカスタムモジュールパッケージを生成しインストールするDebian標準手法はmodule-assistant
(8)とmoduleソースパッケージを使います。例えば次のようにすると、unionfs
カーネルモジュールがビルドされ、それがインストールされます。
$ sudo aptitude install module-assistant ... $ sudo aptitude install unionfs-source unionfs-tools unionfs-utils $ sudo m-a update $ sudo m-a prepare $ sudo m-a auto-install unionfs ... $ sudo apt-get autoremove
加工されていないソースからのLinuxカーネルを今でも古典的手法でビルドできます。システムの設定の詳細は手動で面倒を見る必要があります。
$ cd /usr/src $ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-<version>.tar.bz2 $ tar -xjvf linux-<version>.tar.bz2 $ cd linux-<version> $ cp /boot/config-<version> .config $ make menuconfig ... $ make dep; make bzImage $ make modules # cp ./arch/x86_64/boot/bzImage /boot/vmlinuz-<version> # make modules_install # depmod -a # update-initramfs -c -k <version>
ブートローダーは次のように設定します。
lilo
を使う場合には、"/etc/lilo.conf
"を編集し、"/sbin/lilo
"を実行します。
grub
を使う場合には、"/boot/grub/menu.lst
"を編集します。
"shutdown -r now
"としてリブートし、新しいカーネルへ移行します。
ほとんどのハードウエアードライバーはフリーソフトウエアーとして入手できDebianシステムの一部となっていますが、あなたのシステム上のWinmodemのような一部のnon-freeの外部ドライバーをロードする必要があるかもしれません。
該当リソースをチェックします。
仮想化されたシステムを利用すると単一ハード上で同時に複数のシステムのインスタンスを実行することが加能となります。
![]() |
ティップ |
---|---|
Debianには、単純なchrootではない仮想化やエミュレーション関連のパッケージがあります。一部のパッケージはあなたがそのような環境をセットアップする事を援助します。
表9.23 仮想化ツールのリスト
異なるプラットフォーム仮想化策の詳細な比較はWikipediaの記事Comparison of platform virtual machinesを参照下さい。
![]() |
注記 |
---|---|
ここに記載された機能の一部は |
![]() |
注記 |
---|---|
|
仮想化のための典型的な業務フローにはいくつかの段階があります。
空のファイルシステムの作成(ファイルツリーもしくはディスクイメージ)。
mkdir -p /path/to/chroot
"として作成できる。
dd
(1)を使って作れます(「ディスクイメージの作成」と「空のディスクイメージ作成」参照)。
qemu-img
(1)はQEMUによりサポートされたディスクイメージの作成や変換に使えます。
mount
(8)を使ってディスクイメージをファイルシステムにマウントする(任意)。
必要なシステムデーターを用いて対象のファイルシステムを充足。
debootstrap
やcdebootstrap
のようなプログラムがこのプロセスを援助します(「Chrootシステム」参照)。
仮想化環境下でプログラムを実行。
rawディスクイメージファイルに関しては、「ディスクイメージ」を参照下さい。
他の仮想ディスクイメージに関しては、qemu-nbd
(1)を使ってネットワークブロックデバイスプロトコルを用いてそれらをエクスポートしnbd
カーネルモジュールを使ってそれらをマウントできます。
qemu-nbd
(1)はQEMUがサポートする次のディスクフォーマットをサポートします: raw、qcow2、qcow、vmdk、vdi、bochs、cow (user-mode
Linuxのcopy-on-write)、parallels、dmg、cloop、vpc、vvfat (virtual VFAT)、host_device。
ネットワークブロックデバイスはloopデバイスと同様の方法でパーティションをサポートします(「ディスクイメージファイルをマウント」参照)。"image.img
"の最初のパーティションは次のようにするとマウントできます。
# modprobe nbd max_part=16 # qemu-nbd -v -c /dev/nbd0 disk.img ... # mkdir /mnt/part1 # mount /dev/nbd0p1 /mnt/part1
![]() |
ティップ |
---|---|
|
chroot
(8)を使うのは、GNU/Linux環境の異なったインスタンスをリブートすることなく単一システム上で同時に実行する最も基本的な手法です。
![]() |
注意 |
---|---|
次の例は親システムとchrootシステムが同じCPUアーキテクチャを共有していると仮定しています。 |
pbuilder
(8)
プログラムをscript
(1)の下で次のように実行するとchroot
(8)の設定と使い方が学べます。
$ sudo mkdir /sid-root $ sudo pbuilder --create --no-targz --debug --buildplace /sid-root
"sid-root
"の下にsid
環境のためのシステムデーターをどのようにして充足するかはdebootstrap
(8)かcdebootstrap
(1)を見ると分かります。
![]() |
ティップ |
---|---|
この |
$ sudo pbuilder --login --no-targz --debug --buildplace /sid-root
どのようにしてsid
環境下で実行されるシステムシェルが作られるかが次で観察できます。
"/etc/hosts
"と"/etc/hostname
"と"/etc/resolv.conf
")
/proc
"ファイルシステムのマウント
/dev/pts
"ファイルシステムのマウント
/usr/sbin/policy-rc.d
"を作成
chroot /sid-root bin/bash -c 'exec -a -bash
bin/bash'
"を実行
![]() |
注記 |
---|---|
プログラムによっては機能するためにchrootの下で |
![]() |
注記 |
---|---|
" |
![]() |
ティップ |
---|---|
|
![]() |
ティップ |
---|---|
類似の |
仮想化を使って複数のデスクトップシステムを安全に実行するには、Debian安定版(stable
)システム上でQEMUかVirtualBoxを使うことをお勧めします。これらを使うと通常ありがちなリスクに晒されずにDebianテスト版(testing
)や不安定版(unstable
)システムのデスクトップアプリケーションを実行できるようになります。
純粋なQEMUは非常に遅いので、ホストシステムがサポートする際にはKVMを使って加速することをお勧めします。
QEMU用のDebianシステムを含む仮想ディスクイメージ"virtdisk.qcow2
"はdebian-installer: 小さな
CDを使って次のように作成できます。
$ wget http://cdimage.debian.org/debian-cd/5.0.3/amd64/iso-cd/debian-503-amd64-netinst.iso $ qemu-img create -f qcow2 virtdisk.qcow2 5G $ qemu -hda virtdisk.qcow2 -cdrom debian-503-amd64-netinst.iso -boot d -m 256 ...
更なるティップに関してはDebian wiki: QEMUを参照下さい。
VirtualBoxはQtのGUIツールとして提供され非常に直感的に理解できます。そのGUIとコマンドラインツールはVirtualBox User ManualとVirtualBox User Manual (PDF)で説明されています。