LINUX.ORG.RU
ФорумAdmin

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


0

1

Всем доброго дня! У меня такой вопрос возник, никак не могу найти ответ. Суть такая есть два вебсервера, на обоих стоит nginx. Оба настраивали руками и так вышло что uid и gid пользователя и группы nginx на серверах различаются. контент синхронизируется rsync'ом, ну и после синхронизации начинаются проблемы с правами. Собственно вопрос: как можно синхронизировать uid и gid на различных серверах? Читал про NIS и LDAP. Эти решения не подходят т.к. для создания и хранения пользователей используют не /etc/passwd а сторонние хранилища (NIS - файлы в другом каталоге, LDAP - собственную БД). Когда устанавливаешь пакет (например nginx) в систему, в /etc/passwd, добавляется пользователь, от имени которого будет запускаться демон, и скрипт, который в пакете не будет добавлять LDAP/NIS пользователя. Понимаю, что есть крупные инсталляции, намного больше моей, как этот нюанс решается на них?

P.S. если это имеет значение сервера centos


1. поменяй UID на одном из серверов для username

2. найди все файлы со старым UID (find -uid), и поменяй на новый (find -exec chown username {} +)

drBatty ★★
()

вот ещё:

man rsync

       --numeric-ids
              With  this  option  rsync will transfer numeric group and user IDs rather than using user and group
              names and mapping them at both ends.

              By default rsync will use the username and groupname to determine what ownership to give files. The
              special  uid  0  and  the  special  group  0  are  never  mapped  via  user/group names even if the
              --numeric-ids option is not specified.

              If a user or group has no name on the source system or it has no match on the  destination  system,
              then  the  numeric  ID  from  the source system is used instead.  See also the comments on the "use
              chroot" setting in the rsyncd.conf manpage for  information  on  how  the  chroot  setting  affects
              rsync’s ability to look up the names of the users and groups and what you can do about it.
drBatty ★★
()
Ответ на: комментарий от drBatty

Спасибо за ответ! Я так и поступил. Может есть решения, чтоб не наступить на эти грабли еще раз?

uder
() автор топика
Ответ на: комментарий от uder

С рсинком еще проще, просто в конфигах указал, чтоб запускать от nginx и в дальнейшем все ок. Но это частное решение, может быть есть какой-то общий подход?

uder
() автор топика

Вообще Rsync пофиг на то, что различаются uid и gid.
Главное, чтобы имена пользователей и групп были одинаковы на обоих системах.
Rsync сам сделает трансляцию, если не указана опция --numeric-ids, про которую писали выше.
Так вот тебе эта опция как раз и не нужна, так как она выключает трансляцию.

bigbit ★★★★★
()
Ответ на: комментарий от uder

Я так и поступил. Может есть решения, чтоб не наступить на эти грабли еще раз?

uid вообще-то можно задавать при создании пользователя.

drBatty ★★
()
Ответ на: комментарий от bigbit

Rsync сам сделает трансляцию, если не указана опция --numeric-ids, про которую писали выше. Так вот тебе эта опция как раз и не нужна

не нужна. Но почему-то присутствует, раз uid'ы передаются...

drBatty ★★
()
Ответ на: комментарий от drBatty

не нужна. Но почему-то присутствует, раз uid'ы передаются...

из мана

If a user or group has no name on the source system or it has no match on the destination system, then the numeric ID from the source system is used instead.

Т.е. если uid не синхронизованы, используется uid с передающей системы.

uder
() автор топика
Ответ на: комментарий от bigbit

Главное, чтобы имена пользователей и групп были одинаковы на обоих системах.

В этом и вопрос. Как синхронизовать пользователей на различных системах?

uder
() автор топика

Эти решения не подходят т.к. для создания и хранения пользователей используют не /etc/passwd а сторонние хранилища (NIS - файлы в другом каталоге, LDAP - собственную БД). Когда устанавливаешь пакет (например nginx) в систему, в /etc/passwd, добавляется пользователь, от имени которого будет запускаться демон, и скрипт, который в пакете не будет добавлять LDAP/NIS пользователя.

А ты руками создай аккаунт для nginx'а в базе LDAP и пропиши его в настройках nginx'а. Единственная возможная проблема - обеспечить запуск nginx'а строго после того, как информация от LDAP будет доступна nsswitch'у.

Deleted
()
Ответ на: комментарий от uder

Т.е. если uid не синхронизованы, используется uid с передающей системы.

дык тебе НЕ синхронизация нужна, тебе нужно только одно - что-бы на TARGET были такие-же юзеры, что и на SOURCE. Например, если ты желаешь стянуть с SOURCE каталог /var, выполни там такую команду:

find /var -printf "%u\n" | sort | uniq
и ты получишь список всех юзеров, которые владеют чем-то в /var.

Потом отошли этот список на TARGET, и прошерсти /etc/passwd, в поисках юзеров, которых нет на TARGET, но есть в SOURCE.

Если такие юзеры есть, то создай их на TARGET (не важно, с каким UID).

После этой проверки можешь смело синхронизировать.

drBatty ★★
()
Ответ на: комментарий от Deleted

И если что с ЛДАП'ом произойдет,nginx не запустится. Служебных юзеров не стоит выносить из системы.

sdio ★★★★★
()
Ответ на: комментарий от uder

В этом и вопрос. Как синхронизовать пользователей на различных системах?

Создать их, что за вопрос? В чем проблема? Взять список из /etc/passwd, и пройтись по нему командой adduser, можно даже не выделять (не)существующих

sdio ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.