Jump to content
From ArchWiki
Состояние перевода: На этой странице представлен перевод статьи pam_mount. Дата последней синхронизации: 24 июля 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Ссылки по теме

- dm-crypt/Mounting at login
- PAM (Русский)

pam_mount можно использовать для автоматического монтирования зашифрованного домашнего раздела (зашифрованного, например, с помощью LUKS или eCryptfs) при входе пользователя в систему. Он будет монтировать `/home` (или любую другую желаемую точку монтирования) при входе в систему через менеджер входа или при входе в консоль. Пароль от зашифрованного диска должен совпадать с паролем пользователя Linux, поэтому вам не придётся вводить два разных пароля для входа в систему.

Примечание: pam_mount также может размонтировать разделы после завершения последнего сеанса, но это не работает из коробки из-за использования `pam_systemd.so` в стеке pam, смотрите Talk:Pam mount#automatic unmounting and systemd.

## Настройка

Установите пакет pam_mount.

Настройки модуля находятся в файле `/etc/security/pam_mount.conf.xml`, документация по нему доступна в pam_mount.conf(5). Отредактируйте файл следующим образом:

    /etc/security/pam_mount.conf.xml

      <!-- Общий пример для зашифрованного раздела -->
      <volume user="ПОЛЬЗОВАТЕЛЬ" fstype="auto" path="/dev/sdaX" mountpoint="/home" options="fsck,noatime" />

      <!-- Пример использования CIFS -->
      <volume
          fstype="cifs"
          server="server.example.com"
          path="имя_ресурса"
          mountpoint="~/mnt/имя_ресурса"
          uid="10000-19999"
          options="sec=krb5i,vers=3.0,cruid=%(UIDПОЛЬЗОВАТЕЛЯ)"
      />
      <mkmountpoint enable="1" remove="true" />

    </pam_mount>

Примечания:

- Добавьте два переноса строки в конце файла, но перед последним закрывающим тегом `</pam_mount>`.
- Замените `ПОЛЬЗОВАТЕЛЬ` на имя вашего пользователя.
- Замените `/dev/sdaX` на соответствующее устройство или файл-контейнер.
- `fstype="auto"` можно заменить на любой `тип`, для которого существует исполняемый файл `/usr/bin/mount.тип`. Значение `"auto"` должно работать в большинстве случаев. Используйте `fstype="crypt"`, чтобы loop-устройство закрывалось при выходе из системы, для томов, нуждающихся в этом.
- Добавьте параметры монтирования по необходимости. Имейте в виду, что `mount.cifs` не обращается к файлу `smb.conf`, поэтому вся нужная для подключения информация должна быть указана прямо в параметрах монтирования. В данном примере `uid` соответствует локальному параметру `smb.conf` «idmap config ... : range =», чтобы pam_mount не вызывался для пользователя, работающего только под Unix. Kerberos обозначается как krb5, SMB3.0 указывается потому, что другой конец может не поддерживать SMB1, который используется по умолчанию. Подпись включается с помощью буквы i на конце krb5i. Смотрите mount.cifs(8) для более подробной информации.

### Тома LUKS

Тома, зашифрованные с помощью LUKS, можно настроить примерно так:

    /etc/security/pam_mount.conf.xml

    <volume user="пользователь" fstype="crypt" path="/dev/disk/by-partuuid/uuid_раздела" mountpoint="~" options="crypto_name=имя_тома,allow_discard,fstype=btrfs,compress=zstd" />

Разблокировка и монтирование тома выполняются с помощью mount.crypt, подробное описание опций доступно в mount.crypt(8) § Mount options.

### Тома VeraCrypt

