Синхронизация пользователей по NFS

Я реализую веб-сервер с конфигурацией и пользовательскими файлами, доступными через NFS (Amazon EFS), как описано здесь: /questions/121513/aws-avtomaticheski-masshtabiruet-obschij-veb-server-wordpress-ami-protiv-polzova/121518#121518

Как часть моей конфигурации Apache, я запускаю веб-сайты под разными именами пользователей, используя mod_mpm_itk. Как я могу синхронизировать имена пользователей между серверами без необходимости запекать новые имена пользователей в веб-сервер AMI.

Я предполагаю, что не могу просто переместить / etc / passwd в NFS, поскольку сервер не загрузится без смонтированного NFS?

Обновление на основе комментариев:

Кажется, нет способа загрузить дополнительные файлы с помощью nsswitch.conf, только для запроса дополнительных служб в соответствии с этим ответом: https://unix.stackexchange.com/a/210587

Недостатком дополнительной услуги является введение дополнительных точек отказа.

Возможен ли вариант копирования / etc / passwd из NFS при запуске сервера и повторного чтения его с помощью pwck, как описано здесь https://unix.stackexchange.com/a/102336?

2 ответа

Решение

Вы можете попробовать использовать pam_extrausers, Он использует отдельный /etc/passwd список стилей учетных записей пользователей, который дополняет стандартные режимы аутентификации. Эквивалентные файлы /var/lib/extrausers/passwd, /var/lib/extrausers/shadow, а также /var/lib/extrausers/group,

Было бы безопаснее синхронизировать это всякий раз, когда одна из его учетных записей была обновлена, оставляя /etc/passwd и связанные файлы, управляемые на сервере.

В системах, основанных на Debian, имя пакета libnss-extrausers,

Хотя это PAM модуль, конфигурация применяется в /etc/nsswitch.conf:

passwd:         compat extrausers
group:          compat extrausers
shadow:         compat extrausers

Для создания записей в этих файлах, кажется, лучше всего создавать их в вашей основной системе как локальные пользователи (ни одна из стандартных утилит не может управлять записями). Затем скопируйте эти записи из существующих passwd, shadow а также group файлы к эквивалентным в /var/lib/extrausers, Не забудьте исправить разрешения на shadow чтобы соответствовать системе один.

grep -E '^(user1|user2|user3):' /etc/passwd >/var/lib/extrausers/passwd
grep -E '^(user1|user2|user3):' /etc/shadow >/var/lib/extrausers/shadow
grep -Ew '(user1|user2|user3)'  /etc/group >/var/lib/extrausers/group

chmod u=rw,go=r   /var/lib/extrausers/passwd /var/lib/extrausers/group
chown root:shadow /var/lib/extrausers/shadow
chmod u=rw,g=r,o= /var/lib/extrausers/shadow

ls -l /var/lib/extrausers
total 12
-rw-r--r--  1 root root     21 Apr 18 15:36 group
-rw-r--r--  1 root root     49 Apr 18 15:37 passwd
-rw-r-----  1 root shadow  123 Apr 18 15:37 shadow

Вы можете копировать файлы, используя любую технику, которую вы предпочитаете. мне нравится rsync с корневой эквивалентностью:

for rhost in remote1 remote2 remote3 ...
do
    rsync -avR /var/lib/extrausers/* "$rhost":/
done

Если вы не хотите вводить дополнительные точки отказа, вы должны создавать пользователей локально. Это на самом деле очень приличная идея.

Несмотря на то, что вы можете скопировать файл passwd, я бы порекомендовал местный ансамбль playbook или марионеточный автономный манифест, который может создавать пользователей локально, если они отсутствуют. Вы можете хранить Playbook на NFS.

Другие вопросы по тегам