Монтирование SMB-ресурсов при входе пользователя. Версия для Active Directory

Изображение пользователя Priestone.

Зачем и почему?

Файлы пользователя, как правило, хранятся не только на локальном компьютере, но и могут быть размещены на сторонних сетевых ресурсах. Большинство современных ЛВС гетерогенные, это означает, что они включают в себя серверы, рабочие станции и сетевые устройства с различными операционными системами и/или протоколами передачи данных. Например, в локальной сети могут быть рабочие станции под управлением ОС Windows, ОС на базе ядра linux и/или MacOS - такая сеть и называется гетерогенной.

Наиболее распространены файловые серверы, предоставляющие пользователям ресурсы по протоколам SMB/CIFS ввиду очень большой распространённости устройств под управлением ОС Windows для которых данный вид предоставления ресурсов "родной".

Но не только пользователям Windows требуется простой и лёгкий способ получения файловых ресурсов. Существует достаточное количество способов получить необходимые файлы с ресурса SMB и для пользователей других ОС. Однако большинство из них либо не интуитивны, либо непонятны, либо сложны для использования в повседневной работе пользователя-не-красноглазика. К тому же, что ещё более неудобно, не все программы умеют обращаться из диалога открытия файла непосредственно к ресурсу файлового сервера. Приходится вручную копировать файл на локальный компьютер, править его, а затем заливать обратно. Сложно, долго и неудобно. Существует путь проще и удобнее.

Для осуществления данной затеи требуется всего несколько простых шагов (пример для ubuntu linux):
1. Установить на рабочую станцию два пакета: libpam-mount и cifs-utils
2. отредактировать конфигурационные файлы в каталогах /etc/pam.d и /etc/security

Итак, начальные условия:

Рабочая станция под управлением ОС Kubuntu на базе ядра linux (в данном конкретном случае введена в домен Active Directory).

В локальной сети существует, настроен и функционирует файловый сервер с именем... server (неожиданно, да?), предоставляющий ресурсы, например: сетевой каталог с именем share (все имена и совпадения случайны :-) ) по протоколу SMB/CIFS, также заведённый в домен и использующий ACL для назначения пользователям прав доступа к ресурсам.

Реализуем нашу схему автомонтирования:

Шаг первый:
$sudo apt install libpam-mount cifs-utils

Шаг второй (редактируем файлы конфигурации):

$nano /etc/pam.d/common-auth

#
# /etc/pam.d/common-auth - authentication settings common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of the authentication modules that define
# the central authentication scheme for use on the system
# (e.g., /etc/shadow, LDAP, Kerberos, etc.). The default is to use the
# traditional Unix authentication mechanisms.
#
# As of pam 1.0.1-6, this file is managed by pam-auth-update by default.
# To take advantage of this, it is recommended that you configure any
# local modules either before or after the default block, and use
# pam-auth-update to manage selection of other modules. See
# pam-auth-update(8) for details.

# here are the per-package modules (the "Primary" block)
auth [success=5 default=ignore] pam_krb5.so minimum_uid=1000
auth [success=4 default=ignore] pam_unix.so nullok_secure try_first_pass
auth [success=3 default=ignore] pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass
auth [success=2 default=ignore] pam_ccreds.so minimum_uid=1000 action=validate use_first_pass
auth [default=ignore] pam_ccreds.so minimum_uid=1000 action=update
# here's the fallback if no module succeeds
auth requisite pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
auth required pam_permit.so
# and here are more per-package modules (the "Additional" block)
auth optional pam_ccreds.so minimum_uid=1000 action=store
auth optional pam_cap.so
auth optional pam_mount.so
# end of pam-auth-update config

$nano /etc/pam.d/common-session

#
# /etc/pam.d/common-session - session-related modules common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of modules that define tasks to be performed
# at the start and end of sessions of *any* kind (both interactive and
# non-interactive).
#
# As of pam 1.0.1-6, this file is managed by pam-auth-update by default.
# To take advantage of this, it is recommended that you configure any
# local modules either before or after the default block, and use
# pam-auth-update to manage selection of other modules. See
# pam-auth-update(8) for details.

# here are the per-package modules (the "Primary" block)
session [default=1] pam_permit.so
# here's the fallback if no module succeeds
session requisite pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
session required pam_permit.so
# The pam_umask module will set the umask according to the system default in
# /etc/login.defs and user settings, solving the problem of different
# umask settings with different shells, display managers, remote sessions etc.
# See "man pam_umask".
session optional pam_umask.so
# and here are more per-package modules (the "Additional" block)
session optional pam_krb5.so minimum_uid=1000
session required pam_unix.so
session optional pam_winbind.so
session optional pam_mount.so
session optional pam_systemd.so
session optional pam_mkhomedir.so skel=/etc/skel/ umask=0077
# end of pam-auth-update config

На этом основные настройки закончены, остаётся только создать каталог куда мы будем монтировать сетевые ресурсы и внести в соответствующий файл конфигурации описания ресурсов, которые мы собираемся монтировать.

Создаём каталог, который будет точкой монтирования ресурсов:

mkdir ~/Net

Файл находится в каталоге /etc/security и называется pam_mount.conf.xml. Редактируем и его (полностью я его приводить не буду, нас интересует только секция volume definitions):

nano /etc/security/pam_mount.conf.xml

<!-- Volume definitions -->

<volume fstype="cifs" server="server" path="share" mountpoint="~/Net/share" options="user,owner,noexec,iocharset=utf8,rw" />

<!-- pam_mount parameters: General tunables -->

На этом всё. После входа пользователя (неважно - локально ли, через графическое приглашение входа рабочей станции, или на удалённый шелл по ssh) ресурс будет смонтирован и для программ и пользователя будет выглядеть локальным каталогом в каталоге ~/Net

P.S. Обратите внимание, что в Volume definitions не указываются имя и пароль пользователя - они берутся из текущего сеанса. Также не надо заранее создавать каталог ресурса в каталоге ~/Net - он будет создан с указанным в Volume definitions именем (~/Net/share) на время монтирования и удалится оттуда при выходе пользователя.

Всем добра и удобства в работе.

Комментарии (2)

0
Flameflower - 14 Июль, 2018 - 10:14
Изображение пользователя Flameflower.

Можно позанудствовать?
Ну хотя бы grep банальный натравить на конфиги с целью удаления пустых строк и комментариев.
Оно и читать удобней, и видно, что требуется изменить.

0
Priestone - 16 Июль, 2018 - 08:43
Изображение пользователя Priestone.

Я сознательно привёл конфиги "как есть". Но могу жирным выделить то, что дописывал... вот. А нет, не могу, внутри тега (code) теги форматирования не действуют, вернул как было.

В конфиги common-auth и common-session добавлены auth optional pam_mount.so и session optional pam_mount.so соответственно. Ну а Volume definitions изначально пустая секция, так что там добавленную строку видно сразу.

Отправить комментарий

CAPTCHA на основе изображений
Введите цифры