PAM: выполнить команду перед pam_mkhomedir?

8

Когда пользователь входит в систему, а домашний каталог отсутствует, мы хотим создать домашний каталог пользователя, используя 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 для выполнения команд во время первого сеанса входа пользователя?

Стефан Ласевский
источник
Я заменил ссылку solarisinternals.com на архивную версию с archive.org, потому что первая занята скваттером домена. Спасибо @Norman Grey за указание на это.
Стефан Ласевский,

Ответы:

9

Существует модуль 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_mkhomedir.so - опечатки в pam.conf не годятся! - и я не думаю, что эта строка нужна в любом случае, если скрипт check_zfs.sh выполняет всю грязную работу.
Том Шоу
@Tom Зачем изобретать велосипед, когда модуль PAM делает это за вас?
Эндрю
2
Суть вопроса в том, что он хочет, чтобы домашний каталог создавался с помощью «zfs create», а не «mkdir». Это достигается с помощью pam_exec. На данный момент каталог существует, поэтому последующий pam_mkhomedir ничего не сделает!
Том Шоу
@ TomShaw действительно.
Андрей
3

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

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

BMDan
источник
Я смущен. Разве pam_mkhomedir не создает эти домашние каталоги, копирует содержимое / etc / skel и т. Д.? Я взглянул на код C (во FreeBSD) и подумал, что смогу увидеть, где он копирует файлы скелета во вновь созданный homedir.
Стефан Ласевский
Тот факт, что у пользователя нет домашнего каталога, не означает, что он ранее не входил в эту систему. Например, домашний каталог мог быть удален. Однако это в основном семантические и секущиеся волосы.
Red Tux
@red: Понятно. Я обновил свой вопрос.
Стефан Ласевский
1

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

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

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

n8whnp
источник