スーパーユーザー以外のユーザーがファイルシステムをマウントできるようにする方法は?

スーパーユーザー以外のユーザーがファイルシステムをマウントできるようにする方法は?

特定のユーザー(グループメンバーなど)のマウントを許可できますか?どのスーパーユーザー権限を持たないLinuxのファイルシステムはありますか?

もう1つの質問は、「ユーザーがファイルシステムをマウントしてどのようにシステムを損傷する可能性がありますか?」です。

ベストアンサー1

いくつかの方法がありますが、その一部はほとんど安全であり、一部はまったく安全ではありません。

安全でない方法

mountたとえば、sudoを介して誰でもrunを使用できます。あなたはそれらに根を下げることもできます。それは同じです。ユーザーはbashroot権限をすぐに提供する--runningのsuid rootコピーを使用してファイルシステムをマウントできます(実行中であることを除いて、ログ記録がない可能性がありますmount)。

/etcあるいは、ユーザーは自分のファイルシステムまたはコピーを含む自分のファイルシステムをその上にマウントしてから、root/etc/shadow権限/etc/sudoersを使用または取得できます。あるいは、これら2つのファイルのいずれかをバインドインストール()することもできます。または、新しいファイルを 。susudomount --bind/etc/sudoers.d

/etc/pam.d同様の攻撃は他の多くの場所でも実行できます。

ファイルシステムがデバイスに存在する必要はなく、-o loopユーザーが所有する(したがって変更可能な)ファイルがマウントされることに注意してください。

最も安全な方法:udiskまたは同様の方法

実際、さまざまなデスクトップ環境では、ユーザーがリムーバブルメディアをマウントできるようにするソリューションを構築しました。これは、onlyサブディレクトリにインストールされ、/mediaカーネルオプションを介してset-user / group-idサポートがオフになることです。ここにあるオプションにはudisks、、、、、、udisks2pmountusbmount

必要に応じて、同様の操作を実行してsudoを介して呼び出すスクリプトを直接作成できますが、ルートの脆弱性を残さないように、このスクリプトを非常に慎重に作成する必要があります。ユーザーがsudoを思い出させないようにするには、スクリプトで次のことを実行できます。

#!/bin/bash
if [ $UID -ne 0 ]; then       # or `id -u`
    exec sudo -- "$0" "$@"
fi

# rest of script goes here 

1日の安全な方法:ユーザーの名前空間

Linuxネームスペースは非常に軽量な仮想化です(具体的にはコンテナ)。特にユーザーネームスペースの場合どのシステムのユーザーは自分の環境を作成し、その中でrootとして実行できます。これによりファイルシステムをマウントできますが、一部の仮想ファイルシステムを除いて、ファイルシステムは明示的にブロックされます。結局、FUSEファイルシステムは許可されるかもしれませんが、私が見つけることができる最新のパッチブロックデバイスは含まれず、sshfsのようなものだけが含まれます。

さらに、多くのデプロイカーネルは(セキュリティ上の理由から)権限のないユーザーがデフォルトでユーザーの名前空間を使用することを許可しません。ダーバンデフォルトkernel.unprivileged_userns_cloneは0です。他のディストリビューションも同様の設定を持っており、名前が少し異なることがよくあります。

ユーザーの名前空間について私が知っている最高の文書はLWN記事です。 実際のネームスペース、パート5:ユーザーネームスペース

今はudisks2を選択します。

おすすめ記事