Когда пользователь входит в систему и нет домашнего каталога, мы хотели бы создать домашний каталог пользователя, используя пам_мхомедир. Это обычная практика. Вот краткое описание 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, создайте файловую систему, а затем переместите файлы обратно в каталог.
Я подозреваю, что оставление пользователя на главном / домашнем сервере в первый день не вызовет слишком много проблем, поэтому я бы выбрал второй вариант, он проще.