Bagaimana cara memeriksa apakah suatu partisi di-mount sebagai 'noexec'?

14

Saat ini, saya menggunakan grep '\s/location/\s.*noexec' /proc/mounts.
(Apakah itu cara yang benar untuk memeriksa ini?)

pengguna
sumber
1
Tidak apa-apa asalkan Anda hanya perlu bekerja pada versi Linux yang lebih baru.
jordanm
1
Periksa ini Q / A
dawud

Jawaban:

13

Anda harus menggunakan perintah mount (8), yang tersedia di luar kotak pada semua sistem Linux dan UNIX.

Jika Anda menjalankan mounttanpa argumen tambahan, itu akan menampilkan semua saat ini dipasang partisi pada sistem Anda, jenis file sistem dan setiap opsi mount, seperti noexec, rw, atau nosuid.

Misalnya:

% 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
sumber
5
Di Linux, saya sarankan menggunakan /proc/mountspreferensi mount. Jika /etc/mtabtidak diperbarui (misalnya karena /hanya baca), output dari mountmungkin tidak up-to-date. Juga, untuk beberapa opsi (bukan noexec), mountmemberi Anda output yang difilter yang dapat menyesatkan untuk beberapa kombinasi versi kernel dan mount (mis. Dengan opsi terkait atime).
Gilles 'SO- stop being evil'
Untuk menemukan partisi file atau direktori mount - df -P file / go / here | ekor -1 | cut -d '' -f 1
brainLoop
4

Dengan asumsi Anda menjalankan ini di Linux, ya, ini baik-baik saja. Akan sedikit lebih kuat untuk memeriksa bahwa noexecada di antara koma atau di awal atau akhir kolomnya.

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

Ini mungkin lebih jelas dalam awk:

awk -v location="/location" '$2 == location {exit(!($4 ~ /(^|,)noexec($|,)/))} END {exit(2)}'
Gilles 'SANGAT berhenti menjadi jahat'
sumber