Unionfs-fuse chroot を使用すると、/dev/* にアクセスできなくなります。

Unionfs-fuse chroot を使用すると、/dev/* にアクセスできなくなります。

私は他のシステムをインストールする必要がないようにchroot刑務所を作るためにUnionfs-fuseを組み合わせました。

ただし、結果システムの/ devエントリは読み取れません。これにより/dev/random/dev/nullおよびアクセスする必要があるプログラムに問題が発生する可能性があります/dev/urandom

私は永続ファイルで構成されたディレクトリを作成し、次を使用して上記のファイルとmknod同等のファイルを作成し、この問題を直接解決しようとしました。ここその後、共用体を作成します。

# unionfs-fuse -o cow /chroot/files=RW:/chroot/persistent/:/ /chroot/chroot/

その後、

# chroot chroot/

しかし試してみるとき:

# head -c 10 /dev/random | hexdump -C

エラーが発生します。

head: cannot open `/dev/random' for reading: Permission denied

この問題をどのように解決するのですか?

/dev(likeまたは/dev/sd*他のファイルにアクセスする必要はありません/dev/mem。)

ベストアンサー1

説明は次のとおりです。mount.fuseマニュアルページ:

ファイルシステムはデフォルトでマウントされており、nodev,nosuid特権を持つユーザーのみをオーバーライドできます。

このnodevオプションを有効にすると、カーネルはマウントされたファイルシステム上のデバイスへのすべてのアクセスを無効にします。このnosuidオプションを使用すると、カーネルは setuid および setgid 属性を無視します。 root以外のユーザーがファイルシステムをマウントするときは、セキュリティのために両方のオプションが必要です。それ以外の場合は、マウントしているユーザーがファイルシステムをバイパスしてすべてのディスクにアクセスできるようにするsetuidルートシェルまたはデバイスを作成できます。

allow_otherroot以外のユーザーがファイルシステムにアクセスしたい場合でも、このオプションが必要です。

unionfs-fuse -o cow,dev,suid,allow_other /chroot/files=RW:/chroot/persistent/:/ /chroot/chroot/

chrootに表示されるデバイスを制限するには、連合マウントを使用することはありません。代わりに、dev必要なものを含む最小限のものを放棄してインストール/devしてください。 tmpfsで作成できます。

unionfs-fuse -o cow,suid,allow_other /chroot/files=RW:/chroot/persistent/:/ /chroot/chroot/
mount -t tmpfs -o mode=755 chroot-dev /chroot/chroot/dev
cp -a /dev/null /dev/zero /dev/urandom /chroot/chroot/dev
mkdir /chroot/chroot/dev/pts
mount --bind /dev/pts /chroot/chroot/dev/pts

tmpfsの代わりに準備されたデバイスを含むディレクトリをバインドマウントできます。/dev/ptschrootから擬似端末を取得するにはバインドマウントが必要です。

おすすめ記事