Как удалить пользователя из группы?


343

Какую команду я должен использовать, чтобы удалить пользователя из группы в Debian?

При добавлении пользователя в группу это можно сделать с помощью:

usermod -a -G group user

Однако я не смог найти подобную команду (принимающую группу и пользователя в качестве аргументов) для удаления пользователя из группы. Самое близкое, что я мог получить:

usermod -G all,existing,groups,except,for,group user

Есть ли какая-либо команда, подобная usermod OPTION group userOPTION, для опции usermod(или аналогичной программы) удаления пользователя из группы?


1
Для пользователей Fedora, которые в итоге оказываются здесь, man usermod показывает в комментариях опции -G, что перечисление всех текущих групп, которые хотят сохранить, - это способ удаления группы. Нет опции -R с Fedora; Вы должны использовать подход Лекенштейна, которого он пытается избежать.
Стивен

Ответы:


404

Вы можете использовать gpasswd:

# gpasswd -d user group

тогда новая конфигурация группы будет назначена при следующем входе в систему, по крайней мере, в Debian. Если пользователь вошел в систему, эффекты команды не видны сразу.


9
Отлично, спасибо! gpasswd -a user groupдобавление пользователя в группу также кажется более приятным, особенно если опечатка сделана, а -aопция пропущена.
Лекенстейн

1
Не работает для меня Я получаю два сообщения: а) Удаление пользователя из группы. б) gpasswd: пользователь не является членом группы. После запуска «группа членов» не показывает никаких изменений.
геоидезическая

1
@geoidesic вам нужно выйти из системы и снова войти в систему, чтобы увидеть эффект
Васиф Хоссейн

1
Есть ли способ, чтобы изменения вступили в силу без повторной авторизации?
Энди Фусняк

2
@geoidesic Я получил эти ошибки на Centos 7. Я обнаружил, что вы получили это, если пытались удалить пользователя из группы по умолчанию. Попробуйте переключить группу по умолчанию, usermod -g user userзатем попробуйте удалить их.
PanPipes,

175

В Debian adduserпакет содержит deluserпрограмму, которая удаляет пользователя из группы, если вы передаете оба аргумента:

deluser user group

Если вашего дистрибутива нет adduser, вы можете редактировать /etc/groupи /etc/gshadowвручную.

vigr
vigr -s

10
Я не знал о таких программах, как vigrи vipw. Очень полезно, если страницы слишком далеко :)
Lekensteyn

3
В качестве альтернативы, после изменения /etc/groupзапустить, grpconvчтобы обновить, /etc/gshadowа не редактировать его.
Сирил

sudo deluser jenkins admin/ usr / sbin / deluser: вы не можете удалить пользователя из его основной группы.
Джонатан

@JonathanLeaders Каждый пользователь должен быть хотя бы в одной группе. Используйте usermodили, vipwчтобы изменить основную группу пользователя. Этот вопрос был о дополнительных группах.
Жиль

Приятно. Там также более простая adduser $user $groupкоманда вместо usermod -x -y -z -....
ygoe

65
usermod -G "" username

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


5
Протестировано в CentOS 6.4; работает.
aggregate1166877

1
Работает и в Ubuntu 12.04.
aggregate1166877

И это, кажется, лучший способ заставить вторичные группы к любому списку групп, исключая все незарегистрированные группы.
мудрец

Протестировано и работает в CentOS 7. Спасибо!
Хитрый

14

Это подход «старой школы» ...

Большинство систем * nix хранят информацию о группе в виде простого текстового файла /etc/group, где

  • каждая строка содержит поля

    • имя группы
    • пароль
    • GID и
    • user_list

    разделены :символом.

  • поле user_list представляет собой список имен пользователей, разделенных запятыми.

Теперь предположим, что вы хотите удалить пользователя thisuser из группы с именем thatgroup. Начните с резервного копирования /etc/group, затем используйте редактор по своему усмотрению с привилегиями su, чтобы отредактировать файл /etc/group и удалить thisuserссылку из thatgroupстроки, например,

оригинальная строка примерно такая:

thatgroup:x:1274:someuser,thisuser,anotheruser

после редактирования следует оставить так:

thatgroup:x:1274:someuser,anotheruser

Как и во всех других ответах, это не повлияет на текущий сеанс (ы) пользователя, если таковые имеются (то есть, если пользователь в настоящее время вошел в систему). Изменение вступит в силу при следующем входе пользователя в систему.


1
vigrуже упоминалось для редактирования /etc/groupвручную. На моих страницах руководства написано, что имена пользователей разделяются запятыми, а не двоеточиями. Перезагрузка не обязательна, вам просто нужно повторно войти (или использовать newgrp).
Лекенштейн

Чтобы помочь всем пользователям, не входящим в Debian, поразить эти берега в поисках подсказок ... это может быть достаточно для Debian в соответствии с областью вопроса OP, но если вы используете это для ОС * BSD, вам нужно будет изменить файл открытого текста здесь, как уже упоминалось, затем введите pwd_mkdb -p /etc/master.passwd, чтобы фактически использовать этот список.
знаю

3

Вы можете использовать приведенную ниже команду для дистрибутивов SUSE (и, очевидно, других ).

usermod -R группа  имя_пользователя

где groupгруппа, из которой вы хотите удалить пользователя и user_nameпользователя, которого вы хотите удалить из группы. Например,

usermod -R root imnottheroot

1
Какой пакет предоставляет ваш бинарный файл usermod? Я прошу выяснить версию, так как моя из shadow-utils-4.1.4.3 не предоставляет опцию -R.
Мирослав

3
В моем пакете shadow 4.1.5.1-5 (Arch Linux) есть -Rопция, но это означает что-то другое. Это не Linux, я думаю.
Лекенштейн

3
Я не уверен, что это сработает. На -Rстранице руководства написано: «-R, --root CHROOT_DIR Применить изменения в каталоге CHROOT_DIR и использовать файлы конфигурации из каталога CHROOT_DIR.»
MikeKusold

2
Единственное, что я мог найти, это справочная страница оракула, но это не то же самое, поэтому этот ответ, возможно, следует удалить.
Кириас

sudo usermod -R admin jenkinsusermod: неверный путь к chroot 'admin'
Джонатан

1

Рассмотреть возможность:

  • Имя пользователя: abc2
  • имя группы: newgroup11

  • Задача: удаление пользователя abc2из группыnewgroup11

[root@home1 ~]# groups abc2
abc2 : abc2
[root@home1 ~]# usermod -G newgroup11 abc2
[root@home1 ~]# groups abc2
abc2 : abc2 newgroup11
[root@home1 ~]# usermod -G newgroup11 abc2
[root@home1 ~]# usermod -G abc2 abc2
[root@home1 ~]# groups abc2
abc2 : abc2

** Пожалуйста, поправьте меня, если я ошибаюсь. **


1
Это «работает», но только потому, что у вас есть одна вторичная группа. usermod -G newgroup11 abc2поставит вас во вторичную группу newgroup11. Поскольку основная группа есть abc2, вы окажетесь в обеих группах. usermod -g abc2 abc2приводит newgroup11к удалению из вторичных групп, потому что он больше не упоминается. Таким образом, для трех или более разных групп этот метод не будет работать. Посмотрите другие ответы gpasswdдля лучшей команды.
Лекенстейн

1

Вы можете удалить пользователя из группы, выполнив команду usermod без опции -a. Например, выполнив «usermod -G group1 username», вы добавите пользователя в группу group1 и удалите его из любых других групп, где он находится. Помните, что вы можете держать пользователя в различных группах, перечисляя имена групп, разделенные запятой.


1
Эта информация была представлена ​​уже несколько раз.
Скотт

0

Чтобы продолжить использовать usermod в дистрибутиве (например, Fedora), у которого нет опции удаления, где user = bob и group = deletethisgroup, команда будет выглядеть так:

usermod -G `cat /etc/group |  grep bob | grep -v deletethisgroup | cut -d ':' -f 1 | tr '\n' ',' | sed 's/,$//'` bob

Каналы (1) получают все записи группы, к которым принадлежит пользователь, (2) вынимают ту, которую необходимо удалить, (3) возвращают первый столбец (имя группы), заменяют символ новой строки запятой и удаляют запятую.

Конечно, вы можете поместить все это в скрипт bash, который принимает пользователя и группу для удаления в качестве параметров. awk можно использовать для сокращения конца, но я хотел придерживаться grep, cut, tr и sed.


Согласно этой странице руководства , также gpasswd -d bob deletethisgroupдоступна. Любая причина, почему вы не используете его?
Лекенштейн

Не все хотят устанавливать групповые пароли. Я просто предлагал решение, используя команду, на которую ссылался вопрос о конкретном дистрибутиве. в Fedora / RHEL / Centos с gpasswd -d удаленный пользователь все еще может присоединиться к группе, если у него есть доступ к паролю. Это фактически увеличивает групповой доступ, а не запрещает его.
Стивен

Я понял, что утилита названа gpasswdпотому, что она тесно связана /etc/passwd, а вместо этого управляет группами. В отличие от простой passwdкоманды, которая просто контролирует пароли, она gpasswdтакже может использоваться для управления членством в группе. Групповой пароль не требуется, если вы являетесь пользователем root или администратором группы.
Лекенштейн

Вы читали руководство по gpasswd? Для Fedora / RHEL / CentOS, если вы прочитали руководство, указано, что команда "используется для администрирования / etc / group и / etc / gshadow". На самом деле это не влияет на / etc / passwd. В руководстве также говорится: «Групповые пароли являются неотъемлемой проблемой безопасности, так как пароль может знать более одного человека». Он фактически не управляет членством в группе, он открывает группу для ЛЮБОГО пользователя с паролем. Групповой пароль не требуется, если вы уже являетесь ЧЛЕНОМ группы.
Стивен

Тесно связанные были в смысле аналогичных имен и целей, я не подразумевал, что файл / etc / passwd фактически управляется gpasswd. Обратите внимание, что «man-страница» в моем первом комментарии указывает на страницу руководства gpasswd для Fedora 13. С gpasswd $groupее помощью вы можете установить пароль группы, который вызывает проблему безопасности, о которой вы упоминали. Однако вы также не можете иметь пароль и использовать его gpasswd -d $user $groupдля удаления пользователя, как описано в первом комментарии и принятом ответе. Обратите внимание, что эта команда не запрашивает групповой пароль и не изменяет и не требует его.
Лекенштейн

0

Предположим, что username = student и groupname = research , поэтому для удаления studentпользователя из researchгруппы необходимо сделать следующее:

gpasswd -d student research

Зачем повторять то, что было здесь 6 годами ранее? Он помечен как принятый ответ!
Бетлиста

-1
pw groupmod "groupname|gid" -d "username|uid"

Решение, если вы используете CSH, по любой причине.


-1

Для удаления пользователя из группы gpasswd - лучшая утилита для этого IMO.

Пример команды:

sudo gpasswd -d group user

* Справочная информация *

Usage: gpasswd [option] GROUP

Options:
  -a, --add USER                add USER to GROUP
  -d, --delete USER             remove USER from GROUP
  -h, --help                    display this help message and exit
  -Q, --root CHROOT_DIR         directory to chroot into
  -r, --delete-password         remove the GROUP's password
  -R, --restrict                restrict access to GROUP to its members
  -M, --members USER,...        set the list of members of GROUP
  -A, --administrators ADMIN,...
                                set the list of administrators for GROUP
Except for the -A and -M options, the options cannot be combined.

1
Аргументы группы и пользователя меняются местами. Кроме того, это именно то, что предложенный принятый ответ, этот пост не очень полезен?
Лекенштейн
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.