Comment vérifier si une partition est montée en tant que «noexec»?

14

Actuellement, j'utilise grep '\s/location/\s.*noexec' /proc/mounts.
(Est-ce une bonne façon de vérifier cela?)

utilisateur
la source
1
C'est très bien tant que vous n'avez besoin de travailler que sur des versions plus récentes de Linux.
jordanm
1
Vérifiez cette Q / R
dawud

Réponses:

13

Vous devez utiliser la commande mount (8), qui est disponible dès le départ sur tous les systèmes Linux et UNIX.

Si vous exécutez mountsans arguments supplémentaires, il liste toutes les partitions actuellement montés sur votre système, le type de système de fichiers et monter toutes les options, telles que noexec, rwou nosuid.

Par exemple:

% mount
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
/dev/sda1 on /boot type ext4 (rw,relatime,data=ordered)
/dev/mapper/basement-root on / type ext4 (rw,relatime,data=ordered)
zygis
la source
5
Sous Linux, je recommande d'utiliser /proc/mountsde préférence mount. Si /etc/mtabn'est pas mis à jour (par exemple parce qu'il /est en lecture seule), la sortie de mountpeut ne pas être à jour. En outre, pour certaines options (non noexec), mountvous donne une sortie filtrée qui peut être trompeuse pour certaines combinaisons de versions du noyau et du montage (par exemple avec les options liées à atime).
Gilles 'SO- arrête d'être méchant'
Pour trouver la partition sur laquelle le fichier ou le répertoire est monté - df -P fichier / va / ici | queue -1 | cut -d '' -f 1
brainLoop
4

En supposant que vous exécutez cela sur Linux, oui, c'est très bien. Il serait un peu plus robuste de vérifier qu'il se noexectrouve entre des virgules ou au début ou à la fin de sa colonne.

grep -Eq '^[^ ]+ /location [^ ]+ ([^ ]*,)?noexec[, ]' /proc/mounts

Cela pourrait être plus clair dans awk:

awk -v location="/location" '$2 == location {exit(!($4 ~ /(^|,)noexec($|,)/))} END {exit(2)}'
Gilles 'SO- arrête d'être méchant'
la source