Я использую серверную часть 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
. Для меня происходит следующее:
/etc/passwd
и находит myotheruser
.myotheruser
, который не принадлежит ни к одной группе SQL, имеет GID 5000 в списке групп, так как MySQL добавил его.Схематично:
$ 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 добавляет его).