Позволяет (не позволяет) монтировать данную файловую систему любому пользователю. Это полезно для CD-ROM; даже если вы находитесь на рабочей станции с одним пользователем, удобно не переключаться на root
user предполагает наличие опций noexec, nosuid и nodev.suid
nosuidПоддерживает (не поддерживает) биты setuid
setgid исполняемых файлов в файловой системе.rw
Монтирует файловую систему в режиме для чтения/записи.
Опции nodev
noexec и nosuid особенно ценны для безопасности на файловых системах гибких дисков и CD-ROM. Рассмотрите студенческую среду, в которой студентам разрешено монтировать собственные гибкие диски или CD. Тривиально смастерить для жесткого диска файловую систему с оболочкой setuid-root или с файлом устройства с разрешением записи для всех, которая позволила бы предприимчивому пользователю изменить права доступа к системным файлам.У каждой файловой системы есть специфичные для нее опции. Важной опцией для ext2
ext3 является grpid. Мы отложим обсуждение этой опции до раздела 11.5.1 «Группа по умолчанию для новых файлов и каталогов». Подробности для всех поддерживаемых файловых систем можно найти в справочной странице В качестве конкретного примера вернемся к строчке для раздела Windows в нашей системе:
# device mount-point type options freq passno
/dev/hda1 /win vfat noauto,defaults,user,uid=2076,gid=10 0 0
Опция noauto
defaults та же самая, что rw, suid, dev, exec, async. Опция user позволяет нам монтировать файловую систему, не будучи root. Опции uid= и gid= делает файлы в /win принадлежащими нам, так что нам не нужно иметь права root при работе с этим разделом.8.2.2. Работа со смонтированными файловыми системами: getmntent()
Любой из файлов /etc/fstab
/etc/mtab и /proc/mounts может быть прочитан программное использованием набора процедур getmntent():#include
#include
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* используется с оставшимися процедурами.getmntent()
static struct mntent, которая заполнена соответствующими значениями. Это статическое хранилище переписывается при каждом вызове. Когда больше не осталось элементов, она возвращает NULL. (Это сходно с процедурами для чтения файлов паролей и групп; см раздел 6.3 «Имена пользователей и групп».)addmntent()
mount.endmntent()
fclose(); может потребоваться очистить другие внутренние структуры данных, связанные с переменной FILE*.hasmntopt()
struct mntent, переданную в качестве первого параметра, в поисках опции mount, совпадающей со вторым аргументом. Если опция найдена, она возвращает адрес совпадающей подстроки. В противном случае возвращается NULL.Поля в struct mntent
/etc/fstab. Структура выглядит следующим образом:struct mntent {
char *mnt_fsname; /* Устройство или сервер для файл. С-мы. */
char *mnt_dir; /* Каталог для монтирования. */
char *mnt_type; /* Тип файловой системы: ufs, nfs и т.д. */
char *mnt_opts; /* Отделяемые запятыми опции для fs. */