pam_mount не поддерживает VeraCrypt напрямую, но есть обходной путь:

    /etc/security/pam_mount.conf.xml

    <volume user="пользователь" fstype="crypt" path="/dev/disk/by-partuuid/uuid_раздела" mountpoint="vcrypt"/>
    <volume user="пользователь" fstype="auto" path="/dev/mapper/vcrypt" mountpoint="/media/точка_монтирования"/>

    <cryptmount>cryptsetup --veracrypt open --type tcrypt %(VOLUME) %(MNTPT)</cryptmount>
    <cryptumount>cryptsetup close %(MNTPT)</cryptumount>

Если у вас также есть тома LUKS, вы можете использовать другой fstype для тома Veracrypt вместо `crypt` и `cryptmount/cryptumount`, например, `ncpfs` и `ncpmount/ncpumount`. Только убедитесь, что вы не используете файловую систему NCP.

### Шифрование F2FS

Существует трюк, чтобы заставить pam_mount добавить ключ расшифровки F2FS в список ключей вашего сеанса. Соль, которую вы выбрали при шифровании каталога(ов) с помощью f2fscrypt, должна совпадать с солью в `/etc/security/pam_mount.conf.xml` (0x1111 в примере ниже), а пароль должен совпадать с паролем пользователя. Этот пример предполагает, что вы не монтируете файловые системы FUSE с помощью pam_mount. Если всё-таки монтируете, то выберите другую пару тегов `<*mount>` вместо `<fusemount>` и `<fuseumount>`, например `<ncpmount>/<ncpumount>`.

    /etc/security/pam_mount.conf.xml

    <fusemount>f2fscrypt add_key -S 0x1111</fusemount>
    <fuseumount>f2fscrypt new_session</fuseumount>
    <volume noroot="1" ssh="0" fstype="fuse" path="/tmp/ненастоящий-путь-0" mountpoint="/tmp/ненастоящий-путь-1"/>

`<volume>` не делает ничего, кроме запуска команд, прописанных в `<fusemount>` и `<fuseumount>`. После входа в систему вы можете проверить, что в вашей связке ключей есть ключ расшифровки F2FS:

    $ keyctl show

    Session Keyring
     910133222 --alswrv   1000   100  keyring: _ses
     301049775 --alswrv   1000 65534   \_ keyring: _uid.1000
     013481035 --alsw-v   1000   100   \_ logon: f2fs:2e64cf4a5bafcd7

## Настройка менеджера входа

В общем, вам нужно отредактировать файлы настроек в `/etc/pam.d` так, чтобы pam_mount вызывался при входе в систему. Важен правильный порядок записей в каждом файле. Необходимо отредактировать `/etc/pam.d/system-login` как показано ниже. Если вы используете экранный менеджер, убедитесь, что его файл настроек pam включает в себя `system-login`. Примеры настроек приведены ниже, добавленные строки выделены жирным шрифтом.

Строка `pam_succeed_if` перед `pam_mount` в сессии пропускает `pam_mount` (`success=n` означает пропуск следующих `n` строк), если через стек PAM запускается пользовательская служба systemd (то есть `/etc/pam.d/systemd-user`). Это позволяет избежать двойных попыток монтирования и ошибок, связанных со сбросом привилегий при запуске экземпляра `systemd --user`. Смотрите [1] и [2] для подробностей.

    /etc/pam.d/system-login

    #%PAM-1.0

    auth       required   pam_shells.so
    auth       requisite  pam_nologin.so
    auth       optional   pam_mount.so
    auth       include    system-auth

    account    required   pam_access.so
    account    required   pam_nologin.so
    account    include    system-auth

    password   optional   pam_mount.so
    password   include    system-auth

    session    optional   pam_loginuid.so
    session    optional   pam_keyinit.so       force revoke
    session [success=1 default=ignore]  pam_succeed_if.so  service = systemd-user quiet
    session    optional   pam_mount.so
    session    include    system-auth
    session    optional   pam_motd.so          motd=/etc/motd
    session    optional   pam_mail.so          dir=/var/spool/mail standard quiet
    -session   optional   pam_systemd.so
    session    required   pam_env.so           user_readenv=1

Category:

- Authentication (Русский)