8.2.1. Использование опций монтирования
Команда
mount
поддерживает опции, которые контролируют то, какие операции ядро будет позволять или не позволять применять к файловой системе. Их приличное количество. Лишь две из них полезны на самом деле в командной строке:
ro
Монтирует файловую систему только для чтения. Это необходимо для устройств только для чтения, таких, как CD-ROM и DVD.
loop
Использует кольцевое устройство для интерпретации обычного файла в качестве файловой системы. Пример этого мы показали ранее (см. раздел 8.1.3 «Монтирование файловых систем:
mount
»).
Опции передаются с опцией командной строки -о и могут группироваться, отделяясь запятыми. Например, вот использованная ранее командная строка:
mount -t iso9660 -о ro,loop shrike-i386-discl.iso /mnt/cdrom
Оставшиеся опции предназначены для использования в
/etc/fstab
(хотя они могут использоваться также и в командной строке). Следующий список представляет те опции, которые, как мы полагаем, наиболее важны в повседневном использовании.
auto
,
noauto
Файловые системы, помеченные
auto
, должны монтироваться при загрузке системы через '
mount -а
' (монтировать все файловые системы). Файловые системы
noauto
должны монтироваться вручную. Они по-прежнему находятся в
/etc/fstab
вместе с другими файловыми системами. (См., например, элемент
/win
для показанного ранее файла
/etc/fstab
).
defaults
Использует по умолчанию опции
rw
,
suid
,
dev
,
exec
,
auto
,
nouser
и
async
. (
async
является продвинутой опцией, повышающей производительность ввода/вывода).
dev
,
nodev
Позволяет (не позволяет) использовать в файловой системе файлы символьных или блочных устройств.
exec
,
noexec
Позволяет (не позволяет) запускать в файловой системе двоичные исполняемые файлы.
user
,
nouser
Позволяет (не позволяет) монтировать данную файловую систему любому пользователю. Это полезно для CD-ROM; даже если вы находитесь на рабочей станции с одним пользователем, удобно не переключаться на
root
просто для монтирования CD. Демонтировать файловую систему может лишь пользователь, который смонтировал ее.
user
предполагает наличие опций
noexec
,
nosuid
и
nodev
.
suid
,
nosuid
Поддерживает (не поддерживает) биты
setuid
и
setgid
исполняемых файлов в файловой системе.
rw
Монтирует файловую систему в режиме для чтения/записи.
Опции
nodev
,
noexec
и
nosuid
особенно ценны для безопасности на файловых системах гибких дисков и CD-ROM. Рассмотрите студенческую среду, в которой студентам разрешено монтировать собственные гибкие диски или CD. Тривиально смастерить для жесткого диска файловую систему с оболочкой setuid-root или с файлом устройства с разрешением записи для всех, которая позволила бы предприимчивому пользователю изменить права доступа к системным файлам.
У каждой файловой системы есть специфичные для нее опции. Важной опцией для
ext2
и
ext3
является
grpid
. Мы отложим обсуждение этой опции до раздела 11.5.1 «Группа по умолчанию для новых файлов и каталогов». Подробности для всех поддерживаемых файловых систем можно найти в справочной странице
mount(8).
В качестве конкретного примера вернемся к строчке для раздела Windows в нашей системе:
# device mount-point type options freq passno
/dev/hda1 /win vfat noauto,defaults,user,uid=2076,gid=10 0 0
Опция
noauto
предотвращает монтирование раздела Windows при загрузке. Опция
defaults
та же самая, что
rw
,
suid
,
dev
,
exec
,
async
. Опция
user
позволяет нам монтировать файловую систему, не будучи
root
. Опции
uid=
и
gid=
делает файлы в
/win
принадлежащими нам, так что нам не нужно иметь права
root
при работе с этим разделом.
8.2.2. Работа со смонтированными файловыми системами:
getmntent()
Любой из файлов
/etc/fstab
,
/etc/mtab
и
/proc/mounts
может быть прочитан программное использованием набора процедур
getmntent()
:
#include <stdio.h> /* GLIBC */
#include <mntent.h>
FILE *setmntent(const char *filename, const char *type);
struct mntent *getmntent(FILE *filep);
int addmntent(FILE *filep, const struct mntent *mnt);
int endmntent(FILE *filep);
char *hasmntopt(const struct mntent *mnt, const char *opt);
setmntent()
открывает файл, содержащий элементы точек монтирования. Аргумент
filename
является файлом, который должен быть открыт. Аргумент
type
похож на второй аргумент
fopen()
, указывая доступ для чтения, записи или чтения/записи. (Рассмотрите команду
mount
, которой приходится добавлять элемент к
/etc/mtab
для каждой файловой системы, которую она монтирует, и
umount
, которая должна удалять этот элемент.) Затем возвращаемое значение типа
FILE*
используется с оставшимися процедурами.