GNU/Linux >> Znalost Linux >  >> Linux

Jak povolit uživatelům, kteří nejsou superuživateli, připojit jakýkoli souborový systém?

Existuje několik přístupů, některé z nich většinou bezpečné, jiné vůbec.

Nebezpečný způsob

Nechte libovolné použití spustit mount , např. prostřednictvím sudo. Můžete jim také dát kořen; je to to samé. Uživatel mohl připojit souborový systém se suid kořenovou kopií bash —spuštění, které okamžitě poskytne root (pravděpodobně bez jakéhokoli protokolování, kromě skutečnosti, že mount byl spuštěn).

Alternativně by uživatel mohl připojit svůj vlastní souborový systém nad /etc , obsahující jeho/její vlastní kopii /etc/shadow nebo /etc/sudoers , pak získejte root buď s su nebo sudo . Nebo možná bind-mount (mount --bind ) přes jeden z těchto dvou souborů. Nebo nový soubor do /etc/sudoers.d .

Podobné útoky by bylo možné odrazit přes /etc/pam.d a na mnoha dalších místech.

Pamatujte, že souborové systémy nemusí být ani na zařízení, -o loop připojí soubor, který je ve vlastnictví (a tedy upravitelný) uživatelem.

Většinou bezpečný způsob:udisky nebo podobné

Různá desktopová prostředí již ve skutečnosti vytvořila řešení, která uživatelům umožňují připojit vyměnitelná média. Fungují tak, že se připojují do podadresáře /media pouze a vypnutím podpory set-user/group-id prostřednictvím voleb jádra. Možnosti zde zahrnují udisks , udisks2 , pmount , usbmount ,

Pokud musíte, můžete napsat svůj vlastní skript, který udělá něco podobného, ​​a vyvolat ho pomocí sudo – ale musíte být při psaní tohoto skriptu opravdu opatrní, abyste neopustili root exploity. Pokud nechcete, aby si vaši uživatelé museli pamatovat sudo, můžete ve skriptu provést něco takového:

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

# rest of script goes here 

Budeme jednou zabezpečeni:uživatelské jmenné prostory

Linuxové jmenné prostory jsou velmi lehkou formou virtualizace (konkrétněji kontejnery). Zejména u uživatelských jmenných prostorů jakýkoli uživatel v systému může vytvořit své vlastní prostředí, ve kterém je root. To by jim umožnilo připojit souborové systémy, kromě toho, že to bylo explicitně zablokováno, s výjimkou několika virtuálních souborových systémů. Nakonec budou pravděpodobně povoleny souborové systémy FUSE, ale nejnovější záplaty, které jsem našel, nepokrývají bloková zařízení, pouze věci jako sshfs.

Dále, mnoho jader distribucí má (z bezpečnostních důvodů) nastaveno tak, že neumožňují neprivilegovaným uživatelům používat uživatelské jmenné prostory; například Debian má kernel.unprivileged_userns_clone to je výchozí hodnota 0. Ostatní distribuce mají podobná nastavení, i když často s mírně odlišnými názvy.

Nejlepší dokumentací, kterou znám o uživatelských jmenných prostorech, je článek LWN Jmenné prostory v provozu, část 5:Uživatelské jmenné prostory.

Prozatím bych zvolil udisks2.


Můžete to udělat, ale musíte upravit záznam v /etc/fstab odpovídající souborovému systému, který chcete připojit, přidáním příznaku user k tomuto vstupu. Neprivilegovaní uživatelé by jej pak mohli připojit.

Viz man mount pro více podrobností.


Zde je wiki pro konfiguraci polkitu pravidla pro udisks/udisks2 za účelem připojení oddílů podle skupiny uživatelů bez oprávnění root (např. uživatelů).

Uložte níže uvedený kód do /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];
  }
});

Předpokládejme, že jste ve skupině "users" a pomocí následujícího příkazu připojte oddíl (není třeba sudo).

# udisks2
udisksctl mount --block-device /dev/sda1

# udisks
udisks --mount /dev/sda1

Linux
  1. Jak zašifrovat jeden souborový systém Linux

  2. Linux – Jak připojit vzdálený souborový systém se zadáním čísla portu?

  3. Jak najít možnosti připojení aktuálně připojeného souborového systému

  1. Jak vytvořit/odebrat a připojit systém souborů Stratis v CentOS/RHEL 8

  2. Jak připojit zařízení v Linuxu?

  3. Jak připojit souborový systém v prostředí pouze pro čtení?

  1. Jak připojit souborový systém, mapování uživatelských id?

  2. Jak mít souborový systém připojený během přihlášení uživatele?

  3. Jak převést příkazy do libovolného terminálu?