chflagsでアキレス腱解消!!

前回、アキレス腱であるファイルを消してしまい、とんでもない事態に陥りましたが、そのアキレス腱を打破すべく以下のコマンドを使ってみました。

コマンド : chflags

フラグの設定 フラグの解除 フラグの内容 必要な権限
arch noarch archived root
opaque noopaque opaque 所有者またはroot
nodump nonodump nodump 所有者またはroot
sappnd nosappnd system append-only root
schg noschg system immutable root
sunlnk nosunlnk system undeletable root
uappnd nouappnd user append-only 所有者またはroot
uchg nouchg user immutable 所有者またはroot
uunlnk nouunlnk user undeletable 所有者またはroot

なんだかはよくわかりませんが、immutableは変更不可、undeletableは削除不可なのだそうです。

ということは…。

# chflags schg /libexec
# chflags schg /libexec/ld-elf.so.1
#
#
# mv ld-elf.so.1 ld-elf.so.1.1
mv: rename ld-elf.so.1 to ld-elf.so.1.1: Operation not permitted
#

とりあえず移動やリネームによるアキレス腱は消えました。
そして、肝心の削除ですが、

# rm ld-elf.so.1
override r-xr-xr-x root/wheel schg for ld-elf.so.1? y
rm: ld-elf.so.1: Operation not permitted

消せなくなりました。よかったー。(^^;

PostgreSQLのDBバックアップ&復旧方法

PostgresのDBをバックアップし、その後復旧する方法です。
(._.) φ メモメモ

バックアップ方法
(postgresqlは起動した状態にしておく)

% pgdumpall > backup.db

復旧方法
(postgresqlを起動し、initdbだけしておく)

% psql -e template1 < backup.db

復旧時の注意点は、やっぱり -e をつけないとだめなようです。

恐ろしきかなld-elf.so.1の罠。

なんとなく会社でFreeBSDにantivirをインストールしていたarakawaさんが、こんな事を言いました。

「ELF interpreter /libexec/ld-elf.so.1 not found」 が出るのですよ。

そういえばうちのサーバくんでも出たっけ。

そのときはとりあえずしのぎで、/usr/libexec/ld-elf.so.1 を /libexec/ld-elf.so.1 にコピーして終了。
その後なんとなく気持ち悪いので、以下のコマンドを入れてシンボリックリンクにでもしたいなぁ、と思いやってしまいました。

# cd /libexec
# mv ld-elf.so.1 ld-elf.so.1.orm (ormではなくorgのタイプミス…今後オルムファイルと呼びましょう。)

そして、シンボリックリンクでも張ろうと思った矢先、

# cd /
# mv libexec libexec.orm
ELF interpreter /libexec/ld-elf.so.1 not found
Aborted.

なぬ……………………………………………………。

これ、とんでもなく大事なファイルなんですね。(泪
調べたら、ld-elf.so.1さんはFreeBSDのバイナリを実行するのにとても大事そうなファイルなんだそうです。

おかげで、cpもlsもmvもなにもできないし、新たにsshでログインしてもまるでダメ。
あーあ、CD起動でなおさなくちゃいけないのかなぁとか思った矢先、そうだlinx_baseがたしか入っていたな、FreeBSDのELFバイナリじゃなければ…ということで、以下のコマンドを入れてみるわけです。

# /compat/linux/bin/bash
bash#

助かった…。ありがとうLinuxカーネルさん。あんたにちょっとだけ感謝するよ。

その後、慣れないbashでなんとかシンボリックリンクを作って逃げました。

うーん、これとても驚異ですね。。。まさしく「アキレス腱」です。