Il modo migliore per disabilitare lo scambio in Linux


54

Sto eseguendo un kernel 3.18.9 compilato personalizzato e mi chiedo il modo migliore per disabilitare lo scambio sul sistema. Uso anche init se fa la differenza.

È sufficiente commentare o rimuovere la linea di swap /etc/fstabper impedire che lo swap funzioni / si monti all'avvio o dovrei ricompilare il kernel senza Support for paging of anonymous memory (swap)essere sicuro al 100% che non venga abilitato?

Eseguo partizioni crittografate e voglio prevenire perdite accidentali sul disco rigido. Le mie specifiche di sistema sono anche abbastanza grandi da poter sopravvivere in un ambiente senza swap.


Perché il tuo swap non è crittografato?
Michael Hampton

@MichaelHampton Non ho visto il bisogno nel momento in cui ho capito cosa sarebbe successo. Inoltre il mio sistema non raggiunge un punto in qualsiasi momento in cui lo scambio è stato utilizzato, quindi mi sento libero di rimuoverlo.
user283167

Rimuoverei quindi la funzionalità dal kernel. Altrimenti qualcuno può collegare una chiavetta USB e ricominciare a scambiarla.
ott--

@ott L'utente non richiede l'accesso da superutente per utilizzare l'eseguibile swapon / swapoff? Potrei disabilitarlo di nuovo per ogni evenienza, ma non sono sicuro che un utente non privilegiato possa creare file di scambio.
user283167

In effetti, ha bisogno di un accesso super utente, cosa che potrebbe con un exploit, ad es. Ma stai guardando il tuo server 24/7?
ott--

Risposte:


76
  1. Identificare i dispositivi e i file di scambio configurati con cat /proc/swaps.
  2. Disattiva tutti i dispositivi e i file di scambio con swapoff -a.
  3. Rimuovi qualsiasi riferimento corrispondente trovato in /etc/fstab.
  4. Opzionale: distruggere eventuali dispositivi o file di scambio trovati nel passaggio 1 per impedirne il riutilizzo. A causa delle tue preoccupazioni in merito alla perdita di informazioni sensibili, potresti prendere in considerazione l'idea di eseguire una sorta di cancellazione sicura.

scambio di uomini


Su alcuni sistemi è inoltre necessario ricostruire l' initrdarchivio, ad es. Con dracut --regenerate-all --forceo mkinitrd, altrimenti il ​​sistema non si avvia. Grazie a JO Aho e Carlos ER su alt.os.linux.suse.
Ant_222,

10

Se sei veramente sicuro di voler disabilitare lo scambio (nota: questo non è raccomandato, anche se sei abbastanza sicuro che la RAM fisica sia più che sufficiente), segui questi passaggi:

  1. Esegui swapoff -a: questo disabiliterà immediatamente lo scambio
  2. rimuovere qualsiasi voce di swap da /etc/fstab
  3. rebootil sistema. Se lo scambio è andato, bene. Se, per qualche motivo, è ancora qui, è stato necessario rimuovere la partizione di swap. Ripetere i passaggi 1 e 2 e, successivamente, utilizzare fdisko partedper rimuovere la partizione di swap (ora non utilizzata). Fai molta attenzione qui: rimuovere la partizione sbagliata avrà effetti disastrosi!
  4. reboot

1
Perché non è consigliabile disabilitare lo swap anche se si dispone di RAM sufficiente?
Rolf,

1
Perché Linux utilizza in modo proattivo la partizione di swap per liberare più memoria per la memorizzazione nella cache. Questo può migliorare le prestazioni. Ad ogni modo, è un parametro sintonizzabile. Per maggiori informazioni, leggi qui . Inoltre, un'improvvisa ondata di allocazione della memoria in un sistema di scambio può innescare il killer OOM del kernel.
shodanshok,

1
Grazie, questo è ragionevole. Tuttavia, stavo pensando che se "RAM sufficiente" (ad esempio: 8 o 16 GB) è piena, allora è probabilmente una sorta di situazione eccezionale (applicazione con una perdita di memoria o qualche altro problema di fuga, attacco DDOS, ecc.) In cui lo stesso caso lo swap sarebbe comunque sopraffatto. Forse non sto argomentando in modo convincente, tuttavia ciò non dovrebbe accadere nell'uso del desktop leggero.
Rolf

9

In passato /etc/fstabvenivano usate automaticamente solo le partizioni di swap , tuttavia systemd potrebbe cambiare leggermente. Potrebbe essere necessario fare:

systemctl mask dev-sdXX.swap

(cambia sdXX) nella tua partizione di swap formattata reale, che pone la domanda sul perché hai una partizione di swap se non la vuoi usare ...

Se non si utilizza systemd, rimuovere le voci di swap /etc/fstabdovrebbe essere sufficiente (per quanto ne so).

Forse la vera soluzione è quella di sbarazzarsi delle partizioni di swap, quindi non verranno utilizzate accidentalmente. Per rimuovere le partizioni di swap, userei fdisk per cambiare il tipo di partizione da swap a qualcos'altro, e quindi riformattare la partizione o usare: dd if=/dev/zero of=/dev/old-swap-partitionper azzerarla e impedirne l'uso.

Vedi anche Configurare l'uso della partizione di swap con systemd .


Uso ancora init tramite openRC, ho appositamente eliminato systemd dall'installazione. E per quanto riguarda la domanda di scambio, stavo facendo un'installazione regolare fino a quando non ho preso la decisione di usare cryptsetup / luks per montare file crittografati formattati su ext4 sopra il mio filesystem. Se potessi essere così gentile da toccare il modo di disabilitare lo scambio quando usi init lo apprezzerei.
user283167

0

Quando visualizzo il file / etc / fstab su Raspbian vedo un commento che dice

a swapfile is not a swap partition, no line here
  use dphys-swapfile swap[on|off] for that

Ma per disabilitare completamente il file di scambio preconfigurato funziona perfettamente:

swapoff -a
chmod -x /etc/init.d/dphys-swapfile
reboot

Questa soluzione mi sembra un po 'veloce e sporca, tuttavia puoi semplicemente riattivarla con:

chmod +x /etc/init.d/dphys-swapfile
reboot
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.