/etc/fstab にマウントをバインドし、サブディレクトリに suid を追加します。

/etc/fstab にマウントをバインドし、サブディレクトリに suid を追加します。

私はこれを行うために正常にマウントを使用しました。

sudo mount -o bind dir dir && 
sudo mount -o remount,bind,suid dir

2回の呼び出しが必要ですmount。短時間で作業を実行することはできません。とにかく、マニュアルは2つのマウントシステムコールが必要であると述べています。 しかし、何を入れるべきかわかりません/etc/fstab

私が試したことは次のとおりです。

/home/system/dir /home/system/dir none bind
/home/system/dir /home/system/dir none remount,bind,suid

そして

/home/system/dir /home/system/dir none remount,bind,suid

ベストアンサー1

バインドマウントの期待される動作をトリガーするために単一の項目を使用する構文解決方法を考えました/etc/fstab。それ以外の場合、forはトリガーされませんsuid(ただしforはトリガーされますnosuid)。辛抱強くなければ、答えの最後の行に行くことができます。

  • /etc/fstab渡すシステム起動時と経由将来的には重複項目はサポートされません。

    システム各項目をインストール単位に変換します。同じ名前の2つのユニットがあると問題が発生するようです。独自に同じ問題がある可能性があります。同じ名前の2つの項目を区別する方法がないため、最初の項目しか存在できませんが、/etc/fstabとにかく異なる動作を期待できます。

    したがって、次の方法でこの問題を処理してみてください。二つ入学は/etc/fstab難しいようです。

  • これコマンド(単独でまたは一緒にシステム)反対の場合にのみうまく処理する。

    「否定的」オプション(nosuidバインドマウントなど)を指定する場合は、最新のオプションで十分です。コマンド(またはシステムそうでない場合)正しく2つを放出します。mount(2)システムコールの2番目の呼び出しは追加のMS_REMOUNTフラグを使用します。 「ポジティブ」オプションのみが指定されている場合(システムコールから欠落しているフラグに変換される)、以前の「ネガティブ」オプションを復元する意図があっても、単一のマウントシステムコールが実行されます。

    たとえば、2つのシステムコールの動作をトリガーする別のオプションを指定すると、追加のbind,nodev「攻撃的な」オプション(suidwithbind,nodev,suidなど)も2番目のマウントシステムコールから始まります(反対フラグがないため)。suidこれはstraceの例でうまく機能します。

    743790 mount("/home/system/dir", "/home/system/dir", 0x563792444220, MS_NODEV|MS_BIND, NULL) = 0
    743790 mount("none", "/home/system/dir", NULL, MS_NODEV|MS_REMOUNT|MS_BIND, NULL) = 0
    

    存在しないMS_NOSUIDためMS_REMOUNT、マウントポイントがに設定されますsuid。これはまた、親マウントに設定されている他のすべてのデフォルトオプションが、関連付けられたバインドマウントに対して明示的に書き換えられなければならないことを意味します。それ以外の場合、そのオプションは消えます。ここでオプションを指定しないと、suidバインドマウントが再マウントされます。スエイドMS_NOSUIDどちらの場合も、2番目のマウントシステムコールでフラグが欠落しているためです。 2番目のシステムコールをトリガーするオプションはまだ存在しなければならず、そうでなければまったく実行されません。

OPの意図はここでルートレスコンテナを実行することであると推測されるので、この動作を実行し続けるには無害なオプションを使用する必要があります。私が見つけることができる唯一の候補者mount(2)wasMS_NOATIMEまたはMS_NODIRATIMEand MS_RELATIME、最後は今日のデフォルト値であり、確かに既に存在します。

Linux 2.4以降、上記の一部フラグはインストールごとに設定できます。、他のものはマウントされたファイルシステムのスーパーブロックに適用されます。これは、同じファイルシステム内のすべてのマウントがこれらのフラグを共有することを意味します。 (以前はすべてのフラグがスーパーブロックごとに行われました。)

これ各取付点の表示以下に示すように:

  • Linux 2.4以降:MS_NODEVとフラグMS_NOEXECMS_NOSUIDマウントポイントごとに設定できます。
  • また、Linux 2.6.16以降:MS_NOATIMEMS_NODIRATIME
  • またLinux 2.6.20から: MS_RELATIME

[...]

Linux 2.6.16以降、MS_RDONLYスーパーブロックはデフォルトのファイルシステムだけでなく、マウントポイントごとに設定または消去できます。

[...]

したがって、今日実行された項目の最終的に予想される効果は次のとおりです。

/home/system/dir    /home/system/dir    none    bind,relatime   0 0

単にリセットするrelatimeと、2番目のマウントsyscallがトリガーされ、変更が再び許可されますsuid。この場合、/homeフラグがあると通常rw,nosuid,relatimeどおり処理されるという/home/system/dirフラグがあります。rw,relatime設定値バイナリ、他は変更されていません。

suidただし、一貫性、文書化/理解のため、および将来の変更/改善を防ぐために、目的の目的を明確に指定することが最善です。

/home/system/dir    /home/system/dir    none    bind,relatime,suid  0 0

おすすめ記事