pam_mount (Русский)

Состояние перевода:
На этой странице представлен перевод статьи
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