Как проверить, смонтирован ли раздел как noexec?

14

В настоящее время пользуюсь grep '\s/location/\s.*noexec' /proc/mounts.
(Это правильный способ проверить это?)

пользователь
источник
1
Это нормально, если вам нужно работать только с новыми версиями Linux.
Иордания
1
Проверьте это Q / A
Дауд

Ответы:

13

Вы должны использовать команду mount (8), которая доступна из коробки во всех системах Linux и UNIX.

При запуске mountбез каких - либо дополнительных аргументов, он будет список всех в настоящее время установлены разделы на вашей системе, тип файловой системы и любые опции монтирования, например noexec, rwили nosuid.

Например:

% 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)
Žygis
источник
5
В Linux я рекомендую использовать /proc/mountsв предпочтении mount. Если /etc/mtabне обновлено (например, потому что /доступно только для чтения), вывод mountможет быть не актуальным. Кроме того, для некоторых опций (не noexec), mountвыдает отфильтрованный вывод, который может вводить в заблуждение для некоторых комбинаций версий ядра и монтирования (например, с опциями, связанными с atime).
Жиль "ТАК - перестань быть злым"
Чтобы найти раздел, в который монтируется файл или каталог - df -P file / идет / здесь | хвост -1 | cut -d '' -f 1
brainLoop
4

Предполагая, что вы работаете в Linux, да, это нормально. Было бы немного надежнее проверить, что noexecнаходится между запятыми или в начале или в конце его столбца.

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

Это может быть понятнее в awk:

awk -v location="/location" '$2 == location {exit(!($4 ~ /(^|,)noexec($|,)/))} END {exit(2)}'
Жиль "ТАК - перестань быть злым"
источник