mknod
通常のファイル、FIFO、またはUnixソケット以外のノードを作成するときに、コマンドにroot権限が必要であることがわかりました。
なぜそんなことですか?一般ユーザーがmknod
一般ファイルを生成するときに使用できないコマンドを使用して、システムに害を与えたり、他のユーザーの個人情報を侵害したりできますか?
答え1
mknodをランダムに呼び出すことができれば、所有してアクセスできるデバイスファイルを作成できます。あなたに走ったすべてのデバイスについて。デバイスファイルはそのデバイスへの無制限のアクセスを提供するため、すべてのユーザーはデバイスに無制限にアクセスできます。
たとえば、/dev/sda1
アクセス権のないファイルシステムがあるとします。 (たとえば、にインストールされています/secret
)。ここでブロック 8,1 は特別なので、たとえば mknod を呼び出せると、ファイルシステムの制限にかかわらず、/dev/sda1
自分のデバイス file を介して何でもmknod ~/my_sda1 b 8 1
アクセスできます。 (デバイスを何の構造もないフラットファイルとして受け取るので、どうすればよいかを知る必要がありますが、ブロックデバイスファイルにアクセスするためのライブラリがあります。)/dev/sda1
/dev/sda1
/dev/sda1
同様に、/dev/mem
またはのコピーを作成できる/dev/kmem
場合は、メインメモリ内のすべてのエントリを確認できます。/dev/tty*
またはのコピーを作成できる場合は、/dev/pts/*
キーボード入力などを記録できます。
したがって、mknodは通常のユーザーの手にハローなので、使用を制限する必要があります。
(注) これがnodev
リムーバブルデバイスへのインストールオプションが重要な理由です。それ以外の場合は、準備されたリムーバブルメディアに独自のデバイスファイルをインポートできます。
答え2
を使用すると、mknod
以下を許可するデバイス特殊ファイルを生成できます。ハードウェアへのrawアクセス。言い換えると、カーネルは、デバイス特殊ファイルに対する権限を調べて、特定のユーザが、構成または同様のエントリへのアクセスではなく、ハードウェアへの生のアクセスを許可されるかどうかを決定する。
たとえば、Debianでは、オプティカルドライブに関連するデバイスがroot
0660権限ビット、ユーザー、およびグループとして作成されますcdrom
。root
またはグループ内で、「マウントされたファイルシステムの代わりに画像を作成するcdrom
」などの操作を実行できますdd
。書き込み/dev/dvd
可能なハードドライブ(例:/dev/sda
デバイス特殊ファイルは通常このディレクトリに作成されますが、Linuxシステムには、このオプションを使用してインストールされていないすべてのファイルシステムにデバイスノードを含めることができる/dev
固有の要素はありません。nodev
デバイスノードを物理デバイスに接続する唯一の要素は、タイプ(ブロックまたは文字)とプライマリノードとセカンダリノードです。
したがって、一般ユーザーがデバイス特殊ファイルを作成できる場合は、デバイス特殊ファイル(ホームディレクトリなど)を作成してコアに使用するだけで、すべてのカーネルセキュリティをバイパスし、すべてのハードウェアに直接アクセスできます。ハードドライブを攻撃します。
したがって、デバイス特殊ファイルはroot
。
答え3
汎用、FIFO、およびソケットファイルの種類に加えて、mknodはデバイスファイルを生成できます。これはデバイスにアクセスするために使用されます。
デバイスへのアクセス権の付与は、特権アクションと見なされます。一般に、ランダムなデバイスノードを作成して、一般ユーザーがアクセスできるようにしたくありません。それは悪いことです。
[注:デバイスアクセスは通常、既存のデバイスノードの権限を変更することによって許可されます。標準のLinuxでは/dev/
これが制御されるため、追加のudev
udevルールを使用できます。
はい
$ mount|grep -w /
/dev/mapper/vg_fossil-root on / type ext4 (rw,seclabel,data=ordered)
$ ls -l /dev/mapper/vg_fossil-root
lrwxrwxrwx. 1 root root 7 Jan 18 08:46 /dev/mapper/vg_fossil-root -> ../dm-0
$ ls -l /dev/dm-0
brw-rw----. 1 root disk 253, 0 Jan 18 08:46 /dev/dm-0
rootユーザーとして:
# mknod root-partition b 253 0
# chmod a+rw root-partition # make file available as if created as a normal user
これで、ファイルシステムが保存されているデバイスに直接アクセスできるようになります。
$ ls -l root-partition
brw-rw-rw-. 1 root root 253, 0 Jan 18 15:05 root-partition
元の権限がなかったファイルからデータを読み取ることができます。
$ grep secret root-parition
Binary file root-partition matches
または、次のコマンドの前にある「echo」を削除すると、ファイルシステムが存在しなくなります。
$ echo dd if=/dev/zero of=root-partition
掃除する
使用する追加のデバイスファイルを作成したら、破損なく安全に削除できます。
$ rm root-partition
もちろん、間違って誤ったファイルを削除した場合やすべてのファイルを削除した場合は除外されます。このコマンドは、元に戻す/削除するキャンセルまたは確認メッセージを提供しません。コマンドラインは許せません:)唯一の保護は、-r
またはがなければ*
ディレクトリを削除しません。
答え4
「刑務所」(ルートファイルシステム内のデバイスなど)のデバイスファイルにmknod
アクセスするために使用できます。chroot