mknodにroot権限が必要なのはなぜですか?

mknodにroot権限が必要なのはなぜですか?

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では、オプティカルドライブに関連するデバイスがroot0660権限ビット、ユーザー、およびグループとして作成されますcdromroot またはグループ内で、「マウントされたファイルシステムの代わりに画像を作成するcdrom」などの操作を実行できますdd。書き込み/dev/dvd可能なハードドライブ(例:/dev/sda

デバイス特殊ファイルは通常このディレクトリに作成されますが、Linuxシステムには、このオプションを使用してインストールされていないすべてのファイルシステムにデバイスノードを含めることができる/dev固有の要素はありません。nodevデバイスノードを物理デバイスに接続する唯一の要素は、タイプ(ブロックまたは文字)とプライマリノードとセカンダリノードです。

したがって、一般ユーザーがデバイス特殊ファイルを作成できる場合は、デバイス特殊ファイル(ホームディレクトリなど)を作成してコアに使用するだけで、すべてのカーネルセキュリティをバイパスし、すべてのハードウェアに直接アクセスできます。ハードドライブを攻撃します。

したがって、デバイス特殊ファイルはroot

答え3

汎用、FIFO、およびソケットファイルの種類に加えて、mknodはデバイスファイルを生成できます。これはデバイスにアクセスするために使用されます。

デバイスへのアクセス権の付与は、特権アクションと見なされます。一般に、ランダムなデバイスノードを作成して、一般ユーザーがアクセスできるようにしたくありません。それは悪いことです。

[注:デバイスアクセスは通常、既存のデバイスノードの権限を変更することによって許可されます。標準のLinuxでは/dev/これが制御されるため、追加のudevudevルールを使用できます。

はい

$ 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

関連情報