Участник:Petr-akhlamov/Pam mount.conf Manual RU: различия между версиями
(FiX category) |
|||
(не показаны 24 промежуточные версии 2 участников) | |||
Строка 11: | Строка 11: | ||
Начиная с версии pam_mount 0.18, конфигурационный файл записывается в формате XML, что позволяет упростить кодовую базу pam_mount и в то же время дает конечному пользователю свободу форматирования. Специальные символы <, > и &, используемые в самом XML, должны быть закодированы как <, > и &, соответственно; | Начиная с версии pam_mount 0.18, конфигурационный файл записывается в формате XML, что позволяет упростить кодовую базу pam_mount и в то же время дает конечному пользователю свободу форматирования. Специальные символы <, > и &, используемые в самом XML, должны быть закодированы как <, > и &, соответственно; | ||
Кроме того, в области "" символ " должен кодироваться как ", но эти три | Кроме того, в области "..." символ " должен кодироваться как &quot; , но эти три-четыре символа все равно вряд ли будут часто встречаться. | ||
Не используйте комментарии внутри элементов, принимающих дословный текст, например <fusermount></fusermount>. Это не обрабатывается синтаксическим анализатором XML-дерева pam_mount. | Не используйте комментарии внутри элементов, принимающих дословный текст, например <fusermount></fusermount>. Это не обрабатывается синтаксическим анализатором XML-дерева pam_mount. | ||
Строка 24: | Строка 24: | ||
----- | ----- | ||
user="username" | user="username" | ||
Ограничить доступ к тому для | Ограничить доступ к тому для пользователя с указанным именем | ||
----- | ----- | ||
uid="number" или uid="number-number" | uid="number" или uid="number-number" | ||
Ограничение доступа к тому для | Ограничение доступа к тому для пользователя (пользователей), идентифицированного по {{path|UID}} или диапазону {{path|UID}}. | ||
----- | ----- | ||
pgrp="groupname" | pgrp="groupname" | ||
Строка 44: | Строка 44: | ||
fstype="type" | fstype="type" | ||
*Тип файловой системы, который может быть любым, понятным ядру, пользовательскому пространству и {{path|pam_mount}}. | *Тип файловой системы, который может быть любым, понятным ядру, пользовательскому пространству и {{path|pam_mount}}. | ||
*Если в {{path|fstype}} указан специальный тип {{path|pam_mount}}, то {{path|pam_mount}} будет работать с ним. В противном случае {{path|fstype}} передается в {{path|mount(8)}}, который, в свою очередь, ищет в пользовательском пространстве помощника {{path|/sbin/mount.fstype}} и запускает его, если он существует, а в | *Если в {{path|fstype}} указан специальный тип {{path|pam_mount}}, то {{path|pam_mount}} будет работать с ним. В противном случае {{path|fstype}} передается в {{path|mount(8)}}, который, в свою очередь, ищет в пользовательском пространстве помощника {{path|/sbin/mount.fstype}} и запускает его, если он существует, а в противном случае {{path|mount(8)}} вызовет {{path|mount(2)}} для непосредственного монтирования ядром. | ||
*{{path|mount(8)}} знает об автоматическом {{path|fstype}}, что может быть полезно в некоторых случаях. Если не указывать атрибут {{path|fstype}}, то подразумевается {{path|<nowiki>fstype="auto"</nowiki>}}. Обратите внимание, что монтирование с использованием {{path|auto}} может быть неудачным, если модуль ядра файловой системы еще не загружен, поскольку {{path|mount(8)}} будет проверять {{path|/proc/partitions}}. | *{{path|mount(8)}} знает об автоматическом {{path|fstype}}, что может быть полезно в некоторых случаях. Если не указывать атрибут {{path|fstype}}, то подразумевается {{path|<nowiki>fstype="auto"</nowiki>}}. Обратите внимание, что монтирование с использованием {{path|auto}} может быть неудачным, если модуль ядра файловой системы еще не загружен, поскольку {{path|mount(8)}} будет проверять {{path|/proc/partitions}}. | ||
Типы {{path|fstype}} {{path|cifs}}, {{path|smbfs}}, {{path|ncpfs}}, {{path|fuse}}, {{path|nfs}} и {{path|nfs}} переопределяются {{path|pam_mount}}, и мы запускаем соответствующие вспомогательные программы напрямую, а не вызываем {{path|mount(8)}} с базовым набором аргументов по умолчанию, который часто недостаточен для сетевых файловых систем. Подробнее см. раздел "Примеры" этой {{path|manpage}} ниже. | Типы {{path|fstype}} {{path|cifs}}, {{path|smbfs}}, {{path|ncpfs}}, {{path|fuse}}, {{path|nfs}} и {{path|nfs}} переопределяются {{path|pam_mount}}, и мы запускаем соответствующие вспомогательные программы напрямую, а не вызываем {{path|mount(8)}} с базовым набором аргументов по умолчанию, который часто недостаточен для сетевых файловых систем. Подробнее см. раздел "[[#Примеры|Примеры]]" этой {{path|manpage}} ниже. | ||
----- | ----- | ||
noroot="1" | noroot="1" | ||
Строка 128: | Строка 128: | ||
Значение по умолчанию для переменной окружения {{path|PATH}} не совпадает в разных дистрибутивах, поэтому {{path|pam_mount}} предоставляет собственный набор приемлемых значений по умолчанию, которые вы можете изменять по своему усмотрению. | Значение по умолчанию для переменной окружения {{path|PATH}} не совпадает в разных дистрибутивах, поэтому {{path|pam_mount}} предоставляет собственный набор приемлемых значений по умолчанию, которые вы можете изменять по своему усмотрению. | ||
==== | ====Параметры связанные с томами==== | ||
<mkmountpoint enable="1" remove="true" /> | <mkmountpoint enable="1" remove="true" /> | ||
Данный параметр управляет автоматическим созданием и удалением точек монтирования. | Данный параметр управляет автоматическим созданием и удалением точек монтирования. | ||
Строка 134: | Строка 134: | ||
Если в момент монтирования тома точка монтирования не существует, то с помощью параметра {{path|enable}} можно дать команду для pam_mount для ее создания. | Если в момент монтирования тома точка монтирования не существует, то с помощью параметра {{path|enable}} можно дать команду для pam_mount для ее создания. | ||
Обычно созданные таким образом каталоги сохраняются после выхода из системы, но для их удаления можно установить у параметра {{path|remove}} значение {{path|true}}. Но только в том случае, если до этого данная точка была автоматически создана pam_mount в | Обычно созданные таким образом каталоги сохраняются после выхода из системы, но для их удаления можно установить у параметра {{path|remove}} значение {{path|true}}. Но только в том случае, если до этого данная точка была автоматически создана pam_mount в том же сеансе. | ||
==== Вспомогательные программы ==== | |||
Некоторым программам монтирования для правильной работы необходимы специальные параметры по умолчанию. Рекомендуется указывать {{path|<nowiki>uid=</nowiki>}} для {{path|CIFS}}, поскольку она монтируется от имени {{path|root}} и в противном случае будет показывать файлы, принадлежащие {{path|root}}, а не пользователю, входящему в систему. | |||
----- | |||
<fd0ssh>program...</fd0ssh>. | |||
'''fd0ssh''' - это хак для OpenSSH, который, по сути, заставляет его считывать пароли из {{path|stdin}}, хотя обычно OpenSSH этого не делает. | |||
----- | |||
<fsck>fsck -p %(FSCKTARGET)</fsck>. | |||
Если задана программа fsck, то локальные тома будут проверяться перед монтированием. | |||
----- | |||
<ofl>ofl -k%(SIGNAL) %(MNTPT)</ofl>. | |||
Open File Lister используется для идентификации процессов, которые используют файлы в заданном подкаталоге, и, по желанию, посылает сигнал этим процессам. | |||
----- | |||
<pmvarrun>pmvarrun ...</pmvarrun>. | |||
'''pmvarrun(8)''' - это отдельная программа для управления подсчетом ссылок, которые отслеживают пользовательские сеансы. | |||
==== Программы монтирования ==== | |||
Команды для монтирования/размонтирования томов. Они могут принимать различные параметры. Вы можете указывать как абсолютные пути, так и относительные. В этом случае будет выполняться поиск в {{path|$PATH}}. Поскольку программы для входа в систему по умолчанию имеют разные {{path|PATH}}, {{path|pam_mount}} имеет свое собственное определение пути. | |||
----- | |||
<lclmount>mount -p0 -t %(FSTYPE) ...</lclmount> | |||
Штатная программа монтирования. | |||
----- | |||
<umount>umount %(MNTPT)</umount> | |||
Если для заданного типа файловой системы не предусмотрена специальная программа {{path|umount}}, то будет использоваться обычная программа {{path|umount}}. | |||
Linux поддерживает "ленивое" размонтирование с помощью команды {{path|/sbin/umount -l}}. Это может быть опасно для зашифрованных томов, поскольку базовое устройство не будет размонтировано. | |||
Устройства со шлейфом также подвержены этому (не размонтируются, когда файлы еще открыты). Кроме того, размонтирование SMB-томов должно вызываться на {{path|%(MNTPT)}}, а не на {{path|%(VOLUME)}}. | |||
----- | |||
Команды для различных программ монтирования. Не все из них имеют специальный помощник {{path|umount}}, поскольку некоторым он не нужен. | |||
<cifsmount>mount.cifs ...</cifsmount> | |||
<cryptmount>mount.crypt ...</cryptmount> | |||
<cryptumount>umount.crypt %(MNTPT)</cryptumount> | |||
Помощники монтирования томов dm-crypt и LUKS. | |||
<fusemount>mount.fuse ...</fusemount> | |||
<fuseumount>fuserumount ...</fuseumount> | |||
<ncpmount>ncpmount ...</ncpmount> | |||
<ncpumount>ncpumount ...</ncpumount> | |||
<nfsmount>mount %(SERVER):%(VOLUME) ...</nfsmount> | |||
<smbmount>smbmount ...</smbmount> | |||
<smbumount>smbumount ...</smbumount> | |||
==== Сообщения ==== | |||
<msg-authpw>pam_mount password:</msg-authpw> | |||
Когда pam_mount: | |||
*не может получить пароль через PAM | |||
*сконфигурирован так, чтобы не делать этого в первую очередь | |||
*настроен на интерактивный запрос пароля в качестве замены | |||
будет выведено следующее сообщение. | |||
----- | |||
<msg-sessionpw>reenter...:</msg-sessionpw>. | |||
В случае если в блоке {{path|PAM}} '{{path|session}}' отсутствует пароль (например, при {{path|su}} от {{path|root}} к пользователю), он запросит его снова. Этот запрос также может быть настроен. | |||
===Расширенное управление пользователями=== | |||
Иногда простых атрибутов управления пользователем для элемента {{path|<volume>}} бывает недостаточно, когда требуется построить более сложные выражения для конкретного пользователя, к которому относится тот или иной том. Вместо атрибутов, расширенное управление пользователем позволяет задать дополнительные элементы внутри "скобок" {{path|<volume>}}, например так: | |||
<volume path="/dev/shm" mountpoint="~"> <and> <sgrp>students</sgrp> <not> <sgrp>profs</sgrp> </not> </and> </volume> | |||
Которые алгеброй логики транслируется как: <pre>(students && !profs)</pre> | |||
====Логические операторы==== | |||
<and><elements><nowiki>*</nowiki></and> | |||
{{Note|В логическом операторе "И" выражение вида a && b будет равно true только тогда, когда и а и b равны true.}} | |||
Все элементы в данной конструкции связаны логическим умножением (И, &&) и логически связаны между собой. Может использоваться любое количество элементов. | |||
----- | |||
<or><elements><nowiki>*</nowiki></or> | |||
{{Note|В логическом операторе "ИЛИ" выражение вида a <nowiki>||</nowiki> b будет равно true, когда или a, или b (или оба) равны true.}} | |||
Все элементы в данной конструкции логически объединены логическим сложением (ИЛИ, ||). Может использоваться любое количество элементов. | |||
----- | |||
<xor><elements>{2}</xor> | |||
{{Note|В логическом операторе "исключающее ИЛИ" выражение вида a <nowiki>^</nowiki> b будет равно true, только когда или a, или b равен true.}} | |||
В данной конструкции используются только два элемента. | |||
----- | |||
<not><element></not> | |||
{{Note|В логическом операторе "НЕ" выражение вида !a будет равно true когда a и b имеют разные значения}} | |||
Единственный элемент внутри <not> логически отрицается. | |||
====Выбор пользователей==== | |||
<user>username</user> | |||
Сопоставление тома с заданным именем пользователя. | |||
----- | |||
<uid>number</uid> или <uid>number-number</uid> | |||
Сопоставление UID пользователя, входящего в систему, с UID или диапазоном UID. | |||
----- | |||
<gid>number</gid> или <gid>number-number</gid> | |||
Сопоставление основной группы пользователя, входящего в систему, с GID или диапазоном GID. | |||
----- | |||
<pgrp>groupname</pgrp> | |||
Выполнять проверку, имеет ли пользователь, входящий в систему, указанное имя группы в качестве основной. | |||
----- | |||
<sgrp>groupname</sgrp> | |||
Выполнять проверку, имеет ли пользователь, входящий в систему, указанное имя группы, в качестве первичной или вторичной. | |||
====Атрибуты==== | |||
icase="yes" или icase="no" | |||
Атрибут {{path|icase}} может быть использован в тегах {{path|<user>}}, {{path|<pgrp>}} и {{path|<sgrp>}}, чтобы включить (или не включать) сопоставление без учета регистра. По умолчанию он принимает значение "no". | |||
regex="yes" (или no) | |||
Атрибут regex может быть использован в тегах {{path|<user>}}, {{path|<pgrp>}} и {{path|<sgrp>}} для интерпретации текстового содержимого тега как шаблона регулярного выражения, совместимого с Perl. Данный атрибут может использоваться совместно с атрибутом "icase" (см. выше). | |||
Например: {{path|<nowiki><user regex="yes">joe</user></nowiki>}} соответствует любому пользователю, у которого в имени пользователя встречается последовательность букв "joe". Поэтому используйте функцию regex с осторожностью и добавляйте якоря ^ и $ для ограничения неожиданностей безопасности. | |||
Например: {{path|<nowiki><user regex="yes">^.*joe.*$</user></nowiki>}}, если вы действительно хотите найти последовательность в любой позиции. | |||
==Примеры== | |||
Помните, что {{path|~}} может использоваться в атрибуте точки монтирования для обозначения домашнего каталога, который можно получить с помощью функции {{path|getpwent}}. | |||
===sshfs и ccgfs=== | |||
Если не указывать никакого пути после двоеточия (:), то используется путь, куда вас направит {{path|ssh}} по-умолчнию, обычно это домашний каталог. | |||
<volume fstype="fuse" path="sshfs#%(USER)@fileserver:" mountpoint="~" /> | |||
<volume fstype="fuse" path="ccgfs-ssh-pull#%(USER)@host:directory" mountpoint="~" /> | |||
===encfs 1.4.x и выше=== | |||
<volume fstype="fuse" path="encfs#/crypto/%(USER)" mountpoint="~" options="nonempty" /> | |||
(encfs 1.3 больше не поддерживается). | |||
===Монтирование NFS=== | |||
<volume fstype="nfs" server="fileserver" path="/home/%(USER)" mountpoint="~" /> | |||
===Монтирование CIFS/SMB=== | |||
<volume user="user" fstype="smbfs" server="krueger" path="public" mountpoint="/home/user/krueger" /> | |||
===Монтирование NCP=== | |||
<volume user="user" fstype="ncpfs" server="krueger" path="public" mountpoint="/home/user/krueger" options="username=user.context" /> | |||
===Связанное монтирование (Bind Mounts)=== | |||
Это может быть полезно в сочетании с {{path|pam_chroot}}: | |||
<volume path="/bin" mountpoint="~/bin" options="bind" /> | |||
===Монтирование tmpfs=== | |||
Универсальное монтирование tmpfs с ограниченным размером: | |||
<volume user="test" fstype="tmpfs" mountpoint="/home/test" options="size=10M,uid=%(USER),mode=0700" /> | |||
===Тома dm-crypt=== | |||
Для криптографического монтирования требуется ядро с включенными CONFIG_BLK_DEV_DM и CONFIG_DM_CRYPT, а также всеми шифрами, которые будут использоваться, например, CONFIG_CRYPTO_AES, CONFIG_CRYPTO_BLOWFISH, CONFIG_CRYPTO_TWOFISH. | |||
<volume path="/home/%(USER).img" mountpoint="~" cipher="aes-cbc-essiv:sha256" fskeycipher="aes-256-cbc" fskeyhash="sha1" fskeypath="/home/%(USER).key" /> | |||
===Тома LUKS=== | |||
<volume path="/home/%(USER).img" mountpoint="~" cipher="aes-cbc-essiv:sha256" /> | |||
===Зашифрованный домашний каталог OpenBSD=== | |||
Пример зашифрованного домашнего каталога OpenBSD: | |||
<volume path="/home/user.img" mountpoint="/home/user" options="svnd0" /> | |||
[[Категория:PAM]] | |||
[[Категория:pam_mount]] | |||
{{Category navigation|title=Перевод man-ов|category=Перевод man-ов|sortkey={{SUBPAGENAME}}}} |
Текущая версия от 13:18, 5 августа 2024
Имя
pam_mount.conf - Описание конфигурационного файла pam_mount
Обзор
Конфигурационный файл pam_mount определяет:
- мягкие настройки по умолчанию для команд, которые будет выполнять pam_mount,
- сообщения, которые он будет показывать,
- тома, которые нужно монтировать при входе в систему.
Начиная с версии pam_mount 0.18, конфигурационный файл записывается в формате XML, что позволяет упростить кодовую базу pam_mount и в то же время дает конечному пользователю свободу форматирования. Специальные символы <, > и &, используемые в самом XML, должны быть закодированы как <, > и &, соответственно;
Кроме того, в области "..." символ " должен кодироваться как " , но эти три-четыре символа все равно вряд ли будут часто встречаться.
Не используйте комментарии внутри элементов, принимающих дословный текст, например <fusermount></fusermount>. Это не обрабатывается синтаксическим анализатором XML-дерева pam_mount.
Определения томов
Тома определяются с помощью элемента <volume>, который в основном принимает параметры в виде атрибутов, например:
<volume user="joe" fstype="nfs" server="fsbox" path="/home/%(USER)" mountpoint="/bigdisk/%(USER)" />
И определяет, что и для кого монтировать. Существует множество настроек, которые описаны в данном разделе.
Простое управление пользователями
Следующие атрибуты управляют тем, будет ли смонтирован том после того, как пользователь вошел в систему. По умолчанию монтирование томов применяется ко всем пользователям, а указание атрибутов ограничивает его только заданными условиями, т.е. происходит их логическое объединение (лог. операция И). Существует более мощный и многословный механизм задания сложных условий, описанный ниже в разделе "Расширенное управление пользователями".
user="username"
Ограничить доступ к тому для пользователя с указанным именем
uid="number" или uid="number-number"
Ограничение доступа к тому для пользователя (пользователей), идентифицированного по UID или диапазону UID.
pgrp="groupname"
Ограничение доступа к тому для пользователей, для которых группа, указанная в значении, является основной группой.
gid="number" или gid="number-number"
Ограничение доступа к тому для пользователей, для которых группа(ы), указанная в GID или диапазоне GID, является основной группой.
sgrp="groupname"
Ограничение доступа к тому для пользователей, которые являются членами группы, указанной в имени (либо как первичная, либо как вторичная группа).
Конфигурация тома
С помощью следующих атрибутов выбираются том-источник, место назначения, опции и т.д.
fstype="type"
- Тип файловой системы, который может быть любым, понятным ядру, пользовательскому пространству и pam_mount.
- Если в fstype указан специальный тип pam_mount, то pam_mount будет работать с ним. В противном случае fstype передается в mount(8), который, в свою очередь, ищет в пользовательском пространстве помощника /sbin/mount.fstype и запускает его, если он существует, а в противном случае mount(8) вызовет mount(2) для непосредственного монтирования ядром.
- mount(8) знает об автоматическом fstype, что может быть полезно в некоторых случаях. Если не указывать атрибут fstype, то подразумевается fstype="auto". Обратите внимание, что монтирование с использованием auto может быть неудачным, если модуль ядра файловой системы еще не загружен, поскольку mount(8) будет проверять /proc/partitions.
Типы fstype cifs, smbfs, ncpfs, fuse, nfs и nfs переопределяются pam_mount, и мы запускаем соответствующие вспомогательные программы напрямую, а не вызываем mount(8) с базовым набором аргументов по умолчанию, который часто недостаточен для сетевых файловых систем. Подробнее см. раздел "Примеры" этой manpage ниже.
noroot="1"
Вызов программы mount без привилегий root. По умолчанию для fuse fstype установлено значение yes, поскольку по умолчанию, чтобы получить доступ к файлам, тома FUSE должны монтироваться от имени пользователя, вошедшего в систему.
server="name"
Определяет сервер, к которому следует подключаться в случае указания типов файловых систем - cifs, smbfs, ncpfs и nfs. Для всех остальных типов fs этот атрибут игнорируется. Вместо этого можно указать сервер в атрибуте path, но при этом необходимо придерживаться специального синтаксиса, требуемого конкретным типом fs. (Например, в CIFS используется "//server/path", а в NFS - "server:path" и т.д.).
path="path"
Этот обязательный атрибут задает расположение тома относительно сервера (если он указан).
mountpoint="directory"
Здесь указывается каталог назначения, в который монтируется том. "~" указывает на домашний каталог пользователя, который присутствует в базе данных passwd, в соответствии с семантикой sh. "~name" не поддерживается. Если этот атрибут опущен, то местоположение считывается из файла /etc/fstab, который также требует, чтобы path был устройством или исходным каталогом записи fstab.
options="..."
Здесь указываются опции монтирования. Если опция опущена и используется /etc/fstab (см. "mountpoint"), то опции также будут взяты из fstab.
ssh="0" или ssh="1"
Опция ssh включает (zerossh, см. pmt-fd0ssh(1)) для данного тома передачу пароля к ssh через механизм, специфичный для ssh. Включите эту опцию для любого монтирования с использованием исполняемых файлов SSH, например, ccgfs или sshfs. Не включайте ее ни для чего другого, иначе вход в систему, скорее всего, завершится.
cipher="cipher"
Устанавливает название шифра для тома. Используется с параметром fstype=crypt.
fskeycipher="ciphertype"
Имя шифра OpenSSL для ключа fskey. Используется с шифром crypt fstype (dm-crypt и LUKS). Для непосредственной передачи содержимого файла в cryptsetup без расшифровки OpenSSL может быть использовано специальное ключевое слово "none".
fskeyhash="hash"
Имя хэша OpenSSL для ключа fskey.
fskeypath="path"
Путь к ключу файловой системы.
Переменные
В атрибутах и командах (см. следующий раздел) могут использоваться специальные заполнители или переменные, обозначаемые %(name). Они подставляются во время вызова команды.
%(USER)
Расширяется до имени пользователя, входящего в систему.
%(DOMAIN_NAME), %(DOMAIN_USER)
Winbind использует специальные UNIX-имена пользователей в виде "domain\username", а %(DOMAIN_NAME) и %(DOMAIN_USER) обеспечивают их разделение на части. Это удобно, когда имя ресурса на MSAD-сервере совпадает с именем пользователя, например, <volume fstype="cifs" server="fsbox" path="%(DOMAIN_USER)"/>.
%(USERUID), %(USERGID)
Числовые UID и GID основной группы пользователя, вошедшего в систему. Получаются с помощью функции getpw*(), а не getuid(). Их удобно использовать в сочетании с опциями монтирования uid= или gid=, например, <volume options="uid=%(USERUID)"/>. Обратите внимание, что для монтирования smbfs или cifs не нужно указывать uid=%(USERUID), так как это уже автоматически выполняется программой pam_mount.
%(GROUP)
Имя группы для %(USERGID).
Все остальные переменные, которые вы можете найти в исходном коде, являются внутренними для pam_mount и, скорее всего, не будут использованы в процессе монтирования.
Параметры pam_mount
Кроме томов, в pam_mount.conf.xml допускаются и другие элементы, управляющие поведением самого pam_mount.
Общие настраиваемые параметры
<debug enable="1" />
Включает вывод подробной информации при входе в систему на stderr и syslog. Некоторые программы не справляются с выводом на stderr, (см. doc/bugs.txt).
- 0 отключает отладку
- 1 включает трассировку в pam_mount
- 2 дополнительно включает трассировку в mount.crypt
По умолчанию установлено значение 0. Поскольку файл конфигурации обрабатывается линейно, директива <debug> вступает в силу, как только ее обработают - поэтому рекомендуется помещать ее в начало файла, перед любыми значениями <volume>.
<logout wait="microseconds" hup="yes/no" term="yes/no" kill="yes/no" />.
Существуют программы, которые не завершаются при закрытии сеанса. (Это относится к "окончательному" закрытию, т.е. когда завершается последний сеанс пользователя.) Примерами могут быть процессы, все еще работающие в фоновом режиме; или сломанный менеджер сеансов X, который не завершил работу своих дочерних программ, или других программ X, которые не отреагировали на уведомление о завершении работы сервера X. pam_mount может быть настроен на завершение таких процессов и, по желанию, на ожидание перед отправкой команд.
<luserconf name=".pam_mount.conf.xml" />
Отдельные пользователи могут указывать дополнительные тома в файле по заданному имени относительно своего домашнего каталога. Наличие <luserconf> в главном конфигурационном файле обеспечивает эту возможность. Если эта функция включена, то пользователи могут монтировать и размонтировать любые указанные ими тома, на которые они имеют права владения (в случае локального монтирования). Процесс монтирования выполняется от имени суперпользователя. Это может иметь последствия для безопасности, поэтому по умолчанию эта возможность отключена. Конфигурационные файлы локального пользователя анализируются после монтирования всех томов из файла глобальной конфигурации, поэтому можно сначала монтировать домашние каталоги с помощью глобальной конфигурации, а затем монтировать последующие тома из конфигурационных файлов локального пользователя.
<mntoptions allow="options,..." />
Элементы <mntoptions> определяют, какие опции могут быть указаны в <volumes> в конфигурационных файлах для каждого пользователя (см. <luserconf>). К главному файлу это не относится. Указание <mntoptions> запрещено и игнорируется в конфигурациях для каждого пользователя. Список разрешений по умолчанию состоит из "nosuid,nodev", и это значение очищается, когда парсер конфигурации видит первый атрибут allow="...". При этом все последующие allow="..." являются суммирующимися.
<mntoptions deny="options,..." />
Любые опции, перечисленные в deny, не могут указываться в списке параметров монтирования для любого пользователя. По умолчанию список опций deny пуст.
<mntoptions require="options,..." />
Любые опции, перечисленные в require, должны присутствовать в списке параметров монтирования для каждого пользователя. Список require по умолчанию состоит из "nosuid,nodev", и, как и allow="", очищается при первой встрече с парсером, а в остальном является добавочным.
<path>directories...</path>
Значение по умолчанию для переменной окружения PATH не совпадает в разных дистрибутивах, поэтому pam_mount предоставляет собственный набор приемлемых значений по умолчанию, которые вы можете изменять по своему усмотрению.
Параметры связанные с томами
<mkmountpoint enable="1" remove="true" />
Данный параметр управляет автоматическим созданием и удалением точек монтирования.
Если в момент монтирования тома точка монтирования не существует, то с помощью параметра enable можно дать команду для pam_mount для ее создания.
Обычно созданные таким образом каталоги сохраняются после выхода из системы, но для их удаления можно установить у параметра remove значение true. Но только в том случае, если до этого данная точка была автоматически создана pam_mount в том же сеансе.
Вспомогательные программы
Некоторым программам монтирования для правильной работы необходимы специальные параметры по умолчанию. Рекомендуется указывать uid= для CIFS, поскольку она монтируется от имени root и в противном случае будет показывать файлы, принадлежащие root, а не пользователю, входящему в систему.
<fd0ssh>program...</fd0ssh>.
fd0ssh - это хак для OpenSSH, который, по сути, заставляет его считывать пароли из stdin, хотя обычно OpenSSH этого не делает.
<fsck>fsck -p %(FSCKTARGET)</fsck>.
Если задана программа fsck, то локальные тома будут проверяться перед монтированием.
<ofl>ofl -k%(SIGNAL) %(MNTPT)</ofl>.
Open File Lister используется для идентификации процессов, которые используют файлы в заданном подкаталоге, и, по желанию, посылает сигнал этим процессам.
<pmvarrun>pmvarrun ...</pmvarrun>.
pmvarrun(8) - это отдельная программа для управления подсчетом ссылок, которые отслеживают пользовательские сеансы.
Программы монтирования
Команды для монтирования/размонтирования томов. Они могут принимать различные параметры. Вы можете указывать как абсолютные пути, так и относительные. В этом случае будет выполняться поиск в $PATH. Поскольку программы для входа в систему по умолчанию имеют разные PATH, pam_mount имеет свое собственное определение пути.
<lclmount>mount -p0 -t %(FSTYPE) ...</lclmount>
Штатная программа монтирования.
<umount>umount %(MNTPT)</umount>
Если для заданного типа файловой системы не предусмотрена специальная программа umount, то будет использоваться обычная программа umount.
Linux поддерживает "ленивое" размонтирование с помощью команды /sbin/umount -l. Это может быть опасно для зашифрованных томов, поскольку базовое устройство не будет размонтировано.
Устройства со шлейфом также подвержены этому (не размонтируются, когда файлы еще открыты). Кроме того, размонтирование SMB-томов должно вызываться на %(MNTPT), а не на %(VOLUME).
Команды для различных программ монтирования. Не все из них имеют специальный помощник umount, поскольку некоторым он не нужен.
<cifsmount>mount.cifs ...</cifsmount>
<cryptmount>mount.crypt ...</cryptmount>
<cryptumount>umount.crypt %(MNTPT)</cryptumount> Помощники монтирования томов dm-crypt и LUKS.
<fusemount>mount.fuse ...</fusemount>
<fuseumount>fuserumount ...</fuseumount>
<ncpmount>ncpmount ...</ncpmount>
<ncpumount>ncpumount ...</ncpumount>
<nfsmount>mount %(SERVER):%(VOLUME) ...</nfsmount>
<smbmount>smbmount ...</smbmount>
<smbumount>smbumount ...</smbumount>
Сообщения
<msg-authpw>pam_mount password:</msg-authpw>
Когда pam_mount:
- не может получить пароль через PAM
- сконфигурирован так, чтобы не делать этого в первую очередь
- настроен на интерактивный запрос пароля в качестве замены
будет выведено следующее сообщение.
<msg-sessionpw>reenter...:</msg-sessionpw>.
В случае если в блоке PAM 'session' отсутствует пароль (например, при su от root к пользователю), он запросит его снова. Этот запрос также может быть настроен.
Расширенное управление пользователями
Иногда простых атрибутов управления пользователем для элемента <volume> бывает недостаточно, когда требуется построить более сложные выражения для конкретного пользователя, к которому относится тот или иной том. Вместо атрибутов, расширенное управление пользователем позволяет задать дополнительные элементы внутри "скобок" <volume>, например так:
<volume path="/dev/shm" mountpoint="~"> <and> <sgrp>students</sgrp> <not> <sgrp>profs</sgrp> </not> </and> </volume>
Которые алгеброй логики транслируется как:
(students && !profs)
Логические операторы
<and><elements>*</and>
Все элементы в данной конструкции связаны логическим умножением (И, &&) и логически связаны между собой. Может использоваться любое количество элементов.
<or><elements>*</or>
Все элементы в данной конструкции логически объединены логическим сложением (ИЛИ, ||). Может использоваться любое количество элементов.
<xor><elements>{2}</xor>
В данной конструкции используются только два элемента.
<not><element></not>
Единственный элемент внутри <not> логически отрицается.
Выбор пользователей
<user>username</user>
Сопоставление тома с заданным именем пользователя.
<uid>number</uid> или <uid>number-number</uid>
Сопоставление UID пользователя, входящего в систему, с UID или диапазоном UID.
<gid>number</gid> или <gid>number-number</gid>
Сопоставление основной группы пользователя, входящего в систему, с GID или диапазоном GID.
<pgrp>groupname</pgrp>
Выполнять проверку, имеет ли пользователь, входящий в систему, указанное имя группы в качестве основной.
<sgrp>groupname</sgrp>
Выполнять проверку, имеет ли пользователь, входящий в систему, указанное имя группы, в качестве первичной или вторичной.
Атрибуты
icase="yes" или icase="no"
Атрибут icase может быть использован в тегах <user>, <pgrp> и <sgrp>, чтобы включить (или не включать) сопоставление без учета регистра. По умолчанию он принимает значение "no".
regex="yes" (или no)
Атрибут regex может быть использован в тегах <user>, <pgrp> и <sgrp> для интерпретации текстового содержимого тега как шаблона регулярного выражения, совместимого с Perl. Данный атрибут может использоваться совместно с атрибутом "icase" (см. выше).
Например: <user regex="yes">joe</user> соответствует любому пользователю, у которого в имени пользователя встречается последовательность букв "joe". Поэтому используйте функцию regex с осторожностью и добавляйте якоря ^ и $ для ограничения неожиданностей безопасности.
Например: <user regex="yes">^.*joe.*$</user>, если вы действительно хотите найти последовательность в любой позиции.
Примеры
Помните, что ~ может использоваться в атрибуте точки монтирования для обозначения домашнего каталога, который можно получить с помощью функции getpwent.
sshfs и ccgfs
Если не указывать никакого пути после двоеточия (:), то используется путь, куда вас направит ssh по-умолчнию, обычно это домашний каталог.
<volume fstype="fuse" path="sshfs#%(USER)@fileserver:" mountpoint="~" />
<volume fstype="fuse" path="ccgfs-ssh-pull#%(USER)@host:directory" mountpoint="~" />
encfs 1.4.x и выше
<volume fstype="fuse" path="encfs#/crypto/%(USER)" mountpoint="~" options="nonempty" />
(encfs 1.3 больше не поддерживается).
Монтирование NFS
<volume fstype="nfs" server="fileserver" path="/home/%(USER)" mountpoint="~" />
Монтирование CIFS/SMB
<volume user="user" fstype="smbfs" server="krueger" path="public" mountpoint="/home/user/krueger" />
Монтирование NCP
<volume user="user" fstype="ncpfs" server="krueger" path="public" mountpoint="/home/user/krueger" options="username=user.context" />
Связанное монтирование (Bind Mounts)
Это может быть полезно в сочетании с pam_chroot:
<volume path="/bin" mountpoint="~/bin" options="bind" />
Монтирование tmpfs
Универсальное монтирование tmpfs с ограниченным размером:
<volume user="test" fstype="tmpfs" mountpoint="/home/test" options="size=10M,uid=%(USER),mode=0700" />
Тома dm-crypt
Для криптографического монтирования требуется ядро с включенными CONFIG_BLK_DEV_DM и CONFIG_DM_CRYPT, а также всеми шифрами, которые будут использоваться, например, CONFIG_CRYPTO_AES, CONFIG_CRYPTO_BLOWFISH, CONFIG_CRYPTO_TWOFISH.
<volume path="/home/%(USER).img" mountpoint="~" cipher="aes-cbc-essiv:sha256" fskeycipher="aes-256-cbc" fskeyhash="sha1" fskeypath="/home/%(USER).key" />
Тома LUKS
<volume path="/home/%(USER).img" mountpoint="~" cipher="aes-cbc-essiv:sha256" />
Зашифрованный домашний каталог OpenBSD
Пример зашифрованного домашнего каталога OpenBSD:
<volume path="/home/user.img" mountpoint="/home/user" options="svnd0" />