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

Остановить NSSwitch при первом совпадении

Я использую серверную часть MySQL для хранения некоторых моих пользователей UNIX в базе данных. Чтобы система могла получать информацию об именах этих пользователей, я добавил MySQL в источники NSS:

passwd:         files mysql
group:          files mysql
shadow:         files mysql

Однако, когда я запрашиваю информацию о пользователе, хранящуюся в /etc/passwd ("files"источник), серверная часть MySQL все еще запрашивается (я вижу запрос, который я настроил в /etc/libnss-mysql.cfg исполняется).

Могу ли я в любом случае остановить NSS после совпадения, чтобы MySQL не запрашивался, когда пользователь / группа обнаруживается с использованием обычных ресурсов аутентификации UNIX?

Как вы увидите в Edit 2, моя проблема появляется, когда NSS пытается создать список групп, а не когда ищет конкретное имя. Возможно, поэтому по умолчанию SUCCESS => return цепочка здесь не применяется.

Редактировать: Я попытался "заставить" NSS вернуться при первом совпадении, используя следующее ...

passwd:         files [SUCCESS=return] mysql
group:          files [SUCCESS=return] mysql
shadow:         files [SUCCESS=return] mysql

(несмотря на то, что return предполагается по умолчанию для SUCCESS положение дел), но MySQL все еще запрашивается. Удаление mysql из строк действительно ограничивает NSS файлами, поэтому мы можем четко сказать, что даже на SUCCESS, НСС continueс.

Изменить 2 (как я могу видеть, что MySQL все еще запрашивается) : мои запросы MySQL таковы, что при запросе MySQL независимо от того, какое имя пользователя вы запрашиваете, возвращаемый список групп всегда будет содержать GID 5000. Так, например, если myuser (хранится в БД) принадлежит mygroup (также хранится в БД), тогда MySQL вернет оба mygroup и GID 5000. Схематично вот что вы можете наблюдать:

mysql> SELECT * FROM grouplist WHERE username='myuser';
|---------------------------|
| GID           |  USERNAME |
|---------------------------|
| n             |  myuser   |
|---------------------------|

$ id myuser
uid=m(myuser) gid=n(mygroup) groups=n(mygroup),5000(forcedgroup)

                                                      ^^^^
                                            added for every SQL query

Это небольшое "дополнение" вносится самим запросом:

gidsbymem   SELECT id FROM ( \
                SELECT id FROM grouplist WHERE username='%1$s' \
                UNION SELECT 5000 AS id \
            ) AS custom_groups

Теперь, когда я запрашиваю информацию о пользователе, хранящуюся в /etc/passwd с участием id myotheruser, Я вижу GID 5000 в его группах, несмотря на то, что в /etc/group. Для меня происходит следующее:

Схематично:

$ id myotheruser
uid=n(myotheruser) gid=n(myothergroup) groups=n(myothergroup),5000(forcedgroup)

Хотя я ожидал:

$ id myotheruser
uid=n(myotheruser) gid=n(myothergroup) groups=n(myothergroup)

Однако, когда я удаляю MySQL из источников NSS, myotheruser в его списке больше нет GID 5000 (поэтому я могу сказать, что MySQL добавляет его).