Назад | Перейти на главную страницу

Как смонтировать домашний каталог с помощью cifs и autofs с аутентификацией Active Directory на CentOS7?

Я пытаюсь интегрировать клиент CentOS7 с аутентификацией Active Directy и автоматически монтировать домашние компьютеры пользователей с помощью cifs.

Я бы предпочел использовать autofs, но до сих пор мне не удалось заставить работать cifs mount с параметром sec = krb5. Это сообщение всегда терпит неудачу

# mount -t cifs //fileserver.my.domain/user  /mnt/user/ -orw,noperm,sec=krb5
mount error(126): Required key not available
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)

Любые намеки на то, как заставить autofs работать с cifs и AD, будут только приветствоваться.

Настройка аутентификации была простой задачей, используя это описание от RedHat и просто добавил необходимые пакеты, перечисленные

realm discover MY.DOMAIN

и запустив команду

realm join MY.DOMAIN -U ad-admin-username

Так что аутентификация работает нормально, но заставить работать cifs и kerberos мне не по силам.

У меня есть обходной путь с использованием pam_exec, но я не чувствую, что монтирование общих файловых ресурсов относится к структуре pam.

Вставив следующие строки в /etc/pam.d/password-auth, указанный скрипт в конце установит правильный домашний адрес после аутентификации по паролю. Ленивое отключение выполняется в session_close, но это может быть неправильным решением.

Поместите это в пароль-auth

auth        optional      pam_exec.so expose_authtok /usr/bin/pam_mount_cifs.s

и это

session     optional      pam_exec.so  /usr/bin/pam_mount_cifs.sh

обе строки должны быть вставлены после строк pam_mkhomedir, вставленных командой объединения областей.

Другой альтернативой является использование pam_mount, как описано в эта почта, но тогда вам придется скомпилировать и установить pam_mount вручную, поскольку она не входит в состав CentOS. (или получить от репо Nux)

Вот сам скрипт, его нужно сохранить как /usr/bin/pam_mount_cifs.sh

#!/bin/bash
# this script is called from pam by adding entries to /etc/pam.d/password-auth like this
#
# auth      optional      pam_exec.so expose_authtok /usr/bin/pam_mount_cifs.sh
#
# and
#
# session   optional      pam_exec.so  /usr/bin/pam_mount_cifs.sh

# the script assumes that the home dir is already created by pam_mkhomedir and pam_oddjob_mkhomedir.


DOMAIN=my.domain
FILESERVER=fileserver.my.domain
MNTPNT=/home

# turn of globbing because getent returns as string containing a *
set -f

pwstring=$(getent passwd $PAM_USER)
userinfo=(${pwstring//:/ })
USER=$PAM_USER
# strip off @my.domain from user.
SHORTUSER=${USER%@$DOMAIN}
USERUID=${userinfo[2]}
USERGID=${userinfo[3]}

USERDIR=$MNTPNT/$USER

if [ -z "$PAM_TYPE" ]; then
    echo this script should only be called from pam
    exit 1
fi



if [ $PAM_TYPE = "open_session" ]; then
    # nothing to do here, mount happened in auth.
    exit 0
fi

if [ $PAM_TYPE = "close_session" ]; then
    # this might cause problems if you have services that doesn't create procs in /home. (rstudio is one example)
    umount -l $USERDIR
    exit 0
fi

if [ ! -d $USERDIR ]; then
    mkdir -p $USERDIR
#    chown $USERID:$USERGID $USERDIR
fi

# skip if the share is already mounted.
mountpoint -q $USERDIR && exit 0

# make mount.cifs read password from stdin
export PASSWD_FD=0
mount -t cifs //$FILESERVER/$SHORTUSER $USERDIR -o user=$SHORTUSER,uid=$USERUID,gid=$USERGID,noserverino