特定のユーザー(グループメンバーなど)のマウントを許可できますか?どのスーパーユーザー権限を持たないLinuxのファイルシステムはありますか?
もう1つの質問は、「ユーザーがファイルシステムをマウントしてどのようにシステムを損傷する可能性がありますか?」です。
答え1
いくつかの方法がありますが、その一部はほとんど安全であり、一部はまったく安全ではありません。
安全でない方法
mount
たとえば、sudoを介して誰でもrunを使用できます。あなたはそれらに根を下げることもできます。それは同じです。ユーザーはbash
root権限をすぐに提供する--runningのsuid rootコピーを使用してファイルシステムをマウントできます(実行中であることを除いて、ログ記録がない可能性がありますmount
)。
/etc
あるいは、ユーザーは自分のファイルシステムまたはコピーを含む自分のファイルシステムをその上にマウントしてから、root/etc/shadow
権限/etc/sudoers
を使用または取得できます。あるいは、これら2つのファイルのいずれかをバインドインストール()することもできます。または、新しいファイルを 。su
sudo
mount --bind
/etc/sudoers.d
/etc/pam.d
同様の攻撃は他の多くの場所でも実行できます。
ファイルシステムがデバイスに存在する必要はなく、-o loop
ユーザーが所有する(したがって変更可能な)ファイルがマウントされることに注意してください。
最も安全な方法:udiskまたは同様の方法
実際、さまざまなデスクトップ環境では、ユーザーがリムーバブルメディアをマウントできるようにするソリューションを構築しました。これは、onlyサブディレクトリにインストールされ、/media
カーネルオプションを介してset-user / group-idサポートがオフになることです。ここにあるオプションにはudisks
、、、、、、udisks2
pmount
usbmount
必要に応じて、同様の操作を実行して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を選択します。
答え2
これは可能ですが、マウントするファイルシステムに対応するエントリを変更し、/etc/fstab
そのエントリにフラグを追加する必要があります。user
これにより、権限のないユーザーがインストールできます。
バラよりman mount
詳細については。
答え3
ここ設定ウィキですか?ポルキットルールウデカ/ウデカ2ルートではなく(ユーザーなど)グループを介してパーティションをマウントしたい場合。
以下のコードを次の場所に保存してください。/etc/polkit-1/rules.d/50-udisks.rules
polkit.addRule(function(action, subject) {
var YES = polkit.Result.YES;
var permission = {
// only required for udisks1:
"org.freedesktop.udisks.filesystem-mount": YES,
"org.freedesktop.udisks.filesystem-mount-system-internal": YES,
"org.freedesktop.udisks.luks-unlock": YES,
"org.freedesktop.udisks.drive-eject": YES,
"org.freedesktop.udisks.drive-detach": YES,
// only required for udisks2:
"org.freedesktop.udisks2.filesystem-mount": YES,
"org.freedesktop.udisks2.filesystem-mount-system": YES,
"org.freedesktop.udisks2.encrypted-unlock": YES,
"org.freedesktop.udisks2.eject-media": YES,
"org.freedesktop.udisks2.power-off-drive": YES,
// required for udisks2 if using udiskie from another seat (e.g. systemd):
"org.freedesktop.udisks2.filesystem-mount-other-seat": YES,
"org.freedesktop.udisks2.encrypted-unlock-other-seat": YES,
"org.freedesktop.udisks2.eject-media-other-seat": YES,
"org.freedesktop.udisks2.power-off-drive-other-seat": YES
};
if (subject.isInGroup("users")) {
return permission[action.id];
}
});
「users」グループにあるとし、次のコマンドを使用してパーティションをマウントします(sudoは不要)。
# udisks2
udisksctl mount --block-device /dev/sda1
# udisks
udisks --mount /dev/sda1
答え4
sudo
ユーザーグループがコマンドを実行できるように設定できますmount
。
修正する: インストールによってシステムが損傷する方法は?たとえば、ファイルシステムに setuid ルートシェルを作成し、シェルをマウントして実行して root 権限を取得できます。