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

На одном из моих серверов у моего пользователя возникла странная проблема с членством в группе. Когда используешь id или же groups без аргументов в список групп входят группы из root пользователь и группы, общие для моего пользователя и root дублируются, как wheel, video, allowssh, Другие пользователи не затрагиваются.

mick@xxx ~ $ groups
root bin daemon sys adm disk wheel wheel floppy uucp cron audio cdrom dialout tape video video xfs games cdrw apache usb vboxusers portage allowssh allowssh svn users mick
mick@xxx ~ $ id
uid=1001(mick) gid=1001(mick) groupes=1001(mick),0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),14(uucp),16(cron),18(audio),19(cdrom),20(dialout),26(tape),27(video),33(xfs),35(games),80(cdrw),81(apache),85(usb),102(vboxusers),250(portage),800(allowssh),909(svn),1000(users)

При запуске с логином список правильный

mick@xxx ~ $ groups mick
wheel cron audio cdrom video xfs games cdrw apache usb vboxusers portage allowssh svn users mick
mick@xxx ~ $ groups root
root bin daemon sys adm disk wheel floppy uucp dialout tape video allowssh
mick@xxx ~ $ id mick
uid=1001(mick) gid=1001(mick) groupes=1001(mick),10(wheel),16(cron),18(audio),19(cdrom),27(video),33(xfs),35(games),80(cdrw),81(apache),85(usb),102(vboxusers),250(portage),800(allowssh),909(svn),1000(users)
mick@xxx ~ $ id root
uid=0(root) gid=0(root) groupes=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),14(uucp),20(dialout),26(tape),27(video),800(allowssh)

Насколько я могу сказать содержание /etc/passwd а также /etc/group тоже правильно.

mick@xxx ~ $ egrep 'mick|root' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/bin/bash
mick:x:1001:1001::/home/mick:/bin/bash

mick@xxx ~ $ egrep 'mick|root' /etc/group
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin,adm
adm:x:4:root,adm,daemon
disk:x:6:root,adm,haldaemon
wheel:x:10:root,mick,jef,apache,xfs,anne
floppy:x:11:root,haldaemon
uucp:x:14:root
cron:x:16:cron,mick,apache
audio:x:18:famille,mick,jef,juliette,victor,anne,xfs,pulse,sddm
cdrom:x:19:famille,mick,haldaemon,jef,juliette,victor,anne,xfs
dialout:x:20:root
tape:x:26:root
video:x:27:root,famille,mick,jef,juliette,victor,anne,xfs,oracle,sddm
xfs:x:33:xfs,mick,apache
games:x:35:famille,mick,jef,juliette,victor,anne,xfs
cdrw:x:80:famille,mick,haldaemon,xfs
apache:x:81:famille,jef,mick,xfs
usb:x:85:famille,mick,haldaemon,juliette,victor,anne,xfs
vboxusers:x:102:famille,vbox,mick,jef
portage:x:250:portage,famille,mick,jef,xfs,apache
allowssh:x:800:mick,jef,root,anne,juliette,victor
svn:x:909:famille,jef,mick,tracd
users:x:1000:mick,jef,apache,juliette,victor,offlineimap,xfs,anne
mick:x:1001:mick

Что может вызвать такое поведение? Как я могу это исправить?

редактировать

Разница в выходе между id а также id mick происходит потому что id вызывает системный вызов getgroups в первом случае, но не в другом, как я мог видеть с strace

mick@xxx $ strace id
[...]
getgroups(0, NULL)                      = 29
getgroups(29, [0, 1, 2, 3, 4, 6, 10, 10, 11, 14, 16, 18, 19, 20, 26, 27, 27, 33, 35, 80, 81, 85, 102, 250, 800, 800, 909, 1000, 1001]) = 29
[...]

mick@xxx $ strace id mick
[...]
openat(AT_FDCWD, "/var/db/group.db", O_RDONLY|O_CLOEXEC) = -1 ENOENT (Aucun fichier ou dossier de ce type)
openat(AT_FDCWD, "/etc/group", O_RDONLY|O_CLOEXEC) = 3
lseek(3, 0, SEEK_CUR)                   = 0
fstat(3, {st_mode=S_IFREG|0644, st_size=1978, ...}) = 0
read(3, "root:x:0:root\nbin:x:1:root,bin,d"..., 4096) = 1978
lseek(3, 0, SEEK_CUR)                   = 1978
[...repeated]
lseek(3, 0, SEEK_CUR)                   = 1978
read(3, "", 4096)                       = 0
close(3)                                = 0
openat(AT_FDCWD, "/var/db/group.db", O_RDONLY|O_CLOEXEC) = -1 ENOENT (Aucun fichier ou dossier de ce type)
openat(AT_FDCWD, "/etc/group", O_RDONLY|O_CLOEXEC) = 3
lseek(3, 0, SEEK_CUR)                   = 0
fstat(3, {st_mode=S_IFREG|0644, st_size=1978, ...}) = 0
read(3, "root:x:0:root\nbin:x:1:root,bin,d"..., 4096) = 1978
lseek(3, 0, SEEK_CUR)                   = 1978
[...repeated]
lseek(3, 0, SEEK_CUR)                   = 1978
read(3, "", 4096)                       = 0
close(3)                                = 0
[...]

Также я заметил, что список групп некорректен только в сеансе KDE, либо в Konsole, либо в xterm, но список групп корректен в других видах сеансов, например, в TTY или через SSH.

Я не могу понять, что KDE может делать с группами пользователей!

Редактировать 2

Я до сих пор не знаю причину проблемы, но она исчезла после обновления с ядра 4.14 до 4.19 и перезагрузки.

Я быстро посмотрел в Linux bugzilla, но не было никаких очевидных проблем, связанных с getgroups Системный вызов.

0 ответов

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