Зачем и почему?
Файлы пользователя, как правило, хранятся не только на локальном компьютере, но и могут быть размещены на сторонних сетевых ресурсах. Большинство современных ЛВС гетерогенные, это означает, что они включают в себя серверы, рабочие станции и сетевые устройства с различными операционными системами и/или протоколами передачи данных. Например, в локальной сети могут быть рабочие станции под управлением ОС 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)
Можно позанудствовать?
Ну хотя бы grep банальный натравить на конфиги с целью удаления пустых строк и комментариев.
Оно и читать удобней, и видно, что требуется изменить.
Я сознательно привёл конфиги "как есть". Но могу жирным выделить то, что дописывал... вот. А нет, не могу, внутри тега (code) теги форматирования не действуют, вернул как было.
В конфиги common-auth и common-session добавлены auth optional pam_mount.so и session optional pam_mount.so соответственно. Ну а Volume definitions изначально пустая секция, так что там добавленную строку видно сразу.
Отправить комментарий