Я хочу добавить существующего пользователя, foo
в существующую группу, докер
.Проблема в том, что на моем компьютере есть две группы с одинаковым именем docker
, одна с идентификатором 131, а другая 999. Я хочу добавить foo
в группу docker 999. Следующая команда добавляет только foo
в группу 131 docker
:
sudo usermod -aG docker foo
Как вместо этого добавить в группу docker
с идентификатором 999?
Обновить : после дальнейшего просмотра я понимаю, что только группа docker
131
указана в / etc / group
:
$ cat /etc/group | grep docker
docker:x:131:Steve,Mark,Emmy,user1,foo
Я понятия не имею, где 999 docker, но следующий пользователь может запускать docker без sudo:
$ id user1
uid=260800(user1) gid=5000(student) groups=5001(sudoaccess),999(docker),27(sudo),124(sambashare),13010(eestaff),131(docker)
, а пользователь foo
не может:
$ id foo
uid=305800(foo) gid=5000(student) groups=27(sudo),131(docker)
Таким образом, это оказывается проблемой XY
, как указано (X) «Как добавить существующего пользователя к существующему идентификатору группы (не имени группы)?»
актуальная проблема (Y) «Что мне делать, если файлы / etc / group
и / etc / gshadow
не согласны с числовым GID группы?»
Это не явно указано на странице руководства, но usermod
примет числовой GID в качестве аргумента для обоих -g Параметры
(основная группа) и -G
(вторичные группы), по крайней мере, как проверено на Ubuntu 18.04.
Пр. учитывая
$ groups testuser
testuser : testuser staff
$ getent group ftp
ftp:x:134:
, затем
$ sudo usermod -aG 134 testuser
$ groups testuser
testuser : testuser staff ftp
/ etc / group
и / etc / gshadow
не согласны с числовым GID группы? Для этого есть инструмент командной строки, входящий в состав пакета passwd
:
NAME grpck - проверка целостности файлов группы SYNOPSIS grpck [options] [group [ shadow]] ОПИСАНИЕ Команда grpck проверяет целостность информации о группах.Он проверяет, что все записи в / etc / group и / etc / gshadow имеют правильный формат и содержат допустимые данные. Пользователю предлагается удалить записи , которые имеют неправильный формат или другие неисправимые ошибки. Выполняются проверки, чтобы убедиться, что каждая запись содержит: {{ 1}} · правильное количество полей · уникальное и действительное название группы · действительный идентификатор группы (только / etc / group) {{ 1}} · действительный список участников и администраторов · соответствующая запись в файле / etc / gshadow (соответственно / etc / group для gshadow проверяет)
Чтобы проверить несоответствие, сначала запустите в режиме только для чтения:
sudo grpck -r
(повышенные привилегии требуются даже здесь, потому что / etc / gshadow
доступен для чтения только root ). Затем, как только вы определили проблему, запустите ее снова в интерактивном режиме, чтобы исправить проблемы:
sudo grpck
Существует аналогичная утилита pwck
для обеспечения согласованности между / etc / passwd
и / etc / тень
.
TL; DR , чтобы ответить на вопрос, связанный с заголовком, подпишитесь на сообщение @steeldriver, также известное как. usermod
также работает с идентификатором группы. Приведенное ниже решение специально предназначено для проблемы, описанной в тексте OP.
По-видимому, проблема решается путем редактирования / etc / group
и изменения идентификатора группы докеров 131
на 999
. После выхода и повторного входа у меня осталась только одна группа докеров - группа 999
.
$ id foo
uid=305800(foo) gid=5000(student) groups=27(sudo),999(docker)
Я очень надеюсь, что изменение / etc / group
не приведет к каким-либо странным действиям. Корень проблемы все еще неизвестен (вход на сервер также управляется системой LDAP, поэтому, возможно, они мешают друг другу).