いますぐ実践! Linuxシステム管理

[バックナンバーのトップへ] [Linux システム管理のトップへ]


いますぐ実践! Linux システム管理 / Vol.141 / 読者数:1286名

こんばんは、うすだです。

小学校は、一昨日に終業式を迎え、早くも夏休みに突入しております。
そして、いきなりの3連休。これはもう遊び倒すしかないということで、 早速、大阪のお友だちが、どーんと泊りがけで遊びにきております。

それはもう、にぎやかで、愉快です。
こんなときに、ひとりだけ、お仕事をするわけにはいきません。
多少テンパっている部分もありますが、後からがんばることにして、 ここは存分に弾けて、楽しく過ごしたいと思います。

唯一の失敗は、次回は7月20日に発行しますと、前回、 無邪気かつ能天気に書いてしまったことでしょうか…。

そんなにぎやかな環境下から、今回も、はりきってお送りしましょう!

今回のお題 - データをしっかり消去する

サーバはみんなのものですので、いろんなひとが、さまざまな用途で使用し、 多種多様なファイルを置いたり消したりしていると思います。

ときには、個人的なファイルや、どこかのシステムの重要なファイルを、 一瞬だけ置いて、使用後すぐに消去したりといったことも、 行われることがあるのではないかと推測します。

しかし、ファイルを消した後、ほんとうにきれいさっぱり消去されているのか、 という素朴な疑問が、ふつふつと湧いてきたりもします。

システム管理者たるもの、そのあたりを曖昧にせず、はっきりさせた上で、 日々の業務に翻弄されるべきではないでしょうか。

というわけで、今回は、ファイルを消去した後、中身も完全に消え去っているのか、 もしくは残っているならどうすればよいのか、といったあたりを、 実際に確認などしてみたいと思います。


タイトルからして、結論がわかっているような感じですが、ここは知らぬふりをして、 押し通していきたいと思います。

まずは、小さなファイルシステムを作成し、その上で、 ファイルを消したときにまるっと消え去るのかどうか、確認してみたいと思います。

以下のように、1MB のファイル tameshi.img を、 dd コマンドを使用して作成してみましょう。
(サイズは 1MB じゃなくてもよいです。もちろん、 ファイル名も別の名前にしていただいて構いません。便宜上、 決め打ちにして話を進めます。)

  # dd if=/dev/zero of=tameshi.img bs=1M count=1
  # ls -l tameshi.img
  -rw-r--r-- 1 root root 1048576  7月19日 01:23 tameshi.img

そして、ext2 ファイルシステムに仕立てあげて、マウントします。
(下記では /mnt/tmp にマウントしていますが、先ほどと同様、 マウントポイントを別のディレクトリにしていただいて構いません。)

  # mkfs.ext2 -m 0 -F tameshi.img
  # mount -o loop tameshi.img /mnt/tmp
  # mount | grep /mnt/tmp
  /root/tameshi.img on /mnt/tmp type ext2 (rw,loop=/dev/loop0)
  # ls /mnt/tmp
  lost+found/

はい、無事にマウントできました。

では試しに、/etc/shadow をコピーして、アンマウントします。

  # cp -p /etc/shadow /mnt/tmp
  # umount /mnt/tmp

そうしますと、もちろん、/etc/shadow の内容が、 ファイルシステムの中に含まれていることになりますよね。

  # strings tameshi.img | grep root
  root:秘密です:13257:0:99999:7:::

とりあえず、root のエントリだけを確認してみましたが、 当然ばっちり含まれております。

ここで、再度マウントして、ファイルを消してみたいと思います。

  # mount -o loop tameshi.img /mnt/tmp
  # rm -f /mnt/tmp/shadow

ファイルとしては存在しなくなりましたが、はたして中身も消え去ったのでしょうか。 それとも残っているのでしょうか。
では、アンマウントして、先ほどと同様に確認してみましょう。

  # umount /mnt/tmp
  # strings tameshi.img | grep root
  root:秘密です:13257:0:99999:7:::

…あ、ばっちり残っていますね。

ファイルを消去しても、たどれなくなるだけで、 データの中身までは消去してくれないようです。
ですので、rm コマンドでファイルを消しておけば安心、 などと思わないようにしてくださいませ。


では、残ったデータの消去を、これから試みてみたいと思います。

中身が残ったままのデータは、空きブロックとして待機状態にありますので、 空きブロックの中身を、ごっそり消してしまえばよさそうです。

というわけで、実際に試してみましょう。
dd コマンドでファイルを作成して、空きをなくしてしまいます。

  # mount -o loop tameshi.img /mnt/tmp
  # dd if=/dev/urandom of=/mnt/tmp/dummy bs=1k count=4096
  dd: writing `/mnt/tmp/dummy': No space left on device
  ...
  # df /mnt/tmp
  Filesystem         1K-blocks   Used Available Use% Mounted on
  /root/tameshi.img       1003   1003         0 100% /mnt/tmp

空きがなくなりましたので、再度確認してみます。

  # umount /mnt/tmp
  # strings tameshi.img | grep root
  #

…おお、きれいさっぱりなくなったようです。

この方法ですと、消去したいデータだけでなく、 他の過去のデータの中身も消すことができます。
ただ、たとえば空き容量が GB や TB 単位になりますと、 大切なファイルの消去のたびに、膨大な時間がかかってしまいます。(HDD も大変です。)


それでは、ファイルを消す前に、中のデータを上書きして消してしまう、 という方法ではどうでしょうか。試してみましょう。

まずは、shadow ファイルが存在する、最初に近い状態に戻します。
(念のため確認もしています。)

  # mount -o loop tameshi.img /mnt/tmp
  # cp -p /etc/shadow /mnt/tmp
  # umount /mnt/tmp/shadow
  # strings tameshi.img | grep root
  root:秘密です:13257:0:99999:7:::

そして、dd コマンドで上書きします。

  # mount -o loop tameshi.img /mnt/tmp
  # ls -l /mnt/tmp/shadow
  -rw------- 1 root root 1056  5月22日 23:18 /mnt/tmp/shadow
  # dd if=/dev/urandom of=/mnt/tmp/shadow bs=1056 count=1

この時点で、データが残っているかどうか、確認してみましょう。

  # umount /mnt/tmp/shadow
  # strings tameshi.img | grep root
  #

上書きされてしまっていますので、すでにデータは残っていません。
ですので、この後、ファイルを普通に消去しても、安心です。

  # mount -o loop tameshi.img /mnt/tmp
  # rm /mnt/tmp/shadow
  # umount /mnt/tmp/shadow
  # strings tameshi.img | grep root
  #

というわけで、あらかじめ無関係なデータで上書きしておけば、 安心してファイルを消去できるということがわかりました。

…でも、大事なファイルを消去するときに、上記のような作業を毎度行うというのは、 とっても面倒ですよね。

ご安心ください。すでに、そのようなコマンドが存在します。
shred というコマンドは、まさに、上記のようなことを行ってくれます。

  shred -n 上書き回数 -u ファイル

と実行すると、/dev/urandom の内容を、-n オプションで指定した回数、 上書きしてくれます。そして、-u オプションにより、 最後にファイルを消去してくれます。

これはファイルだけでなく、ファイルシステムに対しても行えます。
何かで使用していた HDD に、新たに OS をインストールして、 別の目的で使用する…という場合、前のデータは極力残すべきではないと思いますので、 shred コマンドで消してしまいましょう。

  shred -n 上書き回数 /dev/hda

上記の場合、/dev/hda の中身を、/dev/urandom の内容で上書きします。
(/dev/hda は消去しませんので、-u オプションは不要です。)

もちろん、/dev/hda 上の OS から上記を行いますと、途中で大変なことになります。 ご注意ください。
(たとえば、CD や USB などの Linux を起動して、 /dev/hda が未使用の状態で実行してください。)


以上、ファイルの中身を安心して消去する方法を、ご紹介しました。

ちなみに、/dev/urandom の内容を上書きする回数は、 何回くらいが妥当なのでしょうか。…といいますか、なぜ1回ではないのでしょうか。

別データを上書きしますと、前のデータを参照する手段は、 ソフトウェア的には絶たれます。
ですが、その部分のアナログな値を測定しますと、前のデータが何だったのか、 推測することができてしまう…そうです。

ですので、繰り返し無関係なデータを上書きして、推測を困難にしたほうが、 より安心だということになります。
ただ、何回上書きすれば安心なのか、というのは、 HDD の特性なども考慮する必要がありますので、厳密にはわかりません。
shred のデフォルトの回数が 3回ですので、 3回くらいが妥当なのだろうという気はしております。(曖昧ですみません…。)

宿題の答え

前回の宿題は、

  ログのローテーション実行後、プロセスアカウンティングを勝手に有効
  にしてしまわないよう、細工を施してみましょう。

でした。

いろいろ思うことはありますが、全部説明すると、大変くどくなりましたので、 最小限的な細工の施し方を、ご紹介します。

 

まずは、RedHat 系から。
ありがたいことに、 有効なら /var/lock/subsys/psacct というファイルが存在しますので、 このファイルの有無で判別することができます。
(accton コマンドを直接実行した場合は、ファイルはできません。)

ですので、/etc/logrotate.d/psacct を、以下のように変更します。

  /var/account/pacct {
      compress
      notifempty
      daily
      rotate 31
      create 0600 root root
  postrotate
      if [ -f /var/lock/subsys/psacct ]; then
          /etc/init.d/psacct restart > /dev/null 2>&1
      fi
  endscript
  }     

ローテーション実行後、/var/lock/subsys/psacct がある場合に、 ログの切替えを促すため、プロセスアカウンティングの再起動を行います。
そうでなければなにもしませんので、勝手に有効にはなりません。

 

Debian 系の場合は、まず、 有効であることを判別するためのファイルを作成する必要があります。
そのために、/etc/init.d/acct の中で、/var/run/acct というファイルを、 作成したり削除したりします。
以下の「←この1行を追加」の行を、 /etc/init.d/acct の該当部分に追加してやってください。

  #!/bin/sh
  ...中略...
  case "$1" in
      start)
          if [ "${ACCT_ENABLE}" = "1" ]
          then
  ...中略...
          rv=$?
          if [ $rv -eq 0 ]
          then
              echo "$NAME."
              touch /var/run/acct  # ←この1行を追加
          elif [ $rv -eq 38 ]
  ...中略...
          ;;

      stop)
          echo -n "Stopping $DESC: "
  ...中略...
          if [ $? -eq 0 ]
          then
              echo "$NAME."
              rm -f /var/run/acct  # ←この1行を追加
          else
              echo "failed."
  ...中略...
          ;;

これにより、プロセスアカウンティングが有効のときに、 /var/run/acct が存在するようになります。これをたよりに、 /etc/cron.d/acct の以下の部分を、

  # Restart acct
  /etc/init.d/acct restart > /dev/null

以下のように書き換えます。

  # Restart acct
  [ -f /var/run/acct ] && /etc/init.d/acct restart > /dev/null

これで、有効なときだけ、RedHat と同様の処理が行われます。

 

そもそも、現在プロセスアカウンティングが有効かどうかわからないことが、 元凶のような気がします。
proc_fs などでわかるようにするのは、そんなに難しくないと思うのですが…。 ということで、暇なときにやってみたいと思います。

今回の宿題

今回の宿題は、

  ファイルの中の一部分を消去したとき、前データがどうなるのか、確認
  してみましょう。

です。

たとえば shadow ファイルの中の1行を消去したときに、 消した1行が完全に消え去るのか、あるいはどこかにデータが残ってしまうのか、 気になる貴兄は、同様の方法で確認してみてくださいませ。

あとがき

わたしが、はじめて UNIX なマシンとまじめに遭遇した頃は、 今のように PC が普及していませんでしたので、 レポートを書くのもメールや NetNews を読むのも、何でもかんでもすべて、 UNIX マシン上で行っていました。
(まだブラウザが存在せず、WWW が一般的でなかったころの話です。)

端末(X端末やダム端末的なものなど)を介して、 みんなでよってかかって使っていましたので、 メモリや CPU を酷使するプロセスをうっかり起動しようものなら、 みんなから袋叩きにあったものでした。(遠い目…)

しかし、普段から UNIX 環境下でいろいろ行っていたおかげで、いろいろなことを、 UNIX 上で行えるようになったように思います。
そして、あのころ覚えたことが、システム管理を行う際に立ちはだかる、 さまざまな壁を、低くしてくれているように思います。

ですので、システム管理を究めたいと思われている貴兄は、 普段使用している OS を Linux にして、 何でもかんでも Linux 上で行うようにすればよいのではないか、 と常々思っている次第です。

さて、そんな貴兄に、以下のメルマガをお勧めします。

Linux のデスクトップ環境に関する使用方法などを主体とした、 初心者のかた向けのメルマガです。
Linux の基本的な使い方や、デスクトップ環境の最新の情報などを、 毎週惜しげもなく提供してくださいます。

また、発行者の vine_user さんのサイトである「独学Linux」では、 上記メルマガ以外の情報が、いろいろと得られます。
(最近ですと、噂の EeePC 上で Fedora や Ubuntu を動かしました、 という記事が掲載されています。いいなあ…。)

Linux のデスクトップ環境の進化のすさまじさに、 ついていけなくなりつつあるわたくしとしましては、このようなメルマガやサイトは、 重要な情報源のひとつです。ありがたく活用させていただいています。

というわけで、システム管理に限らず、Linux 使いになりたいなあと思う貴兄は、 上記を熟読して、Linux をいじり倒してみてくださいまし。

 

今回も、ここまで読んでいただき、ありがとうございました。
それでは、次回は 8月3日(日) 頃に、お会いしましょう!

 

「いますぐ実践! Linux システム管理」の解除は、以下からできます。
http://www.usupi.org/sysad/ (まぐまぐ ID:149633)

バックナンバーは、こちらにほぼ全部そろっています。
http://www.usupi.org/sysad/backno.html

「栗日記」−毎日栗の絵を描いていますが、他にも活動を…乞うご期待!?
http://www.usupi.org/kuri/ (まぐまぐ ID:126454)
http://usupi.seesaa.net/ (栗日記ブログ)


[バックナンバーのトップへ] [Linux システム管理のトップへ]

トップ

バックナンバー
    [日付順] [目的別]

プロフィール

▼ リンク

独学Linux
Linuxデスクトップ環境に関する情報が満載です。 メルマガもありますよ。
Server World
CentOS 6をサーバとしたときの設定例が、これでもかというくらいたくさん載っています。 CentOS以外のディストリビューション(Fedora, Ubuntu)も充実しています。
LINUXで自宅サーバーを構築・導入(Fedora9)
Fedora9のインストールの仕方から管理方法まで、詳しく載っています。 SearchManには情報がもりだくさんです。
マロンくん.NET
〜サーバ管理者への道〜
Linuxをサーバとして使用するための、いろいろな設定方法が載っています。 マロンくんもかわいいです。 なんといっても、マロンくんという名前がいいですね!!
日経Linux
今や数少なくなってしまったLinuxの雑誌。ニュースやガイドもあります。
Linux Square − @IT
@ITが提供する、Linux の情報が満載。 載っていない設定方法はないんじゃないでしょうか。
gihyo.jp…技術評論社
Linuxに限らず様々な技術情報が満載のサイト。 SoftwareDesign誌も、 ソフトウェア技術者は必見です。
SourceForge.JP Magazine
Linux に限らず、オープンソース関連の記事が網羅されています。
ITmediaエンタープライズ:Linux Tips 一覧
Tips というより FAQ 集でしょうか。わからないことがあれば覗きましょう。
IBM developerWorks : Linux
開発者向けですが、勉強になりますよ。
Yahoo!ニュース - Linux
Yahoo!のLinuxに関するニュース一覧です。
栗日記
システム管理とかと全然関係ありませんが、毎日栗の絵を描いています。
システム管理につかれちゃったとき、癒されたいときに、ご覧ください。:-)
WEB RANKING - PC関連
ランキングに参加してみました。押してやってください。

▼ 作ってみました

Add to Google

▼ せんでん




▼ 最近読んだ本

▼ 気に入ってる本