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

ПАМ: Выполнить команду перед pam_mkhomedir?

Когда пользователь входит в систему и нет домашнего каталога, мы хотели бы создать домашний каталог пользователя, используя пам_мхомедир. Это обычная практика. Вот краткое описание pam_mkhomedir:

PAM-модуль pam_mkhomedir создаст домашний каталог пользователя, если он не существует в начале сеанса. Это позволяет пользователям присутствовать в центральной базе данных (такой как NIS, kerberos или LDAP) без использования распределенной файловой системы или предварительного создания большого количества каталогов. Каталог скелета (обычно / etc / skel /) используется для копирования файлов по умолчанию, а также устанавливает umask для создания.

Однако это система FreeBSD 8.2 с ZFS. Сначала нам нужно выполнить команду ZFS, потому что мы хотим одна файловая система ZFS на пользователя. pam_mkhomedir может сделать mkdir, но нам нужно сделать что-то вроде zfs create /zpool/home/$USER.

Кто-нибудь знает, можно ли использовать PAM для выполнения команд во время первого сеанса входа пользователя?

Есть модуль PAM под названием pam_exec - если вы напишете сценарий, который проверяет и / или создает том ZFS, вы можете связать его с существующими правилами PAM и сохранить все в порядке, не предполагая интерактивного входа в систему, оболочек и скелетных каталогов по умолчанию и т. д. Например, вы могли бы иметь

session required pam_unix.so
session required pam_exec.so check_zfs.sh $PAM_USER

или все, что подходит для вашей конкретной настройки.

(Как отметил Том Шоу в комментариях, имея session required pam_mkhomedir.so будет лишним.)

Стоит отметить, что ваш вопрос содержит неверное предположение: даже PAM не знает, был ли это первый вход пользователя; он знает только, есть ли у пользователя домашний каталог или нет.

Итак, с учетом этого предостережения, это не PAM, но вы можете легко запустить что-то из /etc/bashrc, с командой, которой предшествует проверка и удаление точечного файла в домашнем каталоге пользователя. Нужны root-права? Либо должным образом заблокированный sudo, или двоичный файл setuid, скорее всего, подойдет вам лучше всего. Оба варианта также дают вам возможность разместить точечный файл где-нибудь, где пользователь не может изменить или удалить его (если вам это небезразлично).

Итак, у вас есть два варианта:

1) измените источник для pam_mkhomedir, чтобы сначала создать файловую систему zfs, прежде чем создавать каталог. 2) позвольте pam_mkhomedir работать как обычно, затем добавьте скрипт, чтобы проверить и увидеть, есть ли папки не в их собственной файловой системе zfs, из которой пользователь вышел из системы. Когда вы поймаете эти случаи, переместите каталог / home, создайте файловую систему, а затем переместите файлы обратно в каталог.

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