GNU/Linux >> Linux Esercitazione >  >> Linux

Come consentire ai non superutenti di montare qualsiasi filesystem?

Ci sono un paio di approcci, alcuni per lo più sicuri, altri per niente.

Il modo insicuro

Consenti a qualsiasi utilizzo di eseguire mount , ad esempio tramite sudo. Potresti anche dare loro radice; è la stessa cosa. L'utente può montare un filesystem con una copia suid root di bash —in esecuzione che fornisce istantaneamente root (probabilmente senza alcuna registrazione, oltre al fatto che mount è stato eseguito).

In alternativa, un utente potrebbe montare il proprio filesystem su /etc , contenente la propria copia di /etc/shadow o /etc/sudoers , quindi ottenere root con su o sudo . O possibilmente bind-mount (mount --bind ) su uno di questi due file. O un nuovo file in /etc/sudoers.d .

Attacchi simili potrebbero essere sferrati su /etc/pam.d e molti altri luoghi.

Ricorda che i filesystem non devono nemmeno essere su un dispositivo, -o loop monterà un file di proprietà (e quindi modificabile) dell'utente.

Il modo più sicuro:udisk o simili

I vari ambienti desktop in realtà hanno già costruito soluzioni a questo, per consentire agli utenti di montare supporti rimovibili. Funzionano montando in una sottodirectory di /media solo e disattivando il supporto set-user/group-id tramite le opzioni del kernel. Le opzioni qui includono udisks , udisks2 , pmount , usbmount ,

Se devi, puoi scrivere il tuo script per fare qualcosa di simile e invocarlo tramite sudo, ma devi stare molto attento a scrivere questo script per non lasciare gli exploit di root. Se non vuoi che i tuoi utenti debbano ricordare sudo, puoi fare qualcosa di simile in uno script:

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

# rest of script goes here 

Il modo in cui un giorno sarà sicuro:gli spazi dei nomi degli utenti

Gli spazi dei nomi Linux sono una forma molto leggera di virtualizzazione (contenitori, per essere più specifici). In particolare, con gli spazi dei nomi utente, any l'utente sul sistema può creare il proprio ambiente in cui è root. Ciò consentirebbe loro di montare filesystem, tranne che è stato esplicitamente bloccato ad eccezione di alcuni filesystem virtuali. Alla fine, i filesystem FUSE saranno probabilmente consentiti, ma le patch più recenti che ho trovato non coprono i dispositivi a blocchi, solo cose come sshfs.

Inoltre, molti kernel distro hanno (per motivi di sicurezza) l'impostazione predefinita per non consentire agli utenti non privilegiati di utilizzare gli spazi dei nomi degli utenti; per esempio Debian ha un kernel.unprivileged_userns_clone il valore predefinito è 0. Altre distribuzioni hanno impostazioni simili, anche se spesso con nomi leggermente diversi.

La migliore documentazione che conosco sugli spazi dei nomi degli utenti è un articolo di LWN Spazi dei nomi in funzione, parte 5:Spazi dei nomi degli utenti.

Per ora, sceglierei udisks2.


Puoi farlo, ma devi modificare la voce in /etc/fstab corrispondente al filesystem che vuoi montare, aggiungendo il flag user a questa voce. Gli utenti senza privilegi sarebbero quindi in grado di montarlo.

Vedi man mount per maggiori dettagli.


Ecco il wiki per configurare polkit regole per udisks/udisks2 per montare le partizioni per gruppo non root (ad es. utenti).

Salva il codice qui sotto in /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];
  }
});

Supponi di essere nel gruppo "utenti", utilizzando il seguente comando per montare una partizione (non è necessario sudo).

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

# udisks
udisks --mount /dev/sda1

Linux
  1. Come avere un filesystem montato durante l'accesso dell'utente?

  2. Come inviare comandi a qualsiasi terminale?

  3. Linux:come montare un filesystem remoto specificando un numero di porta?

  4. Come montare automaticamente un filesystem usando Systemd

  5. Come creare/rimuovere e montare un filesystem Stratis in CentOS/RHEL 8

Come montare una condivisione NFS in Linux

Come montare file ISO su Linux

Come montare un filesystem Linux remoto usando SSHFS

Come montare NFS su Debian 11

come eseguire il test del filesystem?

Come montare un dispositivo in Linux